From d2d5aad236ae742ffa79dcbf5b901275a6c039b8 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 30 Dec 2022 22:35:18 -0700 Subject: [PATCH 001/233] Add concept of 'handlers' to web server --- core/config_default.js | 1 + core/listening_server.js | 48 +++++++++++++++++++++++++++---------- core/servers/content/web.js | 26 ++++++++++++++++++++ 3 files changed, 63 insertions(+), 12 deletions(-) diff --git a/core/config_default.js b/core/config_default.js index 6be17ec95..53d06d8d1 100644 --- a/core/config_default.js +++ b/core/config_default.js @@ -160,6 +160,7 @@ module.exports = () => { mods: paths.join(__dirname, './../mods/'), loginServers: paths.join(__dirname, './servers/login/'), contentServers: paths.join(__dirname, './servers/content/'), + webHandlers: paths.join(__dirname, './servers/content/web_handlers'), chatServers: paths.join(__dirname, './servers/chat/'), scannerTossers: paths.join(__dirname, './scanner_tossers/'), diff --git a/core/listening_server.js b/core/listening_server.js index 13670c8a9..494446bc2 100644 --- a/core/listening_server.js +++ b/core/listening_server.js @@ -6,6 +6,7 @@ const logger = require('./logger.js'); // deps const async = require('async'); +const isFunction = require('lodash/isFunction'); const listeningServers = {}; // packageName -> info @@ -36,24 +37,47 @@ function startListening(cb) { (module, nextModule) => { const moduleInst = new module.getModule(); try { - moduleInst.createServer(err => { - if (err) { - return nextModule(err); - } + async.series( + [ + callback => { + return moduleInst.createServer(callback); + }, + callback => { + listeningServers[module.moduleInfo.packageName] = { + instance: moduleInst, + info: module.moduleInfo, + }; - moduleInst.listen(err => { + if (!isFunction(moduleInst.beforeListen)) { + return callback(null); + } + moduleInst.beforeListen(err => { + return callback(err); + }); + }, + callback => { + return moduleInst.listen(callback); + }, + callback => { + if (!isFunction(moduleInst.afterListen)) { + return callback(null); + } + moduleInst.afterListen(err => { + return callback(err); + }); + }, + ], + err => { if (err) { + delete listeningServers[ + module.moduleInfo.packageName + ]; return nextModule(err); } - listeningServers[module.moduleInfo.packageName] = { - instance: moduleInst, - info: module.moduleInfo, - }; - return nextModule(null); - }); - }); + } + ); } catch (e) { logger.log.error(e, 'Exception caught creating server!'); return nextModule(e); diff --git a/core/servers/content/web.js b/core/servers/content/web.js index d0af4cd6b..db8a1fcb3 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -17,6 +17,8 @@ const mimeTypes = require('mime-types'); const forEachSeries = require('async/forEachSeries'); const findSeries = require('async/findSeries'); +const { loadModulesForCategory } = require('../../module_util'); + const ModuleInfo = (exports.moduleInfo = { name: 'Web', desc: 'Web Server', @@ -138,6 +140,30 @@ exports.getModule = class WebServerModule extends ServerModule { return cb(null); } + beforeListen(cb) { + if (!this.isEnabled()) { + return cb(null); + } + + loadModulesForCategory( + 'webHandlers', + (module, nextModule) => { + const moduleInst = new module.getModule(); + try { + moduleInst.init(err => { + return nextModule(err); + }); + } catch (e) { + logger.log.error(e, 'Exception caught web handler!'); + return nextModule(e); + } + }, + err => { + return cb(err); + } + ); + } + listen(cb) { const config = Config(); forEachSeries( From b1bb66e52faa4d405378b1aaf9272f7a200c2318 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 30 Dec 2022 22:39:39 -0700 Subject: [PATCH 002/233] WebFinger stub --- .../servers/content/web_handlers/webfinger.js | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 core/servers/content/web_handlers/webfinger.js diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js new file mode 100644 index 000000000..4dc42de49 --- /dev/null +++ b/core/servers/content/web_handlers/webfinger.js @@ -0,0 +1,46 @@ +const { ServerModule } = require('../../../server_module'); +const Config = require('../../../config').get; + +const WebServerPackageName = require('../web').moduleInfo.packageName; + +const _ = require('lodash'); + +exports.moduleInfo = { + name: 'WebFinger', + desc: 'A simple WebFinger Server', + author: 'NuSkooler', + packageName: 'codes.l33t.enigma.web.finger.server', +}; + +exports.getModule = class WebFingerServerModule extends ServerModule { + constructor() { + super(); + } + + init(cb) { + if (!_.get(Config(), 'contentServers.web.handlers.webFinger.enabled')) { + return cb(null); + } + + const { getServer } = require('../../../listening_server'); + + // we rely on the web server + this.webServer = getServer(WebServerPackageName); + if (!this.webServer || !this.webServer.instance.isEnabled()) { + return cb(null); + //return cb(Errors.DoesNotExist('Missing dependent server: Web server. Is it enabled?')); + } + + this.webServer.instance.addRoute({ + method: 'GET', + path: /^\/\.well-known\/webfinger\/?\?/, + handler: this._webFingerRequestHandler.bind(this), + }); + + return cb(null); + } + + _webFingerRequestHandler(req, resp) { + console.log(req); + } +}; From 46bc92a690726e8005d3ef0b66c539ea34e79a0e Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 31 Dec 2022 00:38:09 -0700 Subject: [PATCH 003/233] WebFinger update: return super basic info --- .../servers/content/web_handlers/webfinger.js | 99 ++++++++++++++++++- 1 file changed, 94 insertions(+), 5 deletions(-) diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index 4dc42de49..777a2a01c 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -1,15 +1,19 @@ const { ServerModule } = require('../../../server_module'); const Config = require('../../../config').get; +const { Errors } = require('../../../enig_error'); const WebServerPackageName = require('../web').moduleInfo.packageName; const _ = require('lodash'); +const User = require('../../../user'); +const { result } = require('lodash'); +const Log = require('../../../logger').log; exports.moduleInfo = { name: 'WebFinger', - desc: 'A simple WebFinger Server', + desc: 'A simple WebFinger Handler', author: 'NuSkooler', - packageName: 'codes.l33t.enigma.web.finger.server', + packageName: 'codes.l33t.enigma.web.handler.finger', }; exports.getModule = class WebFingerServerModule extends ServerModule { @@ -27,8 +31,7 @@ exports.getModule = class WebFingerServerModule extends ServerModule { // we rely on the web server this.webServer = getServer(WebServerPackageName); if (!this.webServer || !this.webServer.instance.isEnabled()) { - return cb(null); - //return cb(Errors.DoesNotExist('Missing dependent server: Web server. Is it enabled?')); + return cb(Errors.UnexpectedState('Cannot access web server!')); } this.webServer.instance.addRoute({ @@ -41,6 +44,92 @@ exports.getModule = class WebFingerServerModule extends ServerModule { } _webFingerRequestHandler(req, resp) { - console.log(req); + const url = new URL(req.url, `https://${req.headers.host}`); + + const resource = url.searchParams.get('resource'); + if (!resource) { + return this.webServer.instance.respondWithError( + resp, + 400, + '"resource" is required', + 'Missing "resource"' + ); + } + + this._getUser(resource, resp, (err, user, accountName) => { + if (err) { + // |resp| already written to + return Log.warn({ error: err.message }, `WebFinger failed: ${req.url}`); + } + + const body = JSON.stringify({ + subject: `acct:${accountName}`, + links: [this._profilePageLink(user)], + }); + + const headers = { + 'Content-Type': 'application/jrd+json', + 'Content-Length': body.length, + }; + + resp.writeHead(200, headers); + return resp.end(body); + }); + } + + _profilePageLink(user) { + const href = this.webServer.instance.buildUrl(`/wf/@${user.username}`); + return { + rel: 'http://webfinger.net/rel/profile-page', + type: 'text/plain', + href, + }; + } + + _getUser(resource, resp, cb) { + // we only handle "acct:NAME" URIs + + const notFound = () => { + this.webServer.instance.respondWithError( + resp, + 404, + 'Resource not found', + 'Resource Not Found' + ); + }; + + const acctIndex = resource.indexOf('acct:', 0); + if (0 != acctIndex) { + notFound(); + return cb(Errors.DoesNotExist('"acct:" missing')); + } + + const accountName = resource.substring(acctIndex + 5); + const domain = _.get(Config(), 'contentServers.web.domain', 'localhost'); + if (!accountName.endsWith(`@${domain}`)) { + notFound(); + return cb(Errors.Invalid(`Invalid "acct" value: ${accountName}`)); + } + + const searchQuery = accountName.substring( + 0, + accountName.length - (domain.length + 1) + ); + + User.getUserIdAndName(searchQuery, (err, userId) => { + if (err) { + notFound(); + return cb(err); + } + + User.getUser(userId, (err, user) => { + if (err) { + notFound(); + return cb(err); + } + + return cb(null, user, accountName); + }); + }); } }; From d8de6171aa751cf9952acc7dc6a179e3db5f3fc7 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Sat, 31 Dec 2022 13:05:59 -0600 Subject: [PATCH 004/233] Added additional fields from Masto --- .../servers/content/web_handlers/webfinger.js | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index 777a2a01c..120c85f03 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -6,7 +6,6 @@ const WebServerPackageName = require('../web').moduleInfo.packageName; const _ = require('lodash'); const User = require('../../../user'); -const { result } = require('lodash'); const Log = require('../../../logger').log; exports.moduleInfo = { @@ -64,7 +63,8 @@ exports.getModule = class WebFingerServerModule extends ServerModule { const body = JSON.stringify({ subject: `acct:${accountName}`, - links: [this._profilePageLink(user)], + aliases: [this._profileUrl(user), this._selfUrl(user)], + links: [this._profilePageLink(user), this._selfLink(user), this._subscribeLink()], }); const headers = { @@ -77,8 +77,12 @@ exports.getModule = class WebFingerServerModule extends ServerModule { }); } + _profileUrl(user) { + return this.webServer.instance.buildUrl(`/wf/@${user.username}`); + } + _profilePageLink(user) { - const href = this.webServer.instance.buildUrl(`/wf/@${user.username}`); + const href = this._profileUrl(user); return { rel: 'http://webfinger.net/rel/profile-page', type: 'text/plain', @@ -86,8 +90,28 @@ exports.getModule = class WebFingerServerModule extends ServerModule { }; } + _selfUrl(user) { + return this.webServer.instance.buildUrl(`/users/${user.username}`); + } + + _selfLink(user) { + const href = this._selfUrl(user); + return { + rel: 'self', + type: 'application/activity+json', + href, + }; + } + + _subscribeLink() { + return { + rel: 'http://ostatus.org/schema/1.0/subscribe', + template: this.webServer.instance.buildUrl('/authorize_interaction?uri={uri}'), + }; + } + _getUser(resource, resp, cb) { - // we only handle "acct:NAME" URIs + // we only handle "acct:NAME" URIs const notFound = () => { this.webServer.instance.respondWithError( From fb035f2b5866fa71e1b167dca1ec09187b7e5f4d Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Sat, 31 Dec 2022 16:28:03 -0600 Subject: [PATCH 005/233] Added a start at a profile --- core/servers/content/web_handlers/profile.js | 120 +++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 core/servers/content/web_handlers/profile.js diff --git a/core/servers/content/web_handlers/profile.js b/core/servers/content/web_handlers/profile.js new file mode 100644 index 000000000..f640b585e --- /dev/null +++ b/core/servers/content/web_handlers/profile.js @@ -0,0 +1,120 @@ +const { ServerModule } = require('../../../server_module'); +const Config = require('../../../config').get; +const { Errors } = require('../../../enig_error'); + +const WebServerPackageName = require('../web').moduleInfo.packageName; + +const _ = require('lodash'); +const User = require('../../../user'); +const Log = require('../../../logger').log; + +exports.moduleInfo = { + name: 'Profile', + desc: 'Displays a user profile', + author: 'CognitiveGears', + packageName: 'codes.l33t.enigma.web.handler.profile', +}; + +exports.getModule = class ProfileServerModule extends ServerModule { + constructor() { + super(); + } + + init(cb) { + if (!_.get(Config(), 'contentServers.web.handlers.profile.enabled')) { + return cb(null); + } + + const { getServer } = require('../../../listening_server'); + + // we rely on the web server + this.webServer = getServer(WebServerPackageName); + if (!this.webServer || !this.webServer.instance.isEnabled()) { + return cb(Errors.UnexpectedState('Cannot access web server!')); + } + + this.webServer.instance.addRoute({ + method: 'GET', + path: /^\/profile\//, + handler: this._profileRequestHandler.bind(this), + }); + + return cb(null); + } + + _profileRequestHandler(req, resp) { + const url = new URL(req.url, `https://${req.headers.host}`); + + const resource = url.pathname; + if (!resource) { + return this.webServer.instance.respondWithError( + resp, + 400, + 'pathname is required', + 'Missing "resource"' + ); + } + + this._getUser(resource, resp, (err, user, accountName) => { + if (err) { + // |resp| already written to + return Log.warn({ error: err.message }, `Profile request failed: ${req.url}`); + } + + // TODO: More user information here + const body = ` + User name: ${accountName}, +`; + + const headers = { + 'Content-Type': 'text/plain', + 'Content-Length': body.length, + }; + + resp.writeHead(200, headers); + return resp.end(body); + }); + } + + _getUser(resource, resp, cb) { + + const notFound = () => { + this.webServer.instance.respondWithError( + resp, + 404, + 'Resource not found', + 'Resource Not Found' + ); + }; + + // TODO: Handle URL escaped @ sign as well + const userPosition = resource.indexOf('@'); + if (-1 == userPosition) { + notFound(); + return cb(Errors.DoesNotExist('"@username" missing from path')); + } + + const searchQuery = resource.substring(userPosition + 1); + + if (_.isEmpty(searchQuery)) { + notFound(); + return cb(Errors.DoesNotExist('Empty username in path')); + } + + User.getUserIdAndName(searchQuery, (err, userId) => { + if (err) { + notFound(); + return cb(err); + } + + User.getUser(userId, (err, user) => { + if (err) { + notFound(); + return cb(err); + } + + return cb(null, user, searchQuery); + }); + }); + } +}; From 7b5cb165ee070474668ff64149a224b3c31d7296 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 31 Dec 2022 15:30:54 -0700 Subject: [PATCH 006/233] Updates to WebFinger resource parsing --- core/listening_server.js | 3 +- core/module_util.js | 8 ++ core/msg_network.js | 4 +- core/servers/content/web.js | 20 +++- .../servers/content/web_handlers/webfinger.js | 99 +++++++++++++------ 5 files changed, 99 insertions(+), 35 deletions(-) diff --git a/core/listening_server.js b/core/listening_server.js index 494446bc2..a840be698 100644 --- a/core/listening_server.js +++ b/core/listening_server.js @@ -28,9 +28,10 @@ function getServer(packageName) { function startListening(cb) { const moduleUtil = require('./module_util.js'); // late load so we get Config + const cats = moduleUtil.moduleCategories; async.each( - ['login', 'content', 'chat'], + [cats.Login, cats.Content, cats.Chat], (category, next) => { moduleUtil.loadModulesForCategory( `${category}Servers`, diff --git a/core/module_util.js b/core/module_util.js index 82453b1e2..5b2698a6b 100644 --- a/core/module_util.js +++ b/core/module_util.js @@ -21,6 +21,14 @@ exports.loadModulesForCategory = loadModulesForCategory; exports.getModulePaths = getModulePaths; exports.initializeModules = initializeModules; +exports.moduleCategories = { + Login: 'login', + Content: 'content', + Chat: 'chat', + ScannerTossers: 'scannerTossers', + WebHandlers: 'webHandlers', +}; + function loadModuleEx(options, cb) { assert(_.isObject(options)); assert(_.isString(options.name)); diff --git a/core/msg_network.js b/core/msg_network.js index e9df2e1ef..0f34b19af 100644 --- a/core/msg_network.js +++ b/core/msg_network.js @@ -2,7 +2,7 @@ 'use strict'; // ENiGMA½ -const loadModulesForCategory = require('./module_util.js').loadModulesForCategory; +const { loadModulesForCategory, moduleCategories } = require('./module_util'); // standard/deps const async = require('async'); @@ -18,7 +18,7 @@ function startup(cb) { [ function loadModules(callback) { loadModulesForCategory( - 'scannerTossers', + moduleCategories.ScannerTossers, (module, nextModule) => { const modInst = new module.getModule(); diff --git a/core/servers/content/web.js b/core/servers/content/web.js index db8a1fcb3..d3c566382 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -17,7 +17,7 @@ const mimeTypes = require('mime-types'); const forEachSeries = require('async/forEachSeries'); const findSeries = require('async/findSeries'); -const { loadModulesForCategory } = require('../../module_util'); +const { loadModulesForCategory, moduleCategories } = require('../../module_util'); const ModuleInfo = (exports.moduleInfo = { name: 'Web', @@ -26,6 +26,11 @@ const ModuleInfo = (exports.moduleInfo = { packageName: 'codes.l33t.enigma.web.server', }); +exports.WellKnownLocations = { + Rfc5785: '/.well-known', + Internal: '/_enig', +}; + class Route { constructor(route) { Object.assign(this, route); @@ -79,6 +84,17 @@ exports.getModule = class WebServerModule extends ServerModule { this.routes = {}; } + getDomain() { + const config = Config(); + const overridePrefix = _.get(config.contentServers.web.overrideUrlPrefix); + if (_.isString(overridePrefix)) { + const url = new URL(overridePrefix); + return url.hostname; + } + + return config.contentServers.web.domain; + } + buildUrl(pathAndQuery) { // // Create a URL such as @@ -146,7 +162,7 @@ exports.getModule = class WebServerModule extends ServerModule { } loadModulesForCategory( - 'webHandlers', + moduleCategories.WebHandlers, (module, nextModule) => { const moduleInst = new module.getModule(); try { diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index 120c85f03..a5f990605 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -3,9 +3,11 @@ const Config = require('../../../config').get; const { Errors } = require('../../../enig_error'); const WebServerPackageName = require('../web').moduleInfo.packageName; +const { WellKnownLocations } = require('../web'); const _ = require('lodash'); const User = require('../../../user'); +const EnigAssert = require('../../../enigma_assert'); const Log = require('../../../logger').log; exports.moduleInfo = { @@ -21,7 +23,9 @@ exports.getModule = class WebFingerServerModule extends ServerModule { } init(cb) { - if (!_.get(Config(), 'contentServers.web.handlers.webFinger.enabled')) { + const config = Config(); + + if (!_.get(config, 'contentServers.web.handlers.webFinger.enabled')) { return cb(null); } @@ -29,12 +33,30 @@ exports.getModule = class WebFingerServerModule extends ServerModule { // we rely on the web server this.webServer = getServer(WebServerPackageName); - if (!this.webServer || !this.webServer.instance.isEnabled()) { + const ws = this._webServer(); + if (!ws || !ws.isEnabled()) { return cb(Errors.UnexpectedState('Cannot access web server!')); } - this.webServer.instance.addRoute({ + const domain = ws.getDomain(); + if (!domain) { + return cb(Errors.UnexpectedState('Web server does not have "domain" set')); + } + + this.acceptedResourceRegExps = [ + // acct:NAME@our.domain.tld + new RegExp(`^acct:(.+)@${domain}$`), + // profile URL + new RegExp(`^${ws.buildUrl(WellKnownLocations.Internal + '/wf/@')}(.+)$`), + // self URL + new RegExp( + `^${ws.buildUrl(WellKnownLocations.Internal + '/ap/users/')}(.+)$` + ), + ]; + + ws.addRoute({ method: 'GET', + // https://www.rfc-editor.org/rfc/rfc7033.html#section-10.1 path: /^\/\.well-known\/webfinger\/?\?/, handler: this._webFingerRequestHandler.bind(this), }); @@ -42,12 +64,16 @@ exports.getModule = class WebFingerServerModule extends ServerModule { return cb(null); } + _webServer() { + return this.webServer.instance; + } + _webFingerRequestHandler(req, resp) { const url = new URL(req.url, `https://${req.headers.host}`); const resource = url.searchParams.get('resource'); if (!resource) { - return this.webServer.instance.respondWithError( + return this._webServer().respondWithError( resp, 400, '"resource" is required', @@ -55,16 +81,22 @@ exports.getModule = class WebFingerServerModule extends ServerModule { ); } - this._getUser(resource, resp, (err, user, accountName) => { + this._getUser(resource, resp, (err, user) => { if (err) { // |resp| already written to return Log.warn({ error: err.message }, `WebFinger failed: ${req.url}`); } + const domain = this._webServer().getDomain(); + const body = JSON.stringify({ - subject: `acct:${accountName}`, + subject: `acct:${user.username}@${domain}`, aliases: [this._profileUrl(user), this._selfUrl(user)], - links: [this._profilePageLink(user), this._selfLink(user), this._subscribeLink()], + links: [ + this._profilePageLink(user), + this._selfLink(user), + this._subscribeLink(), + ], }); const headers = { @@ -78,7 +110,9 @@ exports.getModule = class WebFingerServerModule extends ServerModule { } _profileUrl(user) { - return this.webServer.instance.buildUrl(`/wf/@${user.username}`); + return this._webServer().buildUrl( + WellKnownLocations.Internal + `/wf/@${user.username}` + ); } _profilePageLink(user) { @@ -91,9 +125,12 @@ exports.getModule = class WebFingerServerModule extends ServerModule { } _selfUrl(user) { - return this.webServer.instance.buildUrl(`/users/${user.username}`); + return this._webServer().buildUrl( + WellKnownLocations.Internal + `/ap/users/${user.username}` + ); } + // :TODO: only if ActivityPub is enabled _selfLink(user) { const href = this._selfUrl(user); return { @@ -103,18 +140,28 @@ exports.getModule = class WebFingerServerModule extends ServerModule { }; } + // :TODO: only if ActivityPub is enabled _subscribeLink() { return { rel: 'http://ostatus.org/schema/1.0/subscribe', - template: this.webServer.instance.buildUrl('/authorize_interaction?uri={uri}'), + template: this._webServer().buildUrl( + WellKnownLocations.Internal + '/ap/authorize_interaction?uri={uri}' + ), }; } - _getUser(resource, resp, cb) { - // we only handle "acct:NAME" URIs + _getAccountName(resource) { + for (const re of this.acceptedResourceRegExps) { + const m = resource.match(re); + if (m && m.length === 2) { + return m[1]; + } + } + } + _getUser(resource, resp, cb) { const notFound = () => { - this.webServer.instance.respondWithError( + this._webServer().respondWithError( resp, 404, 'Resource not found', @@ -122,25 +169,17 @@ exports.getModule = class WebFingerServerModule extends ServerModule { ); }; - const acctIndex = resource.indexOf('acct:', 0); - if (0 != acctIndex) { + const accountName = this._getAccountName(resource); + if (!accountName || accountName.length < 1) { notFound(); - return cb(Errors.DoesNotExist('"acct:" missing')); - } - - const accountName = resource.substring(acctIndex + 5); - const domain = _.get(Config(), 'contentServers.web.domain', 'localhost'); - if (!accountName.endsWith(`@${domain}`)) { - notFound(); - return cb(Errors.Invalid(`Invalid "acct" value: ${accountName}`)); + return cb( + Errors.DoesNotExist( + `Failed to parse "account name" for resource: ${resource}` + ) + ); } - const searchQuery = accountName.substring( - 0, - accountName.length - (domain.length + 1) - ); - - User.getUserIdAndName(searchQuery, (err, userId) => { + User.getUserIdAndName(accountName, (err, userId) => { if (err) { notFound(); return cb(err); @@ -152,7 +191,7 @@ exports.getModule = class WebFingerServerModule extends ServerModule { return cb(err); } - return cb(null, user, accountName); + return cb(null, user); }); }); } From 0e32e3856e9276b40901fbb51fb372c031c39f96 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 31 Dec 2022 15:39:54 -0700 Subject: [PATCH 007/233] Add CognitiveGears to author --- core/servers/content/web_handlers/webfinger.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index a5f990605..6d6d989a8 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -7,13 +7,12 @@ const { WellKnownLocations } = require('../web'); const _ = require('lodash'); const User = require('../../../user'); -const EnigAssert = require('../../../enigma_assert'); const Log = require('../../../logger').log; exports.moduleInfo = { name: 'WebFinger', desc: 'A simple WebFinger Handler', - author: 'NuSkooler', + author: 'NuSkooler, CognitiveGears', packageName: 'codes.l33t.enigma.web.handler.finger', }; From a00a93859eaa18244bd9f39e3bd76fc898e399fe Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 31 Dec 2022 15:48:51 -0700 Subject: [PATCH 008/233] Extend from WebHandlerModule --- core/servers/content/web_handlers/profile.js | 6 ++++-- core/servers/content/web_handlers/webfinger.js | 4 ++-- core/web_handler_module.js | 12 ++++++++++++ 3 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 core/web_handler_module.js diff --git a/core/servers/content/web_handlers/profile.js b/core/servers/content/web_handlers/profile.js index f640b585e..28efe4a34 100644 --- a/core/servers/content/web_handlers/profile.js +++ b/core/servers/content/web_handlers/profile.js @@ -58,7 +58,10 @@ exports.getModule = class ProfileServerModule extends ServerModule { this._getUser(resource, resp, (err, user, accountName) => { if (err) { // |resp| already written to - return Log.warn({ error: err.message }, `Profile request failed: ${req.url}`); + return Log.warn( + { error: err.message }, + `Profile request failed: ${req.url}` + ); } // TODO: More user information here @@ -77,7 +80,6 @@ exports.getModule = class ProfileServerModule extends ServerModule { } _getUser(resource, resp, cb) { - const notFound = () => { this.webServer.instance.respondWithError( resp, diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index 6d6d989a8..faee5ecee 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -1,4 +1,4 @@ -const { ServerModule } = require('../../../server_module'); +const WebHandlerModule = require('../../../web_handler_module'); const Config = require('../../../config').get; const { Errors } = require('../../../enig_error'); @@ -16,7 +16,7 @@ exports.moduleInfo = { packageName: 'codes.l33t.enigma.web.handler.finger', }; -exports.getModule = class WebFingerServerModule extends ServerModule { +exports.getModule = class WebFingerServerModule extends WebHandlerModule { constructor() { super(); } diff --git a/core/web_handler_module.js b/core/web_handler_module.js new file mode 100644 index 000000000..e2d1fc6f0 --- /dev/null +++ b/core/web_handler_module.js @@ -0,0 +1,12 @@ +const { PluginModule } = require('./plugin_module'); + +module.exports = class WebHandlerModule extends PluginModule { + constructor(options) { + super(options); + } + + init(cb) { + // to be implemented! + return cb(null); + } +}; From 38098b46f13abda49542cb395aba7ebdbb528266 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 31 Dec 2022 17:51:03 -0700 Subject: [PATCH 009/233] Comments --- core/servers/content/web.js | 4 ++-- core/servers/content/web_handlers/webfinger.js | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/core/servers/content/web.js b/core/servers/content/web.js index d3c566382..84df02b3e 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -27,8 +27,8 @@ const ModuleInfo = (exports.moduleInfo = { }); exports.WellKnownLocations = { - Rfc5785: '/.well-known', - Internal: '/_enig', + Rfc5785: '/.well-known', // https://www.rfc-editor.org/rfc/rfc5785 + Internal: '/_enig', // location of most enigma provided routes }; class Route { diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index faee5ecee..bf2fab93e 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -11,11 +11,14 @@ const Log = require('../../../logger').log; exports.moduleInfo = { name: 'WebFinger', - desc: 'A simple WebFinger Handler', + desc: 'A simple WebFinger Handler.', author: 'NuSkooler, CognitiveGears', packageName: 'codes.l33t.enigma.web.handler.finger', }; +// +// WebFinger: https://www.rfc-editor.org/rfc/rfc7033 +// exports.getModule = class WebFingerServerModule extends WebHandlerModule { constructor() { super(); @@ -44,8 +47,10 @@ exports.getModule = class WebFingerServerModule extends WebHandlerModule { this.acceptedResourceRegExps = [ // acct:NAME@our.domain.tld + // https://www.rfc-editor.org/rfc/rfc7565 new RegExp(`^acct:(.+)@${domain}$`), - // profile URL + // profile page + // https://webfinger.net/rel/profile-page/ new RegExp(`^${ws.buildUrl(WellKnownLocations.Internal + '/wf/@')}(.+)$`), // self URL new RegExp( From e1b4c3e5102769fde1164076f6e150edc85632d0 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Sun, 1 Jan 2023 10:47:59 -0600 Subject: [PATCH 010/233] Refactored profile to be part of webfinger --- core/servers/content/web_handlers/profile.js | 122 ------------------ .../servers/content/web_handlers/webfinger.js | 93 ++++++++++--- 2 files changed, 72 insertions(+), 143 deletions(-) delete mode 100644 core/servers/content/web_handlers/profile.js diff --git a/core/servers/content/web_handlers/profile.js b/core/servers/content/web_handlers/profile.js deleted file mode 100644 index 28efe4a34..000000000 --- a/core/servers/content/web_handlers/profile.js +++ /dev/null @@ -1,122 +0,0 @@ -const { ServerModule } = require('../../../server_module'); -const Config = require('../../../config').get; -const { Errors } = require('../../../enig_error'); - -const WebServerPackageName = require('../web').moduleInfo.packageName; - -const _ = require('lodash'); -const User = require('../../../user'); -const Log = require('../../../logger').log; - -exports.moduleInfo = { - name: 'Profile', - desc: 'Displays a user profile', - author: 'CognitiveGears', - packageName: 'codes.l33t.enigma.web.handler.profile', -}; - -exports.getModule = class ProfileServerModule extends ServerModule { - constructor() { - super(); - } - - init(cb) { - if (!_.get(Config(), 'contentServers.web.handlers.profile.enabled')) { - return cb(null); - } - - const { getServer } = require('../../../listening_server'); - - // we rely on the web server - this.webServer = getServer(WebServerPackageName); - if (!this.webServer || !this.webServer.instance.isEnabled()) { - return cb(Errors.UnexpectedState('Cannot access web server!')); - } - - this.webServer.instance.addRoute({ - method: 'GET', - path: /^\/profile\//, - handler: this._profileRequestHandler.bind(this), - }); - - return cb(null); - } - - _profileRequestHandler(req, resp) { - const url = new URL(req.url, `https://${req.headers.host}`); - - const resource = url.pathname; - if (!resource) { - return this.webServer.instance.respondWithError( - resp, - 400, - 'pathname is required', - 'Missing "resource"' - ); - } - - this._getUser(resource, resp, (err, user, accountName) => { - if (err) { - // |resp| already written to - return Log.warn( - { error: err.message }, - `Profile request failed: ${req.url}` - ); - } - - // TODO: More user information here - const body = ` - User name: ${accountName}, -`; - - const headers = { - 'Content-Type': 'text/plain', - 'Content-Length': body.length, - }; - - resp.writeHead(200, headers); - return resp.end(body); - }); - } - - _getUser(resource, resp, cb) { - const notFound = () => { - this.webServer.instance.respondWithError( - resp, - 404, - 'Resource not found', - 'Resource Not Found' - ); - }; - - // TODO: Handle URL escaped @ sign as well - const userPosition = resource.indexOf('@'); - if (-1 == userPosition) { - notFound(); - return cb(Errors.DoesNotExist('"@username" missing from path')); - } - - const searchQuery = resource.substring(userPosition + 1); - - if (_.isEmpty(searchQuery)) { - notFound(); - return cb(Errors.DoesNotExist('Empty username in path')); - } - - User.getUserIdAndName(searchQuery, (err, userId) => { - if (err) { - notFound(); - return cb(err); - } - - User.getUser(userId, (err, user) => { - if (err) { - notFound(); - return cb(err); - } - - return cb(null, user, searchQuery); - }); - }); - } -}; diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index bf2fab93e..6b1045d10 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -65,6 +65,12 @@ exports.getModule = class WebFingerServerModule extends WebHandlerModule { handler: this._webFingerRequestHandler.bind(this), }); + ws.addRoute({ + method: 'GET', + path: /^\/_enig\/profile\//, + handler: this._profileRequestHandler.bind(this), + }); + return cb(null); } @@ -72,6 +78,52 @@ exports.getModule = class WebFingerServerModule extends WebHandlerModule { return this.webServer.instance; } + _profileRequestHandler(req, resp) { + const url = new URL(req.url, `https://${req.headers.host}`); + + const resource = url.pathname; + if (_.isEmpty(resource)) { + return this.webServer.instance.respondWithError( + resp, + 400, + 'pathname is required', + 'Missing "resource"' + ); + } + + // TODO: Handle URL escaped @ sign as well + const userPosition = resource.indexOf('@'); + if (-1 == userPosition || userPosition == resource.length - 1) { + this._notFound(resp); + return Errors.DoesNotExist('"@username" missing from path'); + } + + const accountName = resource.substring(userPosition + 1); + + this._getUser(accountName, resp, (err, user) => { + if (err) { + // |resp| already written to + return Log.warn( + { error: err.message }, + `Profile request failed: ${req.url}` + ); + } + + // TODO: More user information here + const body = ` + User name: ${user.username}, +`; + + const headers = { + 'Content-Type': 'text/plain', + 'Content-Length': body.length, + }; + + resp.writeHead(200, headers); + return resp.end(body); + }); + } + _webFingerRequestHandler(req, resp) { const url = new URL(req.url, `https://${req.headers.host}`); @@ -85,7 +137,15 @@ exports.getModule = class WebFingerServerModule extends WebHandlerModule { ); } - this._getUser(resource, resp, (err, user) => { + const accountName = this._getAccountName(resource); + if (!accountName || accountName.length < 1) { + this._notFound(resp); + return Errors.DoesNotExist( + `Failed to parse "account name" for resource: ${resource}` + ); + } + + this._getUser(accountName, resp, (err, user) => { if (err) { // |resp| already written to return Log.warn({ error: err.message }, `WebFinger failed: ${req.url}`); @@ -163,35 +223,26 @@ exports.getModule = class WebFingerServerModule extends WebHandlerModule { } } - _getUser(resource, resp, cb) { - const notFound = () => { - this._webServer().respondWithError( - resp, - 404, - 'Resource not found', - 'Resource Not Found' - ); - }; + _notFound(resp) { + this._webServer().respondWithError( + resp, + 404, + 'Resource not found', + 'Resource Not Found' + ); + } - const accountName = this._getAccountName(resource); - if (!accountName || accountName.length < 1) { - notFound(); - return cb( - Errors.DoesNotExist( - `Failed to parse "account name" for resource: ${resource}` - ) - ); - } + _getUser(accountName, resp, cb) { User.getUserIdAndName(accountName, (err, userId) => { if (err) { - notFound(); + this._notFound(resp); return cb(err); } User.getUser(userId, (err, user) => { if (err) { - notFound(); + this._notFound(resp); return cb(err); } From db652bff59479b3e15f83ae8322f4b7293384b07 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Sun, 1 Jan 2023 11:07:33 -0600 Subject: [PATCH 011/233] Just added some info to the profile as an example. --- core/servers/content/web_handlers/webfinger.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index 6b1045d10..0b5ebfc94 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -7,6 +7,7 @@ const { WellKnownLocations } = require('../web'); const _ = require('lodash'); const User = require('../../../user'); +const UserProps = require('../../../user_property'); const Log = require('../../../logger').log; exports.moduleInfo = { @@ -110,9 +111,18 @@ exports.getModule = class WebFingerServerModule extends WebHandlerModule { } // TODO: More user information here - const body = ` - User name: ${user.username}, + let body = ` +User information for: ${user.username} + +Real name: ${user.getProperty(UserProps.RealName)}, +Login Count: ${user.getProperty(UserProps.LoginCount)}, +Affiliations: ${user.getProperty(UserProps.Affiliations)}`; + + if (user.getProperty(UserProps.AchievementTotalPoints) > 0) { + body = body + `, +Total Points: ${user.getProperty(UserProps.AchievementTotalPoints)} `; + } const headers = { 'Content-Type': 'text/plain', From 380920f6c85a75071953884e2c09951dabb57970 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 1 Jan 2023 19:19:51 -0700 Subject: [PATCH 012/233] Profile template ability --- core/servers/content/web.js | 16 +++- .../servers/content/web_handlers/webfinger.js | 78 ++++++++++++++----- www/wf/profile.template.html | 19 +++++ 3 files changed, 91 insertions(+), 22 deletions(-) create mode 100644 www/wf/profile.template.html diff --git a/core/servers/content/web.js b/core/servers/content/web.js index 84df02b3e..7b471dadc 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -27,8 +27,8 @@ const ModuleInfo = (exports.moduleInfo = { }); exports.WellKnownLocations = { - Rfc5785: '/.well-known', // https://www.rfc-editor.org/rfc/rfc5785 - Internal: '/_enig', // location of most enigma provided routes + Rfc5785: '/.well-known', // https://www.rfc-editor.org/rfc/rfc5785 + Internal: '/_enig', // location of most enigma provided routes }; class Route { @@ -375,6 +375,18 @@ exports.getModule = class WebServerModule extends ServerModule { } } + resolveTemplatePath(path) { + if (paths.isAbsolute(path)) { + return path; + } + + const staticRoot = _.get(Config(), 'contentServers.web.staticRoot'); + const resolved = paths.resolve(staticRoot, path); + if (resolved.startsWith(staticRoot)) { + return resolved; + } + } + routeTemplateFilePage(templatePath, preprocessCallback, resp) { const self = this; diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index 0b5ebfc94..ee62f9482 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -9,6 +9,10 @@ const _ = require('lodash'); const User = require('../../../user'); const UserProps = require('../../../user_property'); const Log = require('../../../logger').log; +const mimeTypes = require('mime-types'); + +const fs = require('graceful-fs'); +const paths = require('path'); exports.moduleInfo = { name: 'WebFinger', @@ -68,7 +72,7 @@ exports.getModule = class WebFingerServerModule extends WebHandlerModule { ws.addRoute({ method: 'GET', - path: /^\/_enig\/profile\//, + path: /^\/_enig\/wf\/@.+$/, handler: this._profileRequestHandler.bind(this), }); @@ -110,27 +114,62 @@ exports.getModule = class WebFingerServerModule extends WebHandlerModule { ); } - // TODO: More user information here - let body = ` -User information for: ${user.username} - -Real name: ${user.getProperty(UserProps.RealName)}, -Login Count: ${user.getProperty(UserProps.LoginCount)}, -Affiliations: ${user.getProperty(UserProps.Affiliations)}`; + this._getProfileTemplate((template, mimeType) => { + const varMap = { + USERNAME: user.username, + REAL_NAME: user.getSanitizedName('real'), + LOGIN_COUNT: user.getProperty(UserProps.LoginCount), + AFFILIATIONS: user.getProperty(UserProps.Affiliations) || 'N/A', + ACHIEVEMENT_POINTS: + user.getProperty(UserProps.AchievementTotalPoints) || '0', + }; + + let body = template; + _.each(varMap, (val, varName) => { + body = body.replace(new RegExp(`%${varName}%`, 'g'), val); + }); + + const headers = { + 'Content-Type': mimeType, + 'Content-Length': body.length, + }; + + resp.writeHead(200, headers); + return resp.end(body); + }); + }); + } - if (user.getProperty(UserProps.AchievementTotalPoints) > 0) { - body = body + `, -Total Points: ${user.getProperty(UserProps.AchievementTotalPoints)} -`; - } + _getProfileTemplate(cb) { + let templateFile = _.get( + Config(), + 'contentServers.web.handlers.webFinger.profileTemplate' + ); + if (templateFile) { + templateFile = this._webServer().resolveTemplatePath(templateFile); + } + fs.readFile(templateFile || '', 'utf8', (err, data) => { + if (err) { + if (templateFile) { + Log.warn( + { error: err.message }, + `Failed to load profile template "${templateFile}"` + ); + } - const headers = { - 'Content-Type': 'text/plain', - 'Content-Length': body.length, - }; + // :TODO: more info in default + return cb( + ` +User information for: %USERNAME% - resp.writeHead(200, headers); - return resp.end(body); +Real Name: %REAL_NAME% +Login Count: %LOGIN_COUNT% +Affiliations: %AFFILIATIONS% +Achievement Points: %ACHIEVEMENT_POINTS%`, + 'text/plain' + ); + } + return cb(data, mimeTypes.contentType(paths.basename(templateFile))); }); } @@ -242,7 +281,6 @@ Total Points: ${user.getProperty(UserProps.AchievementTotalPoints)} ); } - _getUser(accountName, resp, cb) { User.getUserIdAndName(accountName, (err, userId) => { if (err) { diff --git a/www/wf/profile.template.html b/www/wf/profile.template.html new file mode 100644 index 000000000..5292c17ed --- /dev/null +++ b/www/wf/profile.template.html @@ -0,0 +1,19 @@ + + + + + %USERNAME% + + + + +

Profile information for %USERNAME%:

+

+ Real Name %REAL_NAME%
+ Login Count %LOGIN_COUNT%
+ Affils: %AFFILIATIONS%
+ Achievement Points: %ACHIEVEMENT_POINTS%
+

+ + + \ No newline at end of file From 2b958e08857ad830cdbd1551f490db2ad049cf2e Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 1 Jan 2023 20:43:15 -0700 Subject: [PATCH 013/233] Rough docs start --- .../servers/contentservers/web-handlers.md | 9 ++ .../servers/contentservers/web-server.md | 7 +- .../contentservers/webfinger-handler.md | 103 ++++++++++++++++++ 3 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 docs/_docs/servers/contentservers/web-handlers.md create mode 100644 docs/_docs/servers/contentservers/webfinger-handler.md diff --git a/docs/_docs/servers/contentservers/web-handlers.md b/docs/_docs/servers/contentservers/web-handlers.md new file mode 100644 index 000000000..8064c5ae7 --- /dev/null +++ b/docs/_docs/servers/contentservers/web-handlers.md @@ -0,0 +1,9 @@ +--- +layout: page +title: Web Handlers +--- +Web handlers provide a way to easily add additional _routes_ to your [Web Server](./web-server.md). + +# Built in Web Handler Modules +* [WebFinger](./webfinger-handler.md): Provides basic [WebFinger](https://webfinger.net/) ([RFC7033](https://www.rfc-editor.org/rfc/rfc7033)) support. + diff --git a/docs/_docs/servers/contentservers/web-server.md b/docs/_docs/servers/contentservers/web-server.md index 1a65817ef..14c081a48 100644 --- a/docs/_docs/servers/contentservers/web-server.md +++ b/docs/_docs/servers/contentservers/web-server.md @@ -57,8 +57,11 @@ If you don't have a TLS certificate for your domain, a good source for a certifi > :information_source: Keep in mind that the SSL certificate provided by Let's Encrypt's Certbot is by default stored in a privileged location; if your ENIGMA instance is not running as root (which it should not be!), you'll need to copy the SSL certificate somewhere else in order for ENIGMA to use it. -## Static Routes -Static files live relative to the `contentServers.web.staticRoot` path which defaults to `enigma-bbs/www`. This is also commonly known as your "public root". +## Static Root +Static files live relative to the `contentServers.web.staticRoot` path which defaults to `enigma-bbs/www`. This is also commonly known as your "public root" directory. ## Custom Error Pages Customized error pages can be created for [HTTP error codes](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_Error) by providing a `.html` file in the *static routes* area. For example: `404.html`. + +## Web Handlers +[Web Handlers](./web-handlers.md) are loaded by the web content server and provide a easy way for adding additional routes & functionality to ENiGMA. \ No newline at end of file diff --git a/docs/_docs/servers/contentservers/webfinger-handler.md b/docs/_docs/servers/contentservers/webfinger-handler.md new file mode 100644 index 000000000..c375f1cc4 --- /dev/null +++ b/docs/_docs/servers/contentservers/webfinger-handler.md @@ -0,0 +1,103 @@ +--- +layout: page +title: WebFinger Handler +--- +The WebFinger ([webfinger.js](/core/servers/content/web_handlers/webfinger.js)) [Handler](./web-handlers.md) provides basic [WebFinger](https://webfinger.net/) ([RFC7033](https://www.rfc-editor.org/rfc/rfc7033)) support, enabling servers such as those participating in the [Mastodon](https://en.wikipedia.org/wiki/Mastodon_(social_network)) [Fediverse](https://en.wikipedia.org/wiki/Fediverse) to discover basic information about a user. + +# Supported Features +* [profile-page](https://webfinger.net/rel/profile-page/) +* [ActivityStream URI](https://www.w3.org/TR/activitystreams-core/) via rel of `self` and of type `application/activity+json` +* Subscription URI template via rel of `http://ostatus.org/schema/1.0/subscribe` + +# Configuration +By default, the WebFinger handler is not enabled. To enable, at a minimum set `contentServers.web.handlers.webFinger.enabled` to `true` in `config.hjson`: + +```js +contentServers: { + web: { + handlers: { + webFinger: { + enabled: true // wow, much nest! + } + } + } +} +``` + +## Configuration Keys +| Key | Description | +| ----|-------------| +| `enabled` | Boolean. Set to `true` to enable WebFinger services | +| `profileTemplate` | String. Provide a fully qualified, or relative to [static root](./web-server.md#static-root) path to a template file for fetching profile information. See [Profile Template](#profile-template) for more information. + +## Profile Template +A profile template file can offer flexibility as to what information, the format, and MIME type served by the [profile-page](https://webfinger.net/rel/profile-page/) WebFinger query. Set the `profileTemplate` key in your `webFinger` configuration block to a path to serve as the template. The MIME type will be determined by the file's extension: + +```js +contentServers: { + web: { + handlers: { + webFinger: { + enabled: true + profileTemplate: './wf/fancy-profile.html' + } + } + } +} +``` + +> :information_source: A sample template can be found at `www/wf/profile.template.html` + +# Example Session +```shell +# WebFinger query +> http get 'https://xibalba.l33t.codes/.well-known/webfinger?resource=acct:NuSkooler@xibalba.l33t.codes' +HTTP/1.1 200 OK +Connection: keep-alive +Content-Length: 558 +Content-Type: application/jrd+json +Date: Mon, 02 Jan 2023 03:36:20 GMT +Keep-Alive: timeout=5 + +{ + "aliases": [ + "https://xibalba.l33t.codes/_enig/wf/@NuSkooler", + "https://xibalba.l33t.codes/_enig/ap/users/NuSkooler" + ], + "links": [ + { + "href": "https://xibalba.l33t.codes/_enig/wf/@NuSkooler", + "rel": "https://webfinger.net/rel/profile-page", + "type": "text/plain" + }, + { + "href": "https://xibalba.l33t.codes/_enig/ap/users/NuSkooler", + "rel": "self", + "type": "application/activity+json" + }, + { + "rel": "http://ostatus.org/schema/1.0/subscribe", + "template": "http://xibalba.l33t.codes/_enig/ap/authorize_interaction?uri={uri}" + } + ], + "subject": "acct:NuSkooler@xibalba.l33t.codes" +} +``` + +```shell +# Now we can fetch the profile +> http get 'https://xibalba.l33t.codes/_enig/wf/@NuSkooler' +HTTP/1.1 200 OK +Connection: keep-alive +Content-Length: 116 +Content-Type: text/plain +Date: Mon, 02 Jan 2023 03:41:19 GMT +Keep-Alive: timeout=5 + +User information for: NuSkooler + +Real Name: Bryan Ashby +Login Count: 432 +Affiliations: ENiG +Achievement Points: 405 +``` \ No newline at end of file From ff219cbb06b1421159678dd760249e071479439a Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 1 Jan 2023 20:54:19 -0700 Subject: [PATCH 014/233] Filter disabled/inactive users out --- core/servers/content/web_handlers/webfinger.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index ee62f9482..d9f7086af 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -1,6 +1,6 @@ const WebHandlerModule = require('../../../web_handler_module'); const Config = require('../../../config').get; -const { Errors } = require('../../../enig_error'); +const { Errors, ErrorReasons } = require('../../../enig_error'); const WebServerPackageName = require('../web').moduleInfo.packageName; const { WellKnownLocations } = require('../web'); @@ -294,6 +294,17 @@ Achievement Points: %ACHIEVEMENT_POINTS%`, return cb(err); } + const accountStatus = user.getPropertyAsNumber(UserProps.AccountStatus); + if ( + User.AccountStatus.disabled == accountStatus && + User.AccountStatus.inactive == accountStatus + ) { + this._notFound(resp); + return cb( + Errors.AccessDenied('Account disabled', ErrorReasons.Disabled) + ); + } + return cb(null, user); }); }); From 25e36304586160cbb691f1cc24bc423353e33398 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 1 Jan 2023 21:15:43 -0700 Subject: [PATCH 015/233] Additional variables for profile/template --- .../servers/content/web_handlers/webfinger.js | 27 ++++++++++++++++--- www/wf/profile.template.html | 8 +++--- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index d9f7086af..9232c5169 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -13,6 +13,7 @@ const mimeTypes = require('mime-types'); const fs = require('graceful-fs'); const paths = require('path'); +const moment = require('moment'); exports.moduleInfo = { name: 'WebFinger', @@ -115,13 +116,31 @@ exports.getModule = class WebFingerServerModule extends WebHandlerModule { } this._getProfileTemplate((template, mimeType) => { + const up = (p, na = 'N/A') => { + return user.getProperty(p) || na; + }; + + let birthDate = up(UserProps.Birthdate); + if (moment.isDate(birthDate)) { + birthDate = moment(birthDate); + } + const varMap = { USERNAME: user.username, REAL_NAME: user.getSanitizedName('real'), - LOGIN_COUNT: user.getProperty(UserProps.LoginCount), - AFFILIATIONS: user.getProperty(UserProps.Affiliations) || 'N/A', - ACHIEVEMENT_POINTS: - user.getProperty(UserProps.AchievementTotalPoints) || '0', + SEX: up(UserProps.Sex), + BIRTHDATE: birthDate, + AGE: user.getAge(), + LOCATION: up(UserProps.Location), + AFFILIATIONS: up(UserProps.Affiliations), + EMAIL: up(UserProps.EmailAddress), + WEB_ADDRESS: up(UserProps.WebAddress), + ACCOUNT_CREATED: moment(user.getProperty(UserProps.AccountCreated)), + LAST_LOGIN: moment(user.getProperty(UserProps.LastLoginTs)), + LOGIN_COUNT: up(UserProps.LoginCount), + ACHIEVEMENT_COUNT: up(UserProps.AchievementTotalCount, '0'), + ACHIEVEMENT_POINTS: up(UserProps.AchievementTotalPoints, '0'), + BOARDNAME: Config().general.boardName, }; let body = template; diff --git a/www/wf/profile.template.html b/www/wf/profile.template.html index 5292c17ed..2912ad7b2 100644 --- a/www/wf/profile.template.html +++ b/www/wf/profile.template.html @@ -7,13 +7,13 @@ -

Profile information for %USERNAME%:

+

%USERNAME% of %BOARDNAME%:

- Real Name %REAL_NAME%
+ Real Name: %REAL_NAME%
+ Location: %LOCATION%
Login Count %LOGIN_COUNT%
Affils: %AFFILIATIONS%
- Achievement Points: %ACHIEVEMENT_POINTS%
+ Account Since: %ACCOUNT_CREATED%

- \ No newline at end of file From 395676f19dc677c175ba3ef5ab4f6449041a88f3 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Mon, 2 Jan 2023 15:20:24 -0600 Subject: [PATCH 016/233] accountStatus cannot both be inactive and disabled, changed to or condition. Also removed outdated comment. --- core/servers/content/web_handlers/webfinger.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index 9232c5169..7ba9a9597 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -97,7 +97,6 @@ exports.getModule = class WebFingerServerModule extends WebHandlerModule { ); } - // TODO: Handle URL escaped @ sign as well const userPosition = resource.indexOf('@'); if (-1 == userPosition || userPosition == resource.length - 1) { this._notFound(resp); @@ -314,10 +313,7 @@ Achievement Points: %ACHIEVEMENT_POINTS%`, } const accountStatus = user.getPropertyAsNumber(UserProps.AccountStatus); - if ( - User.AccountStatus.disabled == accountStatus && - User.AccountStatus.inactive == accountStatus - ) { + if (User.AccountStatus.disabled == accountStatus || User.AccountStatus.inactive == accountStatus) { this._notFound(resp); return cb( Errors.AccessDenied('Account disabled', ErrorReasons.Disabled) From bc0f7690f82fe17f168b5f9282e48d4712edb124 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Mon, 2 Jan 2023 17:21:53 -0600 Subject: [PATCH 017/233] Updated ws and added http-signature --- package-lock.json | 6583 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 155 +- yarn.lock | 4649 ++++++++++++++++---------------- 3 files changed, 8970 insertions(+), 2417 deletions(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..6f7ad060f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6583 @@ +{ + "name": "enigma-bbs", + "version": "0.0.14-beta", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "enigma-bbs", + "version": "0.0.14-beta", + "license": "BSD-2-Clause", + "dependencies": { + "@breejs/later": "4.1.0", + "async": "3.2.4", + "binary-parser": "2.1.0", + "buffers": "github:NuSkooler/node-buffers", + "bunyan": "1.8.15", + "deepdash": "^5.3.9", + "easy-table": "^1.2.0", + "exiftool": "^0.0.3", + "fs-extra": "10.1.0", + "glob": "8.0.3", + "graceful-fs": "^4.2.10", + "hashids": "^2.2.10", + "hjson": "3.2.2", + "http-signature": "^1.3.6", + "iconv-lite": "0.6.3", + "ini-config-parser": "^1.0.4", + "inquirer": "^8.2.2", + "lodash": "4.17.21", + "lru-cache": "7.13.2", + "mime-types": "^2.1.35", + "minimist": "^1.2.6", + "moment": "2.29.4", + "nntp-server": "3.1.0", + "node-pty": "0.10.1", + "nodemailer": "6.7.7", + "otplib": "11.0.1", + "qrcode-generator": "^1.4.4", + "rlogin": "^1.0.0", + "sane": "5.0.1", + "sanitize-filename": "^1.6.3", + "sqlite3": "5.0.11", + "sqlite3-trans": "1.3.0", + "ssh2": "1.11.0", + "systeminformation": "5.12.3", + "telnet-socket": "0.2.4", + "temptmp": "^1.1.0", + "uuid": "8.3.2", + "uuid-parse": "1.1.0", + "ws": "7.5.9", + "yazl": "^2.5.1" + }, + "bin": { + "enigma-bbs": "main.js", + "oputil": "oputil.js" + }, + "devDependencies": { + "eslint": "8.21.0", + "eslint-config-prettier": "^8.5.0", + "prettier": "2.7.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@breejs/later": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@breejs/later/-/later-4.1.0.tgz", + "integrity": "sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@cnakazawa/watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", + "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "dependencies": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "optional": true + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", + "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "optional": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "optional": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "optional": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "optional": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "optional": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", + "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "dependencies": { + "type-fest": "^0.5.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", + "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dependencies": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/binary-parser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz", + "integrity": "sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "git+ssh://git@github.com/NuSkooler/node-buffers.git#cd0855598f7048b02f0a51c90e22573973e9e2c2", + "license": "MIT/X11", + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/buildcheck": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz", + "integrity": "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==", + "optional": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/bunyan": { + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", + "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", + "engines": [ + "node >=0.10.0" + ], + "bin": { + "bunyan": "bin/bunyan" + }, + "optionalDependencies": { + "dtrace-provider": "~0.8", + "moment": "^2.19.3", + "mv": "~2", + "safe-json-stringify": "~1" + } + }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "optional": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dependencies": { + "rsvp": "^4.8.4" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/coffee-script": { + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", + "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", + "deprecated": "CoffeeScript on NPM has moved to \"coffeescript\" (no hyphen)", + "bin": { + "cake": "bin/cake", + "coffee": "bin/coffee" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "node_modules/cpu-features": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz", + "integrity": "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "buildcheck": "0.0.3", + "nan": "^2.15.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-extend": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==", + "dev": true + }, + "node_modules/deepdash": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz", + "integrity": "sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg==", + "dependencies": { + "lodash": "^4.17.21", + "lodash-es": "^4.17.21" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==", + "dependencies": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/del/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/del/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/del/node_modules/rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dependencies": { + "glob": "^7.0.5" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dtrace-provider": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz", + "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "nan": "^2.10.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/easy-table": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", + "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "optionalDependencies": { + "wcwidth": "^1.0.1" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "optional": true + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz", + "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.3", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/espree": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", + "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exiftool": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz", + "integrity": "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" + }, + "node_modules/external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/figures": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", + "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "node_modules/hashids": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz", + "integrity": "sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA==" + }, + "node_modules/hjson": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz", + "integrity": "sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==", + "bin": { + "hjson": "bin/hjson" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "optional": true + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "optional": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "optional": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "devOptional": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "optional": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini-config-parser": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz", + "integrity": "sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg==", + "dependencies": { + "coffee-script": "^1.12.4", + "deep-extend": "^0.5.1", + "rimraf": "^2.6.1" + } + }, + "node_modules/ini-config-parser/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ini-config-parser/node_modules/rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dependencies": { + "glob": "^7.0.5" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/inquirer": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz", + "integrity": "sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "optional": true + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "optional": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dependencies": { + "is-path-inside": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", + "dependencies": { + "path-is-inside": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "dependencies": { + "universalify": "^1.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonfile/node_modules/universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "optional": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==", + "dependencies": { + "tmpl": "1.0.x" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "optional": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "optional": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "node_modules/mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "optional": true, + "dependencies": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/mv/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "optional": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mv/node_modules/rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "optional": true, + "dependencies": { + "glob": "^6.0.1" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/nan": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", + "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "optional": true, + "bin": { + "ncp": "bin/ncp" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nntp-server": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nntp-server/-/nntp-server-3.1.0.tgz", + "integrity": "sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw==", + "dependencies": { + "debug": "^4.3.3", + "denque": "^2.0.1", + "serialize-error": "^8.1.0", + "split2": "^4.1.0" + } + }, + "node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "optional": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/node-gyp/node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "optional": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + }, + "node_modules/node-pty": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz", + "integrity": "sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg==", + "hasInstallScript": true, + "dependencies": { + "nan": "^2.14.0" + } + }, + "node_modules/nodemailer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz", + "integrity": "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/otplib": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/otplib/-/otplib-11.0.1.tgz", + "integrity": "sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ==", + "dependencies": { + "thirty-two": "1.0.2" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "optional": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "optional": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "optional": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode-generator": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz", + "integrity": "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "optional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rlogin": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz", + "integrity": "sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==", + "engines": { + "node": ">= 0.10.24" + } + }, + "node_modules/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "engines": { + "node": "6.* || >= 7.*" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "optional": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sane": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/sane/-/sane-5.0.1.tgz", + "integrity": "sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q==", + "dependencies": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^3.1.1", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.4", + "execa": "^4.0.0", + "fb-watchman": "^2.0.1", + "micromatch": "^4.0.2", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "bin": { + "sane": "src/cli.js" + }, + "engines": { + "node": "10.* || >= 12.*" + } + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-error": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "optional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", + "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", + "optional": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "optional": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/split2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", + "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sqlite3": { + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz", + "integrity": "sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.0", + "node-addon-api": "^4.2.0", + "tar": "^6.1.11" + }, + "optionalDependencies": { + "node-gyp": "8.x" + }, + "peerDependencies": { + "node-gyp": "8.x" + }, + "peerDependenciesMeta": { + "node-gyp": { + "optional": true + } + } + }, + "node_modules/sqlite3-trans": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz", + "integrity": "sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg==", + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/ssh2": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz", + "integrity": "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==", + "hasInstallScript": true, + "dependencies": { + "asn1": "^0.2.4", + "bcrypt-pbkdf": "^1.0.2" + }, + "engines": { + "node": ">=10.16.0" + }, + "optionalDependencies": { + "cpu-features": "~0.0.4", + "nan": "^2.16.0" + } + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "optional": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/string_decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", + "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/systeminformation": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.3.tgz", + "integrity": "sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A==", + "os": [ + "darwin", + "linux", + "win32", + "freebsd", + "openbsd", + "netbsd", + "sunos", + "android" + ], + "bin": { + "systeminformation": "lib/cli.js" + }, + "engines": { + "node": ">=8.0.0" + }, + "funding": { + "type": "Buy me a coffee", + "url": "https://www.buymeacoffee.com/systeminfo" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/telnet-socket": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz", + "integrity": "sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ==", + "dependencies": { + "binary-parser": "1.6.2", + "buffers": "github:NuSkooler/node-buffers" + } + }, + "node_modules/telnet-socket/node_modules/binary-parser": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz", + "integrity": "sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ==", + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/temptmp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/temptmp/-/temptmp-1.1.0.tgz", + "integrity": "sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ==", + "dependencies": { + "del": "^3.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/thirty-two": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz", + "integrity": "sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==", + "engines": { + "node": ">=0.2.6" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "optional": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "optional": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/uuid-parse": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz", + "integrity": "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==" + }, + "node_modules/v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==", + "dependencies": { + "makeerror": "1.0.x" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dependencies": { + "buffer-crc32": "~0.2.3" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@breejs/later": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@breejs/later/-/later-4.1.0.tgz", + "integrity": "sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA==" + }, + "@cnakazawa/watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", + "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "optional": true + }, + "@humanwhocodes/config-array": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@mapbox/node-pre-gyp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", + "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", + "requires": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "optional": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "optional": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true + } + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "optional": true + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "optional": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "optional": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-escapes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", + "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "requires": { + "type-fest": "^0.5.2" + }, + "dependencies": { + "type-fest": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", + "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==" + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" + }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "binary-parser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz", + "integrity": "sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ==" + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + }, + "buffers": { + "version": "git+ssh://git@github.com/NuSkooler/node-buffers.git#cd0855598f7048b02f0a51c90e22573973e9e2c2", + "from": "buffers@github:NuSkooler/node-buffers" + }, + "buildcheck": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz", + "integrity": "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==", + "optional": true + }, + "bunyan": { + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", + "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", + "requires": { + "dtrace-provider": "~0.8", + "moment": "^2.19.3", + "mv": "~2", + "safe-json-stringify": "~1" + } + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "optional": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true + } + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "requires": { + "rsvp": "^4.8.4" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "optional": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" + }, + "coffee-script": { + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", + "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "cpu-features": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz", + "integrity": "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==", + "optional": true, + "requires": { + "buildcheck": "0.0.3", + "nan": "^2.15.0" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "deep-extend": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==", + "dev": true + }, + "deepdash": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz", + "integrity": "sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg==", + "requires": { + "lodash": "^4.17.21", + "lodash-es": "^4.17.21" + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "requires": { + "clone": "^1.0.2" + } + }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==", + "requires": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + }, + "dependencies": { + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "requires": { + "array-uniq": "^1.0.1" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + } + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "requires": { + "glob": "^7.0.5" + } + } + } + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "optional": true + }, + "detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dtrace-provider": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz", + "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q==", + "optional": true, + "requires": { + "nan": "^2.10.0" + } + }, + "easy-table": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", + "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==", + "requires": { + "ansi-regex": "^5.0.1", + "wcwidth": "^1.0.1" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "^1.4.0" + } + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "optional": true + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "optional": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz", + "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.3", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "requires": {} + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", + "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "exiftool": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz", + "integrity": "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" + }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "requires": { + "bser": "2.1.1" + } + }, + "figures": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", + "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", + "requires": { + "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + } + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "hashids": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz", + "integrity": "sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA==" + }, + "hjson": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz", + "integrity": "sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==" + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "optional": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "optional": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "optional": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "devOptional": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "optional": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "optional": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini-config-parser": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz", + "integrity": "sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg==", + "requires": { + "coffee-script": "^1.12.4", + "deep-extend": "^0.5.1", + "rimraf": "^2.6.1" + }, + "dependencies": { + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "requires": { + "glob": "^7.0.5" + } + } + } + }, + "inquirer": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz", + "integrity": "sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow==", + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + } + }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "optional": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "optional": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + }, + "dependencies": { + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + } + } + }, + "jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==" + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "optional": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==", + "requires": { + "tmpl": "1.0.x" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "optional": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "optional": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "optional": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "optional": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "optional": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "optional": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "optional": true, + "requires": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "optional": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "optional": true, + "requires": { + "glob": "^6.0.1" + } + } + } + }, + "nan": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", + "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "optional": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "optional": true + }, + "nntp-server": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nntp-server/-/nntp-server-3.1.0.tgz", + "integrity": "sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw==", + "requires": { + "debug": "^4.3.3", + "denque": "^2.0.1", + "serialize-error": "^8.1.0", + "split2": "^4.1.0" + } + }, + "node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "optional": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "optional": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "optional": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + } + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + }, + "node-pty": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz", + "integrity": "sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg==", + "requires": { + "nan": "^2.14.0" + } + }, + "nodemailer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz", + "integrity": "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==" + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + }, + "otplib": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/otplib/-/otplib-11.0.1.tgz", + "integrity": "sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ==", + "requires": { + "thirty-two": "1.0.2" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "optional": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "requires": { + "pinkie": "^2.0.0" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "optional": true + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "optional": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qrcode-generator": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz", + "integrity": "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "optional": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "rlogin": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz", + "integrity": "sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==" + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sane": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/sane/-/sane-5.0.1.tgz", + "integrity": "sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q==", + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^3.1.1", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.4", + "execa": "^4.0.0", + "fb-watchman": "^2.0.1", + "micromatch": "^4.0.2", + "minimist": "^1.1.1", + "walker": "~1.0.5" + } + }, + "sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "requires": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "serialize-error": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "requires": { + "type-fest": "^0.20.2" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "optional": true + }, + "socks": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", + "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", + "optional": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "optional": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "split2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", + "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" + }, + "sqlite3": { + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz", + "integrity": "sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA==", + "requires": { + "@mapbox/node-pre-gyp": "^1.0.0", + "node-addon-api": "^4.2.0", + "node-gyp": "8.x", + "tar": "^6.1.11" + } + }, + "sqlite3-trans": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz", + "integrity": "sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg==", + "requires": { + "lodash": "^4.17.15" + } + }, + "ssh2": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz", + "integrity": "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==", + "requires": { + "asn1": "^0.2.4", + "bcrypt-pbkdf": "^1.0.2", + "cpu-features": "~0.0.4", + "nan": "^2.16.0" + } + }, + "sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "optional": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "string_decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", + "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "systeminformation": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.3.tgz", + "integrity": "sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A==" + }, + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, + "telnet-socket": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz", + "integrity": "sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ==", + "requires": { + "binary-parser": "1.6.2", + "buffers": "github:NuSkooler/node-buffers" + }, + "dependencies": { + "binary-parser": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz", + "integrity": "sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ==" + } + } + }, + "temptmp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/temptmp/-/temptmp-1.1.0.tgz", + "integrity": "sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ==", + "requires": { + "del": "^3.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "thirty-two": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz", + "integrity": "sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "requires": { + "utf8-byte-length": "^1.0.1" + } + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "optional": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "optional": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "uuid-parse": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz", + "integrity": "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==" + }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==", + "requires": { + "makeerror": "1.0.x" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "requires": {} + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "requires": { + "buffer-crc32": "~0.2.3" + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/package.json b/package.json index 1aaba1fe9..304295ce5 100644 --- a/package.json +++ b/package.json @@ -1,79 +1,80 @@ { - "name": "enigma-bbs", - "version": "0.0.14-beta", - "description": "ENiGMA½ Bulletin Board System", - "author": "Bryan Ashby ", - "license": "BSD-2-Clause", - "bin": { - "enigma-bbs": "./main.js", - "oputil": "./oputil.js" - }, - "scripts": { - "start": "node main.js", - "oputil": "node ./oputil.js", - "pretty": "npx prettier --write ." - }, - "repository": { - "type": "git", - "url": "https://github.com/NuSkooler/enigma-bbs.git" - }, - "homepage": "https://github.com/NuSkooler/enigma-bbs", - "bugs": { - "url": "https://github.com/NuSkooler/enigma-bbs/issues" - }, - "keywords": [ - "bbs", - "telnet", - "ssh", - "retro" - ], - "dependencies": { - "@breejs/later": "4.1.0", - "async": "3.2.4", - "binary-parser": "2.1.0", - "buffers": "github:NuSkooler/node-buffers", - "bunyan": "1.8.15", - "deepdash": "^5.3.9", - "easy-table": "^1.2.0", - "exiftool": "^0.0.3", - "fs-extra": "10.1.0", - "glob": "8.0.3", - "graceful-fs": "^4.2.10", - "hashids": "^2.2.10", - "hjson": "3.2.2", - "iconv-lite": "0.6.3", - "ini-config-parser": "^1.0.4", - "inquirer": "^8.2.2", - "lodash": "4.17.21", - "lru-cache": "7.13.2", - "mime-types": "^2.1.35", - "minimist": "^1.2.6", - "moment": "2.29.4", - "nntp-server": "3.1.0", - "node-pty": "0.10.1", - "nodemailer": "6.7.7", - "otplib": "11.0.1", - "qrcode-generator": "^1.4.4", - "rlogin": "^1.0.0", - "sane": "5.0.1", - "sanitize-filename": "^1.6.3", - "sqlite3": "5.0.11", - "sqlite3-trans": "1.3.0", - "ssh2": "1.11.0", - "systeminformation": "5.12.3", - "telnet-socket": "0.2.4", - "temptmp": "^1.1.0", - "uuid": "8.3.2", - "uuid-parse": "1.1.0", - "ws": "7.4.3", - "yazl": "^2.5.1" - }, - "devDependencies": { - "eslint": "8.21.0", - "eslint-config-prettier": "^8.5.0", - "prettier": "2.7.1" - }, - "engines": { - "node": ">=14" - } + "name": "enigma-bbs", + "version": "0.0.14-beta", + "description": "ENiGMA½ Bulletin Board System", + "author": "Bryan Ashby ", + "license": "BSD-2-Clause", + "bin": { + "enigma-bbs": "./main.js", + "oputil": "./oputil.js" + }, + "scripts": { + "start": "node main.js", + "oputil": "node ./oputil.js", + "pretty": "npx prettier --write ." + }, + "repository": { + "type": "git", + "url": "https://github.com/NuSkooler/enigma-bbs.git" + }, + "homepage": "https://github.com/NuSkooler/enigma-bbs", + "bugs": { + "url": "https://github.com/NuSkooler/enigma-bbs/issues" + }, + "keywords": [ + "bbs", + "telnet", + "ssh", + "retro" + ], + "dependencies": { + "@breejs/later": "4.1.0", + "async": "3.2.4", + "binary-parser": "2.1.0", + "buffers": "github:NuSkooler/node-buffers", + "bunyan": "1.8.15", + "deepdash": "^5.3.9", + "easy-table": "^1.2.0", + "exiftool": "^0.0.3", + "fs-extra": "10.1.0", + "glob": "8.0.3", + "graceful-fs": "^4.2.10", + "hashids": "^2.2.10", + "hjson": "3.2.2", + "http-signature": "^1.3.6", + "iconv-lite": "0.6.3", + "ini-config-parser": "^1.0.4", + "inquirer": "^8.2.2", + "lodash": "4.17.21", + "lru-cache": "7.13.2", + "mime-types": "^2.1.35", + "minimist": "^1.2.6", + "moment": "2.29.4", + "nntp-server": "3.1.0", + "node-pty": "0.10.1", + "nodemailer": "6.7.7", + "otplib": "11.0.1", + "qrcode-generator": "^1.4.4", + "rlogin": "^1.0.0", + "sane": "5.0.1", + "sanitize-filename": "^1.6.3", + "sqlite3": "5.0.11", + "sqlite3-trans": "1.3.0", + "ssh2": "1.11.0", + "systeminformation": "5.12.3", + "telnet-socket": "0.2.4", + "temptmp": "^1.1.0", + "uuid": "8.3.2", + "uuid-parse": "1.1.0", + "ws": "7.5.9", + "yazl": "^2.5.1" + }, + "devDependencies": { + "eslint": "8.21.0", + "eslint-config-prettier": "^8.5.0", + "prettier": "2.7.1" + }, + "engines": { + "node": ">=14" + } } diff --git a/yarn.lock b/yarn.lock index a687e8663..692f561e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,2418 +3,2387 @@ "@breejs/later@4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@breejs/later/-/later-4.1.0.tgz#9246907f46cc9e9c9af37d791ab468d98921bcc1" - integrity sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA== + "integrity" "sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA==" + "resolved" "https://registry.npmjs.org/@breejs/later/-/later-4.1.0.tgz" + "version" "4.1.0" "@cnakazawa/watch@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" - integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== + "integrity" "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==" + "resolved" "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz" + "version" "1.0.3" dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" + "exec-sh" "^0.3.2" + "minimist" "^1.2.0" "@eslint/eslintrc@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" - integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.3.2" - globals "^13.15.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" + "integrity" "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==" + "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "ajv" "^6.12.4" + "debug" "^4.3.2" + "espree" "^9.3.2" + "globals" "^13.15.0" + "ignore" "^5.2.0" + "import-fresh" "^3.2.1" + "js-yaml" "^4.1.0" + "minimatch" "^3.1.2" + "strip-json-comments" "^3.1.1" "@gar/promisify@^1.0.1": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + "integrity" "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + "resolved" "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" + "version" "1.1.3" "@humanwhocodes/config-array@^0.10.4": - version "0.10.4" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" - integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== + "integrity" "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz" + "version" "0.10.4" dependencies: "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.4" + "debug" "^4.1.1" + "minimatch" "^3.0.4" "@humanwhocodes/gitignore-to-minimatch@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" - integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== + "integrity" "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz" + "version" "1.0.2" "@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + "integrity" "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + "version" "1.2.1" "@mapbox/node-pre-gyp@^1.0.0": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz#09a8781a3a036151cdebbe8719d6f8b25d4058bc" - integrity sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw== - dependencies: - detect-libc "^2.0.0" - https-proxy-agent "^5.0.0" - make-dir "^3.1.0" - node-fetch "^2.6.7" - nopt "^5.0.0" - npmlog "^5.0.1" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.11" + "integrity" "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==" + "resolved" "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz" + "version" "1.0.9" + dependencies: + "detect-libc" "^2.0.0" + "https-proxy-agent" "^5.0.0" + "make-dir" "^3.1.0" + "node-fetch" "^2.6.7" + "nopt" "^5.0.0" + "npmlog" "^5.0.1" + "rimraf" "^3.0.2" + "semver" "^7.3.5" + "tar" "^6.1.11" "@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + "version" "2.1.5" dependencies: "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" + "run-parallel" "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + "version" "2.0.5" "@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + "version" "1.2.8" dependencies: "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" + "fastq" "^1.6.0" "@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + "integrity" "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==" + "resolved" "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" + "version" "1.1.1" dependencies: "@gar/promisify" "^1.0.1" - semver "^7.3.5" + "semver" "^7.3.5" "@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + "integrity" "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==" + "resolved" "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" + "version" "1.1.2" dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" + "mkdirp" "^1.0.4" + "rimraf" "^3.0.2" "@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + "integrity" "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" + "version" "1.1.2" "@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^8.8.0: - version "8.8.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" - integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agentkeepalive@^4.1.3: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" - integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== - dependencies: - debug "^4.1.0" - depd "^1.1.2" - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-escapes@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.2.1.tgz#4dccdb846c3eee10f6d64dea66273eab90c37228" - integrity sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q== - dependencies: - type-fest "^0.5.2" - -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - -ansi-regex@^5.0.0, ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + "integrity" "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + "resolved" "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz" + "version" "1.1.1" + +"abbrev@1": + "integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + "version" "1.1.1" + +"acorn-jsx@^5.3.2": + "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" + "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + "version" "5.3.2" + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8.8.0": + "integrity" "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" + "version" "8.8.0" + +"agent-base@^6.0.2", "agent-base@6": + "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==" + "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "debug" "4" + +"agentkeepalive@^4.1.3": + "integrity" "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==" + "resolved" "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "debug" "^4.1.0" + "depd" "^1.1.2" + "humanize-ms" "^1.2.1" + +"aggregate-error@^3.0.0": + "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" + "resolved" "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "clean-stack" "^2.0.0" + "indent-string" "^4.0.0" + +"ajv@^6.10.0", "ajv@^6.12.4": + "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + "version" "6.12.6" + dependencies: + "fast-deep-equal" "^3.1.1" + "fast-json-stable-stringify" "^2.0.0" + "json-schema-traverse" "^0.4.1" + "uri-js" "^4.2.2" + +"ansi-escapes@^4.2.1": + "integrity" "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==" + "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "type-fest" "^0.5.2" + +"ansi-regex@^5.0.1": + "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + "version" "5.0.1" + +"ansi-styles@^4.1.0": + "integrity" "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz" + "version" "4.2.1" dependencies: "@types/color-name" "^1.1.1" - color-convert "^2.0.1" + "color-convert" "^2.0.1" -anymatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== +"anymatch@^3.1.1": + "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + "version" "3.1.2" dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" + "normalize-path" "^3.0.0" + "picomatch" "^2.0.4" "aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-we-there-yet@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" - integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -asn1@^0.2.4: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -async@3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bcrypt-pbkdf@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -binary-parser@1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/binary-parser/-/binary-parser-1.6.2.tgz#8410a82ffd9403271ec182bd91e63a09cee88cbe" - integrity sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ== - -binary-parser@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/binary-parser/-/binary-parser-2.1.0.tgz#425776c870c64ddb555d7cc0010ccbf9d9278234" - integrity sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ== - -bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + "integrity" "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + "resolved" "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + "version" "2.0.0" + +"are-we-there-yet@^2.0.0": + "integrity" "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==" + "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "delegates" "^1.0.0" + "readable-stream" "^3.6.0" + +"are-we-there-yet@^3.0.0": + "integrity" "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==" + "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "delegates" "^1.0.0" + "readable-stream" "^3.6.0" + +"argparse@^2.0.1": + "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + "version" "2.0.1" + +"array-union@^1.0.1": + "integrity" "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "array-uniq" "^1.0.1" + +"array-union@^2.1.0": + "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + "version" "2.1.0" + +"array-uniq@^1.0.1": + "integrity" "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" + "resolved" "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + "version" "1.0.3" + +"asn1@^0.2.4", "asn1@~0.2.3": + "integrity" "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==" + "resolved" "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" + "version" "0.2.6" + dependencies: + "safer-buffer" "~2.1.0" + +"assert-plus@^1.0.0", "assert-plus@1.0.0": + "integrity" "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" + "resolved" "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + "version" "1.0.0" + +"async@3.2.4": + "integrity" "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + "resolved" "https://registry.npmjs.org/async/-/async-3.2.4.tgz" + "version" "3.2.4" + +"balanced-match@^1.0.0": + "integrity" "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + "version" "1.0.0" + +"base64-js@^1.3.1": + "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + "version" "1.5.1" + +"bcrypt-pbkdf@^1.0.0", "bcrypt-pbkdf@^1.0.2": + "integrity" "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==" + "resolved" "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "tweetnacl" "^0.14.3" + +"binary-parser@1.6.2": + "integrity" "sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ==" + "resolved" "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz" + "version" "1.6.2" + +"binary-parser@2.1.0": + "integrity" "sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ==" + "resolved" "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz" + "version" "2.1.0" + +"bl@^4.1.0": + "integrity" "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==" + "resolved" "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "buffer" "^5.5.0" + "inherits" "^2.0.4" + "readable-stream" "^3.4.0" + +"brace-expansion@^1.1.7": + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" + dependencies: + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" + +"brace-expansion@^2.0.1": + "integrity" "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + "version" "2.0.1" dependencies: - balanced-match "^1.0.0" - -braces@^3.0.1, braces@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + "balanced-match" "^1.0.0" + +"braces@^3.0.2": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" dependencies: - fill-range "^7.0.1" + "fill-range" "^7.0.1" -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" +"bser@2.1.1": + "integrity" "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==" + "resolved" "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "node-int64" "^0.4.0" -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= +"buffer-crc32@~0.2.3": + "integrity" "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + "resolved" "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" + "version" "0.2.13" -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" +"buffer@^5.5.0": + "integrity" "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" + "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + "version" "5.7.1" + dependencies: + "base64-js" "^1.3.1" + "ieee754" "^1.1.13" "buffers@github:NuSkooler/node-buffers": - version "0.1.1" - resolved "https://codeload.github.com/NuSkooler/node-buffers/tar.gz/cd0855598f7048b02f0a51c90e22573973e9e2c2" - -buildcheck@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.3.tgz#70451897a95d80f7807e68fc412eb2e7e35ff4d5" - integrity sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA== - -bunyan@1.8.15: - version "1.8.15" - resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.15.tgz#8ce34ca908a17d0776576ca1b2f6cbd916e93b46" - integrity sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig== + "resolved" "git+ssh://git@github.com/NuSkooler/node-buffers.git#cd0855598f7048b02f0a51c90e22573973e9e2c2" + "version" "0.1.1" + +"buildcheck@0.0.3": + "integrity" "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==" + "resolved" "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz" + "version" "0.0.3" + +"bunyan@1.8.15": + "integrity" "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==" + "resolved" "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz" + "version" "1.8.15" optionalDependencies: - dtrace-provider "~0.8" - moment "^2.19.3" - mv "~2" - safe-json-stringify "~1" + "dtrace-provider" "~0.8" + "moment" "^2.19.3" + "mv" "~2" + "safe-json-stringify" "~1" -cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== +"cacache@^15.2.0": + "integrity" "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==" + "resolved" "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" + "version" "15.3.0" dependencies: "@npmcli/fs" "^1.0.0" "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.5.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -coffee-script@^1.12.4: - version "1.12.7" - resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.12.7.tgz#c05dae0cb79591d05b3070a8433a98c9a89ccc53" - integrity sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw== - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-support@^1.1.2, color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -console-control-strings@^1.0.0, console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -cpu-features@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.4.tgz#0023475bb4f4c525869c162e4108099e35bf19d8" - integrity sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A== - dependencies: - buildcheck "0.0.3" - nan "^2.15.0" - -cross-spawn@^7.0.0, cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -debug@4, debug@^4.1.0, debug@^4.3.2, debug@^4.3.3: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" - integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== - dependencies: - ms "2.1.2" - -deep-extend@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f" - integrity sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w== - -deep-is@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -deepdash@^5.3.9: - version "5.3.9" - resolved "https://registry.yarnpkg.com/deepdash/-/deepdash-5.3.9.tgz#2aa92570d7b1787ed281e2fafe0be24df00ddfe4" - integrity sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg== - dependencies: - lodash "^4.17.21" - lodash-es "^4.17.21" - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -del@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= - dependencies: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -denque@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" - integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== - -depd@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -detect-libc@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" - integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dtrace-provider@~0.8: - version "0.8.7" - resolved "https://registry.yarnpkg.com/dtrace-provider/-/dtrace-provider-0.8.7.tgz#dc939b4d3e0620cfe0c1cd803d0d2d7ed04ffd04" - integrity sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= - dependencies: - nan "^2.10.0" - -easy-table@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/easy-table/-/easy-table-1.2.0.tgz#ba9225d7138fee307bfd4f0b5bc3c04bdc7c54eb" - integrity sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww== - dependencies: - ansi-regex "^5.0.1" + "chownr" "^2.0.0" + "fs-minipass" "^2.0.0" + "glob" "^7.1.4" + "infer-owner" "^1.0.4" + "lru-cache" "^6.0.0" + "minipass" "^3.1.1" + "minipass-collect" "^1.0.2" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.2" + "mkdirp" "^1.0.3" + "p-map" "^4.0.0" + "promise-inflight" "^1.0.1" + "rimraf" "^3.0.2" + "ssri" "^8.0.1" + "tar" "^6.0.2" + "unique-filename" "^1.1.1" + +"callsites@^3.0.0": + "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + "version" "3.1.0" + +"capture-exit@^2.0.0": + "integrity" "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==" + "resolved" "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "rsvp" "^4.8.4" + +"chalk@^4.0.0", "chalk@^4.1.0", "chalk@^4.1.1": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chardet@^0.7.0": + "integrity" "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "resolved" "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + "version" "0.7.0" + +"chownr@^2.0.0": + "integrity" "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + "resolved" "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + "version" "2.0.0" + +"clean-stack@^2.0.0": + "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + "version" "2.2.0" + +"cli-cursor@^3.1.0": + "integrity" "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" + "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "restore-cursor" "^3.1.0" + +"cli-spinners@^2.5.0": + "integrity" "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" + "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" + "version" "2.6.1" + +"cli-width@^3.0.0": + "integrity" "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + "version" "3.0.0" + +"clone@^1.0.2": + "integrity" "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" + "resolved" "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + "version" "1.0.4" + +"coffee-script@^1.12.4": + "integrity" "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==" + "resolved" "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz" + "version" "1.12.7" + +"color-convert@^2.0.1": + "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "color-name" "~1.1.4" + +"color-name@~1.1.4": + "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + "version" "1.1.4" + +"color-support@^1.1.2", "color-support@^1.1.3": + "integrity" "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + "resolved" "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + "version" "1.1.3" + +"concat-map@0.0.1": + "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" + +"console-control-strings@^1.0.0", "console-control-strings@^1.1.0": + "integrity" "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + "resolved" "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + "version" "1.1.0" + +"core-util-is@1.0.2": + "integrity" "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + "version" "1.0.2" + +"cpu-features@~0.0.4": + "integrity" "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==" + "resolved" "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz" + "version" "0.0.4" + dependencies: + "buildcheck" "0.0.3" + "nan" "^2.15.0" + +"cross-spawn@^7.0.0", "cross-spawn@^7.0.2": + "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + "version" "7.0.3" + dependencies: + "path-key" "^3.1.0" + "shebang-command" "^2.0.0" + "which" "^2.0.1" + +"dashdash@^1.12.0": + "integrity" "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==" + "resolved" "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" + "version" "1.14.1" + dependencies: + "assert-plus" "^1.0.0" + +"debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.2", "debug@^4.3.3", "debug@4": + "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + "version" "4.3.4" + dependencies: + "ms" "2.1.2" + +"deep-extend@^0.5.1": + "integrity" "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" + "resolved" "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz" + "version" "0.5.1" + +"deep-is@^0.1.3": + "integrity" "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==" + "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" + "version" "0.1.3" + +"deepdash@^5.3.9": + "integrity" "sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg==" + "resolved" "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz" + "version" "5.3.9" + dependencies: + "lodash" "^4.17.21" + "lodash-es" "^4.17.21" + +"defaults@^1.0.3": + "integrity" "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==" + "resolved" "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "clone" "^1.0.2" + +"del@^3.0.0": + "integrity" "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==" + "resolved" "https://registry.npmjs.org/del/-/del-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "globby" "^6.1.0" + "is-path-cwd" "^1.0.0" + "is-path-in-cwd" "^1.0.0" + "p-map" "^1.1.1" + "pify" "^3.0.0" + "rimraf" "^2.2.8" + +"delegates@^1.0.0": + "integrity" "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + "resolved" "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + "version" "1.0.0" + +"denque@^2.0.1": + "integrity" "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" + "resolved" "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz" + "version" "2.1.0" + +"depd@^1.1.2": + "integrity" "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + "version" "1.1.2" + +"detect-libc@^2.0.0": + "integrity" "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + "resolved" "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" + "version" "2.0.1" + +"dir-glob@^3.0.1": + "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" + "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "path-type" "^4.0.0" + +"doctrine@^3.0.0": + "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" + "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "esutils" "^2.0.2" + +"dtrace-provider@~0.8": + "integrity" "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q==" + "resolved" "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz" + "version" "0.8.7" + dependencies: + "nan" "^2.10.0" + +"easy-table@^1.2.0": + "integrity" "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==" + "resolved" "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "ansi-regex" "^5.0.1" optionalDependencies: - wcwidth "^1.0.1" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encoding@^0.1.12: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== - dependencies: - once "^1.4.0" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-prettier@^8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" - integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== - -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" - integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== - -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== - -eslint@8.21.0: - version "8.21.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.21.0.tgz#1940a68d7e0573cef6f50037addee295ff9be9ef" - integrity sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA== + "wcwidth" "^1.0.1" + +"ecc-jsbn@~0.1.1": + "integrity" "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==" + "resolved" "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" + "version" "0.1.2" + dependencies: + "jsbn" "~0.1.0" + "safer-buffer" "^2.1.0" + +"emoji-regex@^8.0.0": + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + "version" "8.0.0" + +"encoding@^0.1.0", "encoding@^0.1.12": + "integrity" "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==" + "resolved" "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + "version" "0.1.13" + dependencies: + "iconv-lite" "^0.6.2" + +"end-of-stream@^1.1.0": + "integrity" "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==" + "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz" + "version" "1.4.1" + dependencies: + "once" "^1.4.0" + +"env-paths@^2.2.0": + "integrity" "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + "resolved" "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + "version" "2.2.1" + +"err-code@^2.0.2": + "integrity" "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + "resolved" "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + "version" "2.0.3" + +"escape-string-regexp@^1.0.5": + "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" + +"escape-string-regexp@^4.0.0": + "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + "version" "4.0.0" + +"eslint-config-prettier@^8.5.0": + "integrity" "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==" + "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" + "version" "8.5.0" + +"eslint-scope@^7.1.1": + "integrity" "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" + "version" "7.1.1" + dependencies: + "esrecurse" "^4.3.0" + "estraverse" "^5.2.0" + +"eslint-utils@^3.0.0": + "integrity" "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==" + "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "eslint-visitor-keys" "^2.0.0" + +"eslint-visitor-keys@^2.0.0": + "integrity" "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" + "version" "2.0.0" + +"eslint-visitor-keys@^3.3.0": + "integrity" "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" + "version" "3.3.0" + +"eslint@>=5", "eslint@>=7.0.0", "eslint@8.21.0": + "integrity" "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==" + "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz" + "version" "8.21.0" dependencies: "@eslint/eslintrc" "^1.3.0" "@humanwhocodes/config-array" "^0.10.4" "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.3.3" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - functional-red-black-tree "^1.0.1" - glob-parent "^6.0.1" - globals "^13.15.0" - globby "^11.1.0" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^9.3.2, espree@^9.3.3: - version "9.3.3" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.3.tgz#2dd37c4162bb05f433ad3c1a52ddf8a49dc08e9d" - integrity sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng== - dependencies: - acorn "^8.8.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" - integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== - -estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -exec-sh@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" - integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== - -exec-sh@^0.3.4: - version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - -execa@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -exiftool@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/exiftool/-/exiftool-0.0.3.tgz#f58a92bd77270adc54f3151ced61a4a3ab69d707" - integrity sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= - -external-editor@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" - integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + "ajv" "^6.10.0" + "chalk" "^4.0.0" + "cross-spawn" "^7.0.2" + "debug" "^4.3.2" + "doctrine" "^3.0.0" + "escape-string-regexp" "^4.0.0" + "eslint-scope" "^7.1.1" + "eslint-utils" "^3.0.0" + "eslint-visitor-keys" "^3.3.0" + "espree" "^9.3.3" + "esquery" "^1.4.0" + "esutils" "^2.0.2" + "fast-deep-equal" "^3.1.3" + "file-entry-cache" "^6.0.1" + "find-up" "^5.0.0" + "functional-red-black-tree" "^1.0.1" + "glob-parent" "^6.0.1" + "globals" "^13.15.0" + "globby" "^11.1.0" + "grapheme-splitter" "^1.0.4" + "ignore" "^5.2.0" + "import-fresh" "^3.0.0" + "imurmurhash" "^0.1.4" + "is-glob" "^4.0.0" + "js-yaml" "^4.1.0" + "json-stable-stringify-without-jsonify" "^1.0.1" + "levn" "^0.4.1" + "lodash.merge" "^4.6.2" + "minimatch" "^3.1.2" + "natural-compare" "^1.4.0" + "optionator" "^0.9.1" + "regexpp" "^3.2.0" + "strip-ansi" "^6.0.1" + "strip-json-comments" "^3.1.0" + "text-table" "^0.2.0" + "v8-compile-cache" "^2.0.3" + +"espree@^9.3.2", "espree@^9.3.3": + "integrity" "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==" + "resolved" "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz" + "version" "9.3.3" + dependencies: + "acorn" "^8.8.0" + "acorn-jsx" "^5.3.2" + "eslint-visitor-keys" "^3.3.0" + +"esquery@^1.4.0": + "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==" + "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "estraverse" "^5.1.0" + +"esrecurse@^4.3.0": + "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" + "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "estraverse" "^5.2.0" + +"estraverse@^5.1.0", "estraverse@^5.2.0": + "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" + "version" "5.2.0" + +"esutils@^2.0.2": + "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + "version" "2.0.3" + +"exec-sh@^0.3.2", "exec-sh@^0.3.4": + "integrity" "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" + "resolved" "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz" + "version" "0.3.6" + +"execa@^4.0.0": + "integrity" "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==" + "resolved" "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "cross-spawn" "^7.0.0" + "get-stream" "^5.0.0" + "human-signals" "^1.1.1" + "is-stream" "^2.0.0" + "merge-stream" "^2.0.0" + "npm-run-path" "^4.0.0" + "onetime" "^5.1.0" + "signal-exit" "^3.0.2" + "strip-final-newline" "^2.0.0" + +"exiftool@^0.0.3": + "integrity" "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" + "resolved" "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz" + "version" "0.0.3" + +"external-editor@^3.0.3": + "integrity" "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==" + "resolved" "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "chardet" "^0.7.0" + "iconv-lite" "^0.4.24" + "tmp" "^0.0.33" + +"extsprintf@^1.2.0", "extsprintf@1.3.0": + "integrity" "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" + "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + "version" "1.3.0" + +"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": + "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + "version" "3.1.3" + +"fast-glob@^3.2.9": + "integrity" "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz" + "version" "3.2.11" dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== - dependencies: - bser "2.1.1" - -figures@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" - integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" - integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== - -fs-extra@10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -gauge@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" - integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.2" - console-control-strings "^1.0.0" - has-unicode "^2.0.1" - object-assign "^4.1.1" - signal-exit "^3.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.2" - -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -get-stream@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -glob@^6.0.1: - version "6.0.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" - integrity sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.3, glob@^7.0.5: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.3: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.4: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^13.15.0: - version "13.17.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" - integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== - dependencies: - type-fest "^0.20.2" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -graceful-fs@^4.1.6: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= - -graceful-fs@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" - integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== - -graceful-fs@^4.2.10, graceful-fs@^4.2.6: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -hashids@^2.2.10: - version "2.2.10" - resolved "https://registry.yarnpkg.com/hashids/-/hashids-2.2.10.tgz#82f45538cf03ce73e31b78d1abe78d287cf760c4" - integrity sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA== - -hjson@3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/hjson/-/hjson-3.2.2.tgz#a5a81138f4c0bb427e4b2ac917fafd4b454436cf" - integrity sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q== - -http-cache-semantics@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + "glob-parent" "^5.1.2" + "merge2" "^1.3.0" + "micromatch" "^4.0.4" + +"fast-json-stable-stringify@^2.0.0": + "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + "version" "2.1.0" + +"fast-levenshtein@^2.0.6": + "integrity" "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + "version" "2.0.6" + +"fastq@^1.6.0": + "integrity" "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==" + "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" + "version" "1.13.0" + dependencies: + "reusify" "^1.0.4" + +"fb-watchman@^2.0.1": + "integrity" "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==" + "resolved" "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "bser" "2.1.1" + +"figures@^3.0.0": + "integrity" "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==" + "resolved" "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "escape-string-regexp" "^1.0.5" + +"file-entry-cache@^6.0.1": + "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" + "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "flat-cache" "^3.0.4" + +"fill-range@^7.0.1": + "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "to-regex-range" "^5.0.1" + +"find-up@^5.0.0": + "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "locate-path" "^6.0.0" + "path-exists" "^4.0.0" + +"flat-cache@^3.0.4": + "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==" + "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "flatted" "^3.1.0" + "rimraf" "^3.0.2" + +"flatted@^3.1.0": + "integrity" "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==" + "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" + "version" "3.1.1" + +"fs-extra@10.1.0": + "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + "version" "10.1.0" + dependencies: + "graceful-fs" "^4.2.0" + "jsonfile" "^6.0.1" + "universalify" "^2.0.0" + +"fs-minipass@^2.0.0": + "integrity" "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==" + "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "minipass" "^3.0.0" + +"fs.realpath@^1.0.0": + "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" + +"functional-red-black-tree@^1.0.1": + "integrity" "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" + "version" "1.0.1" + +"gauge@^3.0.0": + "integrity" "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==" + "resolved" "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "aproba" "^1.0.3 || ^2.0.0" + "color-support" "^1.1.2" + "console-control-strings" "^1.0.0" + "has-unicode" "^2.0.1" + "object-assign" "^4.1.1" + "signal-exit" "^3.0.0" + "string-width" "^4.2.3" + "strip-ansi" "^6.0.1" + "wide-align" "^1.1.2" + +"gauge@^4.0.3": + "integrity" "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==" + "resolved" "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" + "version" "4.0.4" + dependencies: + "aproba" "^1.0.3 || ^2.0.0" + "color-support" "^1.1.3" + "console-control-strings" "^1.1.0" + "has-unicode" "^2.0.1" + "signal-exit" "^3.0.7" + "string-width" "^4.2.3" + "strip-ansi" "^6.0.1" + "wide-align" "^1.1.5" + +"get-stream@^5.0.0": + "integrity" "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "pump" "^3.0.0" + +"getpass@^0.1.1": + "integrity" "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==" + "resolved" "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" + "version" "0.1.7" + dependencies: + "assert-plus" "^1.0.0" + +"glob-parent@^5.1.2": + "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "is-glob" "^4.0.1" + +"glob-parent@^6.0.1": + "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "is-glob" "^4.0.3" + +"glob@^6.0.1": + "integrity" "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==" + "resolved" "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz" + "version" "6.0.4" + dependencies: + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "2 || 3" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^7.0.3", "glob@^7.0.5": + "integrity" "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" + "version" "7.1.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^7.1.3": + "integrity" "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + "version" "7.1.6" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^7.1.4": + "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + "version" "7.2.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.1.1" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@8.0.3": + "integrity" "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==" + "resolved" "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" + "version" "8.0.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^5.0.1" + "once" "^1.3.0" + +"globals@^13.15.0": + "integrity" "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==" + "resolved" "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" + "version" "13.17.0" + dependencies: + "type-fest" "^0.20.2" + +"globby@^11.1.0": + "integrity" "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==" + "resolved" "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + "version" "11.1.0" + dependencies: + "array-union" "^2.1.0" + "dir-glob" "^3.0.1" + "fast-glob" "^3.2.9" + "ignore" "^5.2.0" + "merge2" "^1.4.1" + "slash" "^3.0.0" + +"globby@^6.1.0": + "integrity" "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==" + "resolved" "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "array-union" "^1.0.1" + "glob" "^7.0.3" + "object-assign" "^4.0.1" + "pify" "^2.0.0" + "pinkie-promise" "^2.0.0" + +"graceful-fs@^4.1.6", "graceful-fs@^4.2.0", "graceful-fs@^4.2.10", "graceful-fs@^4.2.6": + "integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + "version" "4.2.10" + +"grapheme-splitter@^1.0.4": + "integrity" "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + "resolved" "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" + "version" "1.0.4" + +"has-flag@^4.0.0": + "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + "version" "4.0.0" + +"has-unicode@^2.0.1": + "integrity" "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + "resolved" "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + "version" "2.0.1" + +"hashids@^2.2.10": + "integrity" "sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA==" + "resolved" "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz" + "version" "2.2.10" + +"hjson@3.2.2": + "integrity" "sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==" + "resolved" "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" + "version" "3.2.2" + +"http-cache-semantics@^4.1.0": + "integrity" "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" + "version" "4.1.0" + +"http-proxy-agent@^4.0.1": + "integrity" "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==" + "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" + "version" "4.0.1" dependencies: "@tootallnate/once" "1" - agent-base "6" - debug "4" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -iconv-lite@0.6.3, iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - -import-fresh@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" - integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-fresh@^3.2.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e" - integrity sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -inherits@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini-config-parser@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/ini-config-parser/-/ini-config-parser-1.0.4.tgz#0abc75cb68c506204712d2b4861400b6adbfda78" - integrity sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg== - dependencies: - coffee-script "^1.12.4" - deep-extend "^0.5.1" - rimraf "^2.6.1" - -inquirer@^8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.2.tgz#1310517a87a0814d25336c78a20b44c3d9b7629d" - integrity sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-glob@^4.0.1, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= - -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" + "agent-base" "6" + "debug" "4" + +"http-signature@^1.3.6": + "integrity" "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==" + "resolved" "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz" + "version" "1.3.6" + dependencies: + "assert-plus" "^1.0.0" + "jsprim" "^2.0.2" + "sshpk" "^1.14.1" + +"https-proxy-agent@^5.0.0": + "integrity" "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==" + "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "agent-base" "6" + "debug" "4" + +"human-signals@^1.1.1": + "integrity" "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" + "version" "1.1.1" + +"humanize-ms@^1.2.1": + "integrity" "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==" + "resolved" "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "ms" "^2.0.0" + +"iconv-lite@^0.4.24": + "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + "version" "0.4.24" + dependencies: + "safer-buffer" ">= 2.1.2 < 3" + +"iconv-lite@^0.6.2", "iconv-lite@0.6.3": + "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + "version" "0.6.3" + dependencies: + "safer-buffer" ">= 2.1.2 < 3.0.0" + +"ieee754@^1.1.13": + "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + "version" "1.2.1" + +"ignore@^5.2.0": + "integrity" "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" + "version" "5.2.0" + +"import-fresh@^3.0.0", "import-fresh@^3.2.1": + "integrity" "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==" + "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "parent-module" "^1.0.0" + "resolve-from" "^4.0.0" + +"imurmurhash@^0.1.4": + "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + "version" "0.1.4" + +"indent-string@^4.0.0": + "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + "version" "4.0.0" + +"infer-owner@^1.0.4": + "integrity" "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + "resolved" "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + "version" "1.0.4" + +"inflight@^1.0.4": + "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "once" "^1.3.0" + "wrappy" "1" + +"inherits@^2.0.3", "inherits@^2.0.4", "inherits@2": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" + +"ini-config-parser@^1.0.4": + "integrity" "sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg==" + "resolved" "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "coffee-script" "^1.12.4" + "deep-extend" "^0.5.1" + "rimraf" "^2.6.1" + +"inquirer@^8.2.2": + "integrity" "sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow==" + "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz" + "version" "8.2.2" + dependencies: + "ansi-escapes" "^4.2.1" + "chalk" "^4.1.1" + "cli-cursor" "^3.1.0" + "cli-width" "^3.0.0" + "external-editor" "^3.0.3" + "figures" "^3.0.0" + "lodash" "^4.17.21" + "mute-stream" "0.0.8" + "ora" "^5.4.1" + "run-async" "^2.4.0" + "rxjs" "^7.5.5" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + "through" "^2.3.6" + +"ip@^2.0.0": + "integrity" "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + "resolved" "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" + "version" "2.0.0" + +"is-extglob@^2.1.1": + "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + "version" "2.1.1" + +"is-fullwidth-code-point@^3.0.0": + "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + "version" "3.0.0" + +"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@^4.0.3": + "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "is-extglob" "^2.1.1" + +"is-interactive@^1.0.0": + "integrity" "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + "resolved" "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + "version" "1.0.0" + +"is-lambda@^1.0.1": + "integrity" "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + "resolved" "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + "version" "1.0.1" + +"is-number@^7.0.0": + "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + "version" "7.0.0" + +"is-path-cwd@^1.0.0": + "integrity" "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" + "resolved" "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz" + "version" "1.0.0" + +"is-path-in-cwd@^1.0.0": + "integrity" "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==" + "resolved" "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "is-path-inside" "^1.0.0" + +"is-path-inside@^1.0.0": + "integrity" "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==" + "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "path-is-inside" "^1.0.1" + +"is-stream@^2.0.0": + "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + "version" "2.0.1" + +"is-unicode-supported@^0.1.0": + "integrity" "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + "version" "0.1.0" + +"isexe@^2.0.0": + "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + "version" "2.0.0" + +"js-yaml@^4.1.0": + "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "argparse" "^2.0.1" + +"jsbn@~0.1.0": + "integrity" "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + "resolved" "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + "version" "0.1.1" + +"json-schema-traverse@^0.4.1": + "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + "version" "0.4.1" + +"json-schema@0.4.0": + "integrity" "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + "resolved" "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" + "version" "0.4.0" + +"json-stable-stringify-without-jsonify@^1.0.1": + "integrity" "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + "version" "1.0.1" + +"jsonfile@^6.0.1": + "integrity" "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==" + "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "universalify" "^1.0.0" optionalDependencies: - graceful-fs "^4.1.6" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash-es@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" - integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -lru-cache@7.13.2: - version "7.13.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.13.2.tgz#bb5d3f1deea3f3a7a35c1c44345566a612e09cd0" - integrity sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-fetch-happen@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.2" - promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.0.0" - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= - dependencies: - tmpl "1.0.x" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.2: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" - -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.35: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -"minimatch@2 || 3", minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" + "graceful-fs" "^4.1.6" + +"jsprim@^2.0.2": + "integrity" "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==" + "resolved" "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "assert-plus" "1.0.0" + "extsprintf" "1.3.0" + "json-schema" "0.4.0" + "verror" "1.10.0" + +"levn@^0.4.1": + "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" + "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + "version" "0.4.1" + dependencies: + "prelude-ls" "^1.2.1" + "type-check" "~0.4.0" + +"locate-path@^6.0.0": + "integrity" "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "p-locate" "^5.0.0" + +"lodash-es@^4.17.21": + "integrity" "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + "resolved" "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" + "version" "4.17.21" + +"lodash.merge@^4.6.2": + "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + "version" "4.6.2" + +"lodash@^4.17.15", "lodash@^4.17.21", "lodash@4.17.21": + "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + "version" "4.17.21" + +"log-symbols@^4.1.0": + "integrity" "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==" + "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "chalk" "^4.1.0" + "is-unicode-supported" "^0.1.0" + +"lru-cache@^6.0.0": + "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "yallist" "^4.0.0" + +"lru-cache@7.13.2": + "integrity" "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz" + "version" "7.13.2" + +"make-dir@^3.1.0": + "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "semver" "^6.0.0" + +"make-fetch-happen@^9.1.0": + "integrity" "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==" + "resolved" "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" + "version" "9.1.0" + dependencies: + "agentkeepalive" "^4.1.3" + "cacache" "^15.2.0" + "http-cache-semantics" "^4.1.0" + "http-proxy-agent" "^4.0.1" + "https-proxy-agent" "^5.0.0" + "is-lambda" "^1.0.1" + "lru-cache" "^6.0.0" + "minipass" "^3.1.3" + "minipass-collect" "^1.0.2" + "minipass-fetch" "^1.3.2" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "negotiator" "^0.6.2" + "promise-retry" "^2.0.1" + "socks-proxy-agent" "^6.0.0" + "ssri" "^8.0.0" + +"makeerror@1.0.x": + "integrity" "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==" + "resolved" "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz" + "version" "1.0.11" + dependencies: + "tmpl" "1.0.x" + +"merge-stream@^2.0.0": + "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + "version" "2.0.0" + +"merge2@^1.3.0", "merge2@^1.4.1": + "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + "version" "1.4.1" + +"micromatch@^4.0.2", "micromatch@^4.0.4": + "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + "version" "4.0.5" + dependencies: + "braces" "^3.0.2" + "picomatch" "^2.3.1" + +"mime-db@1.52.0": + "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + "version" "1.52.0" + +"mime-types@^2.1.35": + "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" + "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + "version" "2.1.35" + dependencies: + "mime-db" "1.52.0" + +"mimic-fn@^2.1.0": + "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + "version" "2.1.0" + +"minimatch@^3.0.4", "minimatch@^3.1.1", "minimatch@^3.1.2", "minimatch@2 || 3": + "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "brace-expansion" "^1.1.7" + +"minimatch@^5.0.1": + "integrity" "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "brace-expansion" "^2.0.1" + +"minimist@^1.1.1", "minimist@^1.2.0", "minimist@^1.2.6": + "integrity" "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" + "version" "1.2.6" + +"minipass-collect@^1.0.2": + "integrity" "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==" + "resolved" "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "minipass" "^3.0.0" + +"minipass-fetch@^1.3.2": + "integrity" "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==" + "resolved" "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" + "version" "1.4.1" + dependencies: + "minipass" "^3.1.0" + "minipass-sized" "^1.0.3" + "minizlib" "^2.0.0" optionalDependencies: - encoding "^0.1.12" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: - version "3.3.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" - integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== - dependencies: - yallist "^4.0.0" - -minizlib@^2.0.0, minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mkdirp@~0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -moment@2.29.4: - version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== - -moment@^2.19.3: - version "2.29.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" - integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.0.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -mv@~2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2" - integrity sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= - dependencies: - mkdirp "~0.5.1" - ncp "~2.0.0" - rimraf "~2.4.0" - -nan@^2.10.0: - version "2.11.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766" - integrity sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA== - -nan@^2.14.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== - -nan@^2.15.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" - integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== - -nan@^2.16.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.16.0.tgz#664f43e45460fb98faf00edca0bb0d7b8dce7916" - integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -ncp@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" - integrity sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= - -negotiator@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -nntp-server@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/nntp-server/-/nntp-server-3.1.0.tgz#c48e71899385f5ba394888524f8a1bae024a9c75" - integrity sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw== - dependencies: - debug "^4.3.3" - denque "^2.0.1" - serialize-error "^8.1.0" - split2 "^4.1.0" - -node-addon-api@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f" - integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== - -node-fetch@^2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-gyp@8.x: - version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -node-pty@0.10.1: - version "0.10.1" - resolved "https://registry.yarnpkg.com/node-pty/-/node-pty-0.10.1.tgz#cd05d03a2710315ec40221232ec04186f6ac2c6d" - integrity sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg== - dependencies: - nan "^2.14.0" - -nodemailer@6.7.7: - version "6.7.7" - resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.7.7.tgz#e522fbd7507b81c51446d3f79c4603bf00083ddd" - integrity sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA== - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npmlog@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - -npmlog@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - -object-assign@^4.0.1, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" - integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== - dependencies: - mimic-fn "^2.1.0" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -otplib@11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/otplib/-/otplib-11.0.1.tgz#7d64aa87029f07c99c7f96819fb10cdb67dea886" - integrity sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ== - dependencies: - thirty-two "1.0.2" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier@2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -qrcode-generator@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/qrcode-generator/-/qrcode-generator-1.4.4.tgz#63f771224854759329a99048806a53ed278740e7" - integrity sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^2.2.8, rimraf@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== - dependencies: - glob "^7.0.5" - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rimraf@~2.4.0: - version "2.4.5" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da" - integrity sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= - dependencies: - glob "^6.0.1" - -rlogin@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rlogin/-/rlogin-1.0.0.tgz#db07322b31219126625d9d0aa9872d7ebe8ac403" - integrity sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= - -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.5.5: - version "7.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" - integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== - dependencies: - tslib "^2.1.0" - -safe-buffer@~5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-json-stringify@~1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz#356e44bc98f1f93ce45df14bcd7c01cda86e0afd" - integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/sane/-/sane-5.0.1.tgz#ae94cb06acf5ad158242ff23f563d8cbe0ec1e4b" - integrity sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q== + "encoding" "^0.1.12" + +"minipass-flush@^1.0.5": + "integrity" "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==" + "resolved" "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "minipass" "^3.0.0" + +"minipass-pipeline@^1.2.2", "minipass-pipeline@^1.2.4": + "integrity" "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==" + "resolved" "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + "version" "1.2.4" + dependencies: + "minipass" "^3.0.0" + +"minipass-sized@^1.0.3": + "integrity" "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==" + "resolved" "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "minipass" "^3.0.0" + +"minipass@^3.0.0", "minipass@^3.1.0", "minipass@^3.1.1", "minipass@^3.1.3": + "integrity" "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" + "version" "3.3.4" + dependencies: + "yallist" "^4.0.0" + +"minizlib@^2.0.0", "minizlib@^2.1.1": + "integrity" "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==" + "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "minipass" "^3.0.0" + "yallist" "^4.0.0" + +"mkdirp@^1.0.3": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"mkdirp@^1.0.4": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"mkdirp@~0.5.1": + "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + "version" "0.5.6" + dependencies: + "minimist" "^1.2.6" + +"moment@^2.19.3", "moment@2.29.4": + "integrity" "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + "resolved" "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" + "version" "2.29.4" + +"ms@^2.0.0", "ms@2.1.2": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" + +"mute-stream@0.0.8": + "integrity" "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + "version" "0.0.8" + +"mv@~2": + "integrity" "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==" + "resolved" "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "mkdirp" "~0.5.1" + "ncp" "~2.0.0" + "rimraf" "~2.4.0" + +"nan@^2.10.0", "nan@^2.14.0", "nan@^2.15.0", "nan@^2.16.0": + "integrity" "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" + "resolved" "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz" + "version" "2.16.0" + +"natural-compare@^1.4.0": + "integrity" "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + "version" "1.4.0" + +"ncp@~2.0.0": + "integrity" "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==" + "resolved" "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz" + "version" "2.0.0" + +"negotiator@^0.6.2": + "integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + "version" "0.6.3" + +"nntp-server@3.1.0": + "integrity" "sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw==" + "resolved" "https://registry.npmjs.org/nntp-server/-/nntp-server-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "debug" "^4.3.3" + "denque" "^2.0.1" + "serialize-error" "^8.1.0" + "split2" "^4.1.0" + +"node-addon-api@^4.2.0": + "integrity" "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz" + "version" "4.3.0" + +"node-fetch@^2.6.7": + "integrity" "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==" + "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" + "version" "2.6.7" + dependencies: + "whatwg-url" "^5.0.0" + +"node-gyp@8.x": + "integrity" "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==" + "resolved" "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" + "version" "8.4.1" + dependencies: + "env-paths" "^2.2.0" + "glob" "^7.1.4" + "graceful-fs" "^4.2.6" + "make-fetch-happen" "^9.1.0" + "nopt" "^5.0.0" + "npmlog" "^6.0.0" + "rimraf" "^3.0.2" + "semver" "^7.3.5" + "tar" "^6.1.2" + "which" "^2.0.2" + +"node-int64@^0.4.0": + "integrity" "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + "resolved" "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + "version" "0.4.0" + +"node-pty@0.10.1": + "integrity" "sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg==" + "resolved" "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz" + "version" "0.10.1" + dependencies: + "nan" "^2.14.0" + +"nodemailer@6.7.7": + "integrity" "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==" + "resolved" "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz" + "version" "6.7.7" + +"nopt@^5.0.0": + "integrity" "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==" + "resolved" "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "abbrev" "1" + +"normalize-path@^3.0.0": + "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + "version" "3.0.0" + +"npm-run-path@^4.0.0": + "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "path-key" "^3.0.0" + +"npmlog@^5.0.1": + "integrity" "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "are-we-there-yet" "^2.0.0" + "console-control-strings" "^1.1.0" + "gauge" "^3.0.0" + "set-blocking" "^2.0.0" + +"npmlog@^6.0.0": + "integrity" "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "are-we-there-yet" "^3.0.0" + "console-control-strings" "^1.1.0" + "gauge" "^4.0.3" + "set-blocking" "^2.0.0" + +"object-assign@^4.0.1", "object-assign@^4.1.1": + "integrity" "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + "version" "4.1.1" + +"once@^1.3.0", "once@^1.3.1", "once@^1.4.0": + "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" + "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "wrappy" "1" + +"onetime@^5.1.0": + "integrity" "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "mimic-fn" "^2.1.0" + +"optionator@^0.9.1": + "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" + "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + "version" "0.9.1" + dependencies: + "deep-is" "^0.1.3" + "fast-levenshtein" "^2.0.6" + "levn" "^0.4.1" + "prelude-ls" "^1.2.1" + "type-check" "^0.4.0" + "word-wrap" "^1.2.3" + +"ora@^5.4.1": + "integrity" "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==" + "resolved" "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + "version" "5.4.1" + dependencies: + "bl" "^4.1.0" + "chalk" "^4.1.0" + "cli-cursor" "^3.1.0" + "cli-spinners" "^2.5.0" + "is-interactive" "^1.0.0" + "is-unicode-supported" "^0.1.0" + "log-symbols" "^4.1.0" + "strip-ansi" "^6.0.0" + "wcwidth" "^1.0.1" + +"os-tmpdir@~1.0.2": + "integrity" "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + "resolved" "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + "version" "1.0.2" + +"otplib@11.0.1": + "integrity" "sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ==" + "resolved" "https://registry.npmjs.org/otplib/-/otplib-11.0.1.tgz" + "version" "11.0.1" + dependencies: + "thirty-two" "1.0.2" + +"p-limit@^3.0.2": + "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "yocto-queue" "^0.1.0" + +"p-locate@^5.0.0": + "integrity" "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "p-limit" "^3.0.2" + +"p-map@^1.1.1": + "integrity" "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" + "resolved" "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz" + "version" "1.2.0" + +"p-map@^4.0.0": + "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" + "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "aggregate-error" "^3.0.0" + +"parent-module@^1.0.0": + "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" + "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "callsites" "^3.0.0" + +"path-exists@^4.0.0": + "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + "version" "4.0.0" + +"path-is-absolute@^1.0.0": + "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "version" "1.0.1" + +"path-is-inside@^1.0.1": + "integrity" "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + "resolved" "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" + "version" "1.0.2" + +"path-key@^3.0.0", "path-key@^3.1.0": + "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + "version" "3.1.1" + +"path-type@^4.0.0": + "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + "version" "4.0.0" + +"picomatch@^2.0.4", "picomatch@^2.3.1": + "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + "version" "2.3.1" + +"pify@^2.0.0": + "integrity" "sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + "version" "2.3.0" + +"pify@^3.0.0": + "integrity" "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + "resolved" "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + "version" "3.0.0" + +"pinkie-promise@^2.0.0": + "integrity" "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==" + "resolved" "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "pinkie" "^2.0.0" + +"pinkie@^2.0.0": + "integrity" "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" + "resolved" "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + "version" "2.0.4" + +"prelude-ls@^1.2.1": + "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + "version" "1.2.1" + +"prettier@2.7.1": + "integrity" "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==" + "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" + "version" "2.7.1" + +"promise-inflight@^1.0.1": + "integrity" "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + "resolved" "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + "version" "1.0.1" + +"promise-retry@^2.0.1": + "integrity" "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==" + "resolved" "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "err-code" "^2.0.2" + "retry" "^0.12.0" + +"pump@^3.0.0": + "integrity" "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==" + "resolved" "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "end-of-stream" "^1.1.0" + "once" "^1.3.1" + +"punycode@^2.1.0": + "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + "version" "2.1.1" + +"qrcode-generator@^1.4.4": + "integrity" "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==" + "resolved" "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz" + "version" "1.4.4" + +"queue-microtask@^1.2.2": + "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + "version" "1.2.3" + +"readable-stream@^3.4.0", "readable-stream@^3.6.0": + "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +"regexpp@^3.2.0": + "integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" + "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" + "version" "3.2.0" + +"resolve-from@^4.0.0": + "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + "version" "4.0.0" + +"restore-cursor@^3.1.0": + "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" + "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "onetime" "^5.1.0" + "signal-exit" "^3.0.2" + +"retry@^0.12.0": + "integrity" "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" + "resolved" "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + "version" "0.12.0" + +"reusify@^1.0.4": + "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + "version" "1.0.4" + +"rimraf@^2.2.8": + "integrity" "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" + "version" "2.6.2" + dependencies: + "glob" "^7.0.5" + +"rimraf@^2.6.1": + "integrity" "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" + "version" "2.6.2" + dependencies: + "glob" "^7.0.5" + +"rimraf@^3.0.2": + "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "glob" "^7.1.3" + +"rimraf@~2.4.0": + "integrity" "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz" + "version" "2.4.5" + dependencies: + "glob" "^6.0.1" + +"rlogin@^1.0.0": + "integrity" "sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==" + "resolved" "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz" + "version" "1.0.0" + +"rsvp@^4.8.4": + "integrity" "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" + "resolved" "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz" + "version" "4.8.5" + +"run-async@^2.4.0": + "integrity" "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + "resolved" "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + "version" "2.4.1" + +"run-parallel@^1.1.9": + "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" + "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "queue-microtask" "^1.2.2" + +"rxjs@^7.5.5": + "integrity" "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==" + "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz" + "version" "7.5.5" + dependencies: + "tslib" "^2.1.0" + +"safe-buffer@~5.1.0": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" + +"safe-json-stringify@~1": + "integrity" "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==" + "resolved" "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz" + "version" "1.2.0" + +"safer-buffer@^2.0.2", "safer-buffer@^2.1.0", "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", "safer-buffer@~2.1.0": + "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + "version" "2.1.2" + +"sane@5.0.1": + "integrity" "sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q==" + "resolved" "https://registry.npmjs.org/sane/-/sane-5.0.1.tgz" + "version" "5.0.1" dependencies: "@cnakazawa/watch" "^1.0.3" - anymatch "^3.1.1" - capture-exit "^2.0.0" - exec-sh "^0.3.4" - execa "^4.0.0" - fb-watchman "^2.0.1" - micromatch "^4.0.2" - minimist "^1.1.1" - walker "~1.0.5" - -sanitize-filename@^1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" - integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== - dependencies: - truncate-utf8-bytes "^1.0.0" - -semver@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.3.5: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - -serialize-error@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-8.1.0.tgz#3a069970c712f78634942ddd50fbbc0eaebe2f67" - integrity sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ== - dependencies: - type-fest "^0.20.2" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" - integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.6.2: - version "2.7.0" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.0.tgz#f9225acdb841e874dca25f870e9130990f3913d0" - integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - -split2@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.1.0.tgz#101907a24370f85bb782f08adaabe4e281ecf809" - integrity sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ== - -sqlite3-trans@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz#903bd46a8cba935ce327774df62695cd1e093664" - integrity sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg== - dependencies: - lodash "^4.17.15" - -sqlite3@5.0.11: - version "5.0.11" - resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.0.11.tgz#102c835d70be66da9d95a383fd6ea084a082ef7f" - integrity sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA== + "anymatch" "^3.1.1" + "capture-exit" "^2.0.0" + "exec-sh" "^0.3.4" + "execa" "^4.0.0" + "fb-watchman" "^2.0.1" + "micromatch" "^4.0.2" + "minimist" "^1.1.1" + "walker" "~1.0.5" + +"sanitize-filename@^1.6.3": + "integrity" "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==" + "resolved" "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz" + "version" "1.6.3" + dependencies: + "truncate-utf8-bytes" "^1.0.0" + +"semver@^6.0.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^7.3.5": + "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + "version" "7.3.7" + dependencies: + "lru-cache" "^6.0.0" + +"serialize-error@^8.1.0": + "integrity" "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==" + "resolved" "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz" + "version" "8.1.0" + dependencies: + "type-fest" "^0.20.2" + +"set-blocking@^2.0.0": + "integrity" "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + "version" "2.0.0" + +"shebang-command@^2.0.0": + "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "shebang-regex" "^3.0.0" + +"shebang-regex@^3.0.0": + "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + "version" "3.0.0" + +"signal-exit@^3.0.0", "signal-exit@^3.0.2", "signal-exit@^3.0.7": + "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + "version" "3.0.7" + +"slash@^3.0.0": + "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + "version" "3.0.0" + +"smart-buffer@^4.2.0": + "integrity" "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + "resolved" "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + "version" "4.2.0" + +"socks-proxy-agent@^6.0.0": + "integrity" "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==" + "resolved" "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz" + "version" "6.2.1" + dependencies: + "agent-base" "^6.0.2" + "debug" "^4.3.3" + "socks" "^2.6.2" + +"socks@^2.6.2": + "integrity" "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==" + "resolved" "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz" + "version" "2.7.0" + dependencies: + "ip" "^2.0.0" + "smart-buffer" "^4.2.0" + +"split2@^4.1.0": + "integrity" "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" + "resolved" "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz" + "version" "4.1.0" + +"sqlite3-trans@1.3.0": + "integrity" "sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg==" + "resolved" "https://registry.npmjs.org/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "lodash" "^4.17.15" + +"sqlite3@5.0.11": + "integrity" "sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA==" + "resolved" "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz" + "version" "5.0.11" dependencies: "@mapbox/node-pre-gyp" "^1.0.0" - node-addon-api "^4.2.0" - tar "^6.1.11" + "node-addon-api" "^4.2.0" + "tar" "^6.1.11" optionalDependencies: - node-gyp "8.x" + "node-gyp" "8.x" -ssh2@1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.11.0.tgz#ce60186216971e12f6deb553dcf82322498fe2e4" - integrity sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw== +"ssh2@1.11.0": + "integrity" "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==" + "resolved" "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz" + "version" "1.11.0" dependencies: - asn1 "^0.2.4" - bcrypt-pbkdf "^1.0.2" + "asn1" "^0.2.4" + "bcrypt-pbkdf" "^1.0.2" optionalDependencies: - cpu-features "~0.0.4" - nan "^2.16.0" - -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.1.0.tgz#ba846d1daa97c3c596155308063e075ed1c99aff" - integrity sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^5.2.0" - -string_decoder@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" - integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" - integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== - dependencies: - has-flag "^4.0.0" - -systeminformation@5.12.3: - version "5.12.3" - resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-5.12.3.tgz#1e6dc99070ace7d88b6a1dd465f4f3ce7d63901a" - integrity sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A== - -tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: - version "6.1.11" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -telnet-socket@0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/telnet-socket/-/telnet-socket-0.2.4.tgz#b0704f25aad6ce40cb9ddc5363459088f6e5b533" - integrity sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ== - dependencies: - binary-parser "1.6.2" - buffers "github:NuSkooler/node-buffers" - -temptmp@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/temptmp/-/temptmp-1.1.0.tgz#bfbbff858d7f7d59c563fbf069758a7775ecd431" - integrity sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ== - dependencies: - del "^3.0.0" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -thirty-two@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/thirty-two/-/thirty-two-1.0.2.tgz#4ca2fffc02a51290d2744b9e3f557693ca6b627a" - integrity sha1-TKL//AKlEpDSdEueP1V2k8prYno= - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.x: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -truncate-utf8-bytes@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" - integrity sha1-QFkjkJWS1W94pYGENLC3hInKXys= - dependencies: - utf8-byte-length "^1.0.1" - -tslib@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - -tweetnacl@^0.14.3: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.5.2.tgz#d6ef42a0356c6cd45f49485c3b6281fc148e48a2" - integrity sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw== - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -utf8-byte-length@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" - integrity sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= - -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -uuid-parse@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/uuid-parse/-/uuid-parse-1.1.0.tgz#7061c5a1384ae0e1f943c538094597e1b5f3a65b" - integrity sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A== - -uuid@8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-compile-cache@^2.0.3: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" - integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== - -walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= - dependencies: - makeerror "1.0.x" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.2, wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -ws@7.4.3: - version "7.4.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.3.tgz#1f9643de34a543b8edb124bdcbc457ae55a6e5cd" - integrity sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yazl@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/yazl/-/yazl-2.5.1.tgz#a3d65d3dd659a5b0937850e8609f22fffa2b5c35" - integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw== - dependencies: - buffer-crc32 "~0.2.3" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + "cpu-features" "~0.0.4" + "nan" "^2.16.0" + +"sshpk@^1.14.1": + "integrity" "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==" + "resolved" "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" + "version" "1.17.0" + dependencies: + "asn1" "~0.2.3" + "assert-plus" "^1.0.0" + "bcrypt-pbkdf" "^1.0.0" + "dashdash" "^1.12.0" + "ecc-jsbn" "~0.1.1" + "getpass" "^0.1.1" + "jsbn" "~0.1.0" + "safer-buffer" "^2.0.2" + "tweetnacl" "~0.14.0" + +"ssri@^8.0.0", "ssri@^8.0.1": + "integrity" "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==" + "resolved" "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" + "version" "8.0.1" + dependencies: + "minipass" "^3.1.1" + +"string_decoder@^1.1.1": + "integrity" "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "safe-buffer" "~5.1.0" + +"string-width@^1.0.2 || 2 || 3 || 4", "string-width@^4.1.0", "string-width@^4.2.3": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" + +"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": + "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "ansi-regex" "^5.0.1" + +"strip-final-newline@^2.0.0": + "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + "version" "2.0.0" + +"strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1": + "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + "version" "3.1.1" + +"supports-color@^7.1.0": + "integrity" "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz" + "version" "7.1.0" + dependencies: + "has-flag" "^4.0.0" + +"systeminformation@5.12.3": + "integrity" "sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A==" + "resolved" "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.3.tgz" + "version" "5.12.3" + +"tar@^6.0.2", "tar@^6.1.11", "tar@^6.1.2": + "integrity" "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==" + "resolved" "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" + "version" "6.1.11" + dependencies: + "chownr" "^2.0.0" + "fs-minipass" "^2.0.0" + "minipass" "^3.0.0" + "minizlib" "^2.1.1" + "mkdirp" "^1.0.3" + "yallist" "^4.0.0" + +"telnet-socket@0.2.4": + "integrity" "sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ==" + "resolved" "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz" + "version" "0.2.4" + dependencies: + "binary-parser" "1.6.2" + "buffers" "github:NuSkooler/node-buffers" + +"temptmp@^1.1.0": + "integrity" "sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ==" + "resolved" "https://registry.npmjs.org/temptmp/-/temptmp-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "del" "^3.0.0" + +"text-table@^0.2.0": + "integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + "version" "0.2.0" + +"thirty-two@1.0.2": + "integrity" "sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==" + "resolved" "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz" + "version" "1.0.2" + +"through@^2.3.6": + "integrity" "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + "version" "2.3.8" + +"tmp@^0.0.33": + "integrity" "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==" + "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + "version" "0.0.33" + dependencies: + "os-tmpdir" "~1.0.2" + +"tmpl@1.0.x": + "integrity" "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + "resolved" "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" + "version" "1.0.5" + +"to-regex-range@^5.0.1": + "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "is-number" "^7.0.0" + +"tr46@~0.0.3": + "integrity" "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + "version" "0.0.3" + +"truncate-utf8-bytes@^1.0.0": + "integrity" "sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==" + "resolved" "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "utf8-byte-length" "^1.0.1" + +"tslib@^2.1.0": + "integrity" "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" + "version" "2.3.1" + +"tweetnacl@^0.14.3", "tweetnacl@~0.14.0": + "integrity" "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + "resolved" "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + "version" "0.14.5" + +"type-check@^0.4.0", "type-check@~0.4.0": + "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" + "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + "version" "0.4.0" + dependencies: + "prelude-ls" "^1.2.1" + +"type-fest@^0.20.2": + "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + "version" "0.20.2" + +"type-fest@^0.5.2": + "integrity" "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz" + "version" "0.5.2" + +"unique-filename@^1.1.1": + "integrity" "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==" + "resolved" "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "unique-slug" "^2.0.0" + +"unique-slug@^2.0.0": + "integrity" "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==" + "resolved" "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "imurmurhash" "^0.1.4" + +"universalify@^1.0.0": + "integrity" "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz" + "version" "1.0.0" + +"universalify@^2.0.0": + "integrity" "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + "version" "2.0.0" + +"uri-js@^4.2.2": + "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" + "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + "version" "4.4.1" + dependencies: + "punycode" "^2.1.0" + +"utf8-byte-length@^1.0.1": + "integrity" "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" + "resolved" "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz" + "version" "1.0.4" + +"util-deprecate@^1.0.1": + "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "version" "1.0.2" + +"uuid-parse@1.1.0": + "integrity" "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==" + "resolved" "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz" + "version" "1.1.0" + +"uuid@8.3.2": + "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + "version" "8.3.2" + +"v8-compile-cache@^2.0.3": + "integrity" "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==" + "resolved" "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz" + "version" "2.1.1" + +"verror@1.10.0": + "integrity" "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==" + "resolved" "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" + "version" "1.10.0" + dependencies: + "assert-plus" "^1.0.0" + "core-util-is" "1.0.2" + "extsprintf" "^1.2.0" + +"walker@~1.0.5": + "integrity" "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==" + "resolved" "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz" + "version" "1.0.7" + dependencies: + "makeerror" "1.0.x" + +"wcwidth@^1.0.1": + "integrity" "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==" + "resolved" "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "defaults" "^1.0.3" + +"webidl-conversions@^3.0.0": + "integrity" "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + "version" "3.0.1" + +"whatwg-url@^5.0.0": + "integrity" "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==" + "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "tr46" "~0.0.3" + "webidl-conversions" "^3.0.0" + +"which@^2.0.1", "which@^2.0.2": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + +"wide-align@^1.1.2", "wide-align@^1.1.5": + "integrity" "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==" + "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "string-width" "^1.0.2 || 2 || 3 || 4" + +"word-wrap@^1.2.3": + "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + "version" "1.2.3" + +"wrappy@1": + "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "version" "1.0.2" + +"ws@7.5.9": + "integrity" "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" + "resolved" "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" + "version" "7.5.9" + +"yallist@^4.0.0": + "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + "version" "4.0.0" + +"yazl@^2.5.1": + "integrity" "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==" + "resolved" "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz" + "version" "2.5.1" + dependencies: + "buffer-crc32" "~0.2.3" + +"yocto-queue@^0.1.0": + "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + "version" "0.1.0" From 092acc013859354b93688b4ae53d029ff5e05dee Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 2 Jan 2023 16:55:36 -0700 Subject: [PATCH 018/233] Tidy --- .../servers/content/web_handlers/webfinger.js | 27 +- package-lock.json | 13120 ++++++++-------- package.json | 156 +- yarn.lock | 4604 +++--- 4 files changed, 8949 insertions(+), 8958 deletions(-) diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index 7ba9a9597..a5caa91ca 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -22,6 +22,16 @@ exports.moduleInfo = { packageName: 'codes.l33t.enigma.web.handler.finger', }; +// :TODO: more info in default +const DefaultProfileTemplate = ` +User information for: %USERNAME% + +Real Name: %REAL_NAME% +Login Count: %LOGIN_COUNT% +Affiliations: %AFFILIATIONS% +Achievement Points: %ACHIEVEMENT_POINTS% +`; + // // WebFinger: https://www.rfc-editor.org/rfc/rfc7033 // @@ -175,17 +185,7 @@ exports.getModule = class WebFingerServerModule extends WebHandlerModule { ); } - // :TODO: more info in default - return cb( - ` -User information for: %USERNAME% - -Real Name: %REAL_NAME% -Login Count: %LOGIN_COUNT% -Affiliations: %AFFILIATIONS% -Achievement Points: %ACHIEVEMENT_POINTS%`, - 'text/plain' - ); + return cb(DefaultProfileTemplate, 'text/plain'); } return cb(data, mimeTypes.contentType(paths.basename(templateFile))); }); @@ -313,7 +313,10 @@ Achievement Points: %ACHIEVEMENT_POINTS%`, } const accountStatus = user.getPropertyAsNumber(UserProps.AccountStatus); - if (User.AccountStatus.disabled == accountStatus || User.AccountStatus.inactive == accountStatus) { + if ( + User.AccountStatus.disabled == accountStatus || + User.AccountStatus.inactive == accountStatus + ) { this._notFound(resp); return cb( Errors.AccessDenied('Account disabled', ErrorReasons.Disabled) diff --git a/package-lock.json b/package-lock.json index 6f7ad060f..44b7810f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6583 +1,6583 @@ { - "name": "enigma-bbs", - "version": "0.0.14-beta", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "enigma-bbs", - "version": "0.0.14-beta", - "license": "BSD-2-Clause", - "dependencies": { - "@breejs/later": "4.1.0", - "async": "3.2.4", - "binary-parser": "2.1.0", - "buffers": "github:NuSkooler/node-buffers", - "bunyan": "1.8.15", - "deepdash": "^5.3.9", - "easy-table": "^1.2.0", - "exiftool": "^0.0.3", - "fs-extra": "10.1.0", - "glob": "8.0.3", - "graceful-fs": "^4.2.10", - "hashids": "^2.2.10", - "hjson": "3.2.2", - "http-signature": "^1.3.6", - "iconv-lite": "0.6.3", - "ini-config-parser": "^1.0.4", - "inquirer": "^8.2.2", - "lodash": "4.17.21", - "lru-cache": "7.13.2", - "mime-types": "^2.1.35", - "minimist": "^1.2.6", - "moment": "2.29.4", - "nntp-server": "3.1.0", - "node-pty": "0.10.1", - "nodemailer": "6.7.7", - "otplib": "11.0.1", - "qrcode-generator": "^1.4.4", - "rlogin": "^1.0.0", - "sane": "5.0.1", - "sanitize-filename": "^1.6.3", - "sqlite3": "5.0.11", - "sqlite3-trans": "1.3.0", - "ssh2": "1.11.0", - "systeminformation": "5.12.3", - "telnet-socket": "0.2.4", - "temptmp": "^1.1.0", - "uuid": "8.3.2", - "uuid-parse": "1.1.0", - "ws": "7.5.9", - "yazl": "^2.5.1" - }, - "bin": { - "enigma-bbs": "main.js", - "oputil": "oputil.js" - }, - "devDependencies": { - "eslint": "8.21.0", - "eslint-config-prettier": "^8.5.0", - "prettier": "2.7.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@breejs/later": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@breejs/later/-/later-4.1.0.tgz", - "integrity": "sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/@cnakazawa/watch": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", - "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", - "dependencies": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "optional": true - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", - "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "optional": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "optional": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "optional": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "optional": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "optional": true, - "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "optional": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-escapes": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", - "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", - "dependencies": { - "type-fest": "^0.5.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", - "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dependencies": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/binary-parser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz", - "integrity": "sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "engines": { - "node": "*" - } - }, - "node_modules/buffers": { - "version": "0.1.1", - "resolved": "git+ssh://git@github.com/NuSkooler/node-buffers.git#cd0855598f7048b02f0a51c90e22573973e9e2c2", - "license": "MIT/X11", - "engines": { - "node": ">=0.2.0" - } - }, - "node_modules/buildcheck": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz", - "integrity": "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==", - "optional": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/bunyan": { - "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", - "engines": [ - "node >=0.10.0" - ], - "bin": { - "bunyan": "bin/bunyan" - }, - "optionalDependencies": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "optional": true, - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "optional": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "optional": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dependencies": { - "rsvp": "^4.8.4" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/coffee-script": { - "version": "1.12.7", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", - "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", - "deprecated": "CoffeeScript on NPM has moved to \"coffeescript\" (no hyphen)", - "bin": { - "cake": "bin/cake", - "coffee": "bin/coffee" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - }, - "node_modules/cpu-features": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz", - "integrity": "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "buildcheck": "0.0.3", - "nan": "^2.15.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-extend": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", - "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==", - "dev": true - }, - "node_modules/deepdash": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz", - "integrity": "sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg==", - "dependencies": { - "lodash": "^4.17.21", - "lodash-es": "^4.17.21" - } - }, - "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", - "dependencies": { - "clone": "^1.0.2" - } - }, - "node_modules/del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==", - "dependencies": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/del/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/del/node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/del/node_modules/rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dependencies": { - "glob": "^7.0.5" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - }, - "node_modules/denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "optional": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dtrace-provider": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz", - "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "nan": "^2.10.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/easy-table": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", - "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "optionalDependencies": { - "wcwidth": "^1.0.1" - } - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "optional": true - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz", - "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", - "dev": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exiftool": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz", - "integrity": "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" - }, - "node_modules/external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/external-editor/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/figures": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", - "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - }, - "node_modules/hashids": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz", - "integrity": "sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA==" - }, - "node_modules/hjson": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz", - "integrity": "sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==", - "bin": { - "hjson": "bin/hjson" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "optional": true - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "optional": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "optional": true, - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "devOptional": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "optional": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini-config-parser": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz", - "integrity": "sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg==", - "dependencies": { - "coffee-script": "^1.12.4", - "deep-extend": "^0.5.1", - "rimraf": "^2.6.1" - } - }, - "node_modules/ini-config-parser/node_modules/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ini-config-parser/node_modules/rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dependencies": { - "glob": "^7.0.5" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/inquirer": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz", - "integrity": "sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow==", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "optional": true - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "optional": true - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dependencies": { - "is-path-inside": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", - "dependencies": { - "path-is-inside": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", - "dependencies": { - "universalify": "^1.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonfile/node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "optional": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==", - "dependencies": { - "tmpl": "1.0.x" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "node_modules/minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "optional": true, - "dependencies": { - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "optionalDependencies": { - "encoding": "^0.1.12" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "optional": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "optional": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "node_modules/mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "optional": true, - "dependencies": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/mv/node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "optional": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mv/node_modules/rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "optional": true, - "dependencies": { - "glob": "^6.0.1" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "optional": true, - "bin": { - "ncp": "bin/ncp" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "optional": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/nntp-server": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nntp-server/-/nntp-server-3.1.0.tgz", - "integrity": "sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw==", - "dependencies": { - "debug": "^4.3.3", - "denque": "^2.0.1", - "serialize-error": "^8.1.0", - "split2": "^4.1.0" - } - }, - "node_modules/node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", - "optional": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 10.12.0" - } - }, - "node_modules/node-gyp/node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "optional": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/node-gyp/node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "optional": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/node-gyp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "optional": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "optional": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - }, - "node_modules/node-pty": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz", - "integrity": "sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg==", - "hasInstallScript": true, - "dependencies": { - "nan": "^2.14.0" - } - }, - "node_modules/nodemailer": { - "version": "6.7.7", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz", - "integrity": "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/otplib": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/otplib/-/otplib-11.0.1.tgz", - "integrity": "sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ==", - "dependencies": { - "thirty-two": "1.0.2" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "optional": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "optional": true - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "optional": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qrcode-generator": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz", - "integrity": "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "optional": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rlogin": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz", - "integrity": "sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==", - "engines": { - "node": ">= 0.10.24" - } - }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "engines": { - "node": "6.* || >= 7.*" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", - "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sane": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/sane/-/sane-5.0.1.tgz", - "integrity": "sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q==", - "dependencies": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^3.1.1", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.4", - "execa": "^4.0.0", - "fb-watchman": "^2.0.1", - "micromatch": "^4.0.2", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "bin": { - "sane": "src/cli.js" - }, - "engines": { - "node": "10.* || >= 12.*" - } - }, - "node_modules/sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "dependencies": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-error": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", - "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "optional": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", - "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", - "optional": true, - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", - "optional": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/split2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", - "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/sqlite3": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz", - "integrity": "sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA==", - "hasInstallScript": true, - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.0", - "node-addon-api": "^4.2.0", - "tar": "^6.1.11" - }, - "optionalDependencies": { - "node-gyp": "8.x" - }, - "peerDependencies": { - "node-gyp": "8.x" - }, - "peerDependenciesMeta": { - "node-gyp": { - "optional": true - } - } - }, - "node_modules/sqlite3-trans": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz", - "integrity": "sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg==", - "dependencies": { - "lodash": "^4.17.15" - } - }, - "node_modules/ssh2": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz", - "integrity": "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==", - "hasInstallScript": true, - "dependencies": { - "asn1": "^0.2.4", - "bcrypt-pbkdf": "^1.0.2" - }, - "engines": { - "node": ">=10.16.0" - }, - "optionalDependencies": { - "cpu-features": "~0.0.4", - "nan": "^2.16.0" - } - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "optional": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/systeminformation": { - "version": "5.12.3", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.3.tgz", - "integrity": "sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A==", - "os": [ - "darwin", - "linux", - "win32", - "freebsd", - "openbsd", - "netbsd", - "sunos", - "android" - ], - "bin": { - "systeminformation": "lib/cli.js" - }, - "engines": { - "node": ">=8.0.0" - }, - "funding": { - "type": "Buy me a coffee", - "url": "https://www.buymeacoffee.com/systeminfo" - } - }, - "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/telnet-socket": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz", - "integrity": "sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ==", - "dependencies": { - "binary-parser": "1.6.2", - "buffers": "github:NuSkooler/node-buffers" - } - }, - "node_modules/telnet-socket/node_modules/binary-parser": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz", - "integrity": "sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ==", - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/temptmp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/temptmp/-/temptmp-1.1.0.tgz", - "integrity": "sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ==", - "dependencies": { - "del": "^3.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/thirty-two": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz", - "integrity": "sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==", - "engines": { - "node": ">=0.2.6" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "optional": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "optional": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/uuid-parse": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz", - "integrity": "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==" - }, - "node_modules/v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", - "dev": true - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==", - "dependencies": { - "makeerror": "1.0.x" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yazl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", - "dependencies": { - "buffer-crc32": "~0.2.3" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@breejs/later": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@breejs/later/-/later-4.1.0.tgz", - "integrity": "sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA==" - }, - "@cnakazawa/watch": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", - "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - } - }, - "@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "optional": true - }, - "@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@mapbox/node-pre-gyp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", - "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", - "requires": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "optional": true, - "requires": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "optional": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "optional": true - } - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "optional": true - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "optional": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "optional": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", - "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", - "requires": { - "type-fest": "^0.5.2" - }, - "dependencies": { - "type-fest": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", - "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==" + "name": "enigma-bbs", + "version": "0.0.14-beta", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "enigma-bbs", + "version": "0.0.14-beta", + "license": "BSD-2-Clause", + "dependencies": { + "@breejs/later": "4.1.0", + "async": "3.2.4", + "binary-parser": "2.1.0", + "buffers": "github:NuSkooler/node-buffers", + "bunyan": "1.8.15", + "deepdash": "^5.3.9", + "easy-table": "^1.2.0", + "exiftool": "^0.0.3", + "fs-extra": "10.1.0", + "glob": "8.0.3", + "graceful-fs": "^4.2.10", + "hashids": "^2.2.10", + "hjson": "3.2.2", + "http-signature": "^1.3.6", + "iconv-lite": "0.6.3", + "ini-config-parser": "^1.0.4", + "inquirer": "^8.2.2", + "lodash": "4.17.21", + "lru-cache": "7.13.2", + "mime-types": "^2.1.35", + "minimist": "^1.2.6", + "moment": "2.29.4", + "nntp-server": "3.1.0", + "node-pty": "0.10.1", + "nodemailer": "6.7.7", + "otplib": "11.0.1", + "qrcode-generator": "^1.4.4", + "rlogin": "^1.0.0", + "sane": "5.0.1", + "sanitize-filename": "^1.6.3", + "sqlite3": "5.0.11", + "sqlite3-trans": "1.3.0", + "ssh2": "1.11.0", + "systeminformation": "5.12.3", + "telnet-socket": "0.2.4", + "temptmp": "^1.1.0", + "uuid": "8.3.2", + "uuid-parse": "1.1.0", + "ws": "7.5.9", + "yazl": "^2.5.1" + }, + "bin": { + "enigma-bbs": "main.js", + "oputil": "oputil.js" + }, + "devDependencies": { + "eslint": "8.21.0", + "eslint-config-prettier": "^8.5.0", + "prettier": "2.7.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@breejs/later": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@breejs/later/-/later-4.1.0.tgz", + "integrity": "sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@cnakazawa/watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", + "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "dependencies": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "optional": true + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", + "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "optional": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "optional": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "optional": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "optional": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "optional": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", + "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "dependencies": { + "type-fest": "^0.5.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", + "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dependencies": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/binary-parser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz", + "integrity": "sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "git+ssh://git@github.com/NuSkooler/node-buffers.git#cd0855598f7048b02f0a51c90e22573973e9e2c2", + "license": "MIT/X11", + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/buildcheck": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz", + "integrity": "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==", + "optional": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/bunyan": { + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", + "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", + "engines": [ + "node >=0.10.0" + ], + "bin": { + "bunyan": "bin/bunyan" + }, + "optionalDependencies": { + "dtrace-provider": "~0.8", + "moment": "^2.19.3", + "mv": "~2", + "safe-json-stringify": "~1" + } + }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "optional": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dependencies": { + "rsvp": "^4.8.4" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/coffee-script": { + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", + "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", + "deprecated": "CoffeeScript on NPM has moved to \"coffeescript\" (no hyphen)", + "bin": { + "cake": "bin/cake", + "coffee": "bin/coffee" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "node_modules/cpu-features": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz", + "integrity": "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "buildcheck": "0.0.3", + "nan": "^2.15.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-extend": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==", + "dev": true + }, + "node_modules/deepdash": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz", + "integrity": "sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg==", + "dependencies": { + "lodash": "^4.17.21", + "lodash-es": "^4.17.21" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==", + "dependencies": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/del/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/del/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/del/node_modules/rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dependencies": { + "glob": "^7.0.5" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dtrace-provider": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz", + "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "nan": "^2.10.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/easy-table": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", + "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "optionalDependencies": { + "wcwidth": "^1.0.1" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "optional": true + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz", + "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.3", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/espree": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", + "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exiftool": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz", + "integrity": "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" + }, + "node_modules/external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/figures": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", + "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "node_modules/hashids": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz", + "integrity": "sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA==" + }, + "node_modules/hjson": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz", + "integrity": "sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==", + "bin": { + "hjson": "bin/hjson" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "optional": true + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "optional": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "optional": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "devOptional": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "optional": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini-config-parser": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz", + "integrity": "sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg==", + "dependencies": { + "coffee-script": "^1.12.4", + "deep-extend": "^0.5.1", + "rimraf": "^2.6.1" + } + }, + "node_modules/ini-config-parser/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ini-config-parser/node_modules/rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dependencies": { + "glob": "^7.0.5" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/inquirer": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz", + "integrity": "sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "optional": true + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "optional": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dependencies": { + "is-path-inside": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", + "dependencies": { + "path-is-inside": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "dependencies": { + "universalify": "^1.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonfile/node_modules/universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "optional": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==", + "dependencies": { + "tmpl": "1.0.x" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "optional": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "optional": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "node_modules/mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "optional": true, + "dependencies": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/mv/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "optional": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mv/node_modules/rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "optional": true, + "dependencies": { + "glob": "^6.0.1" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/nan": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", + "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "optional": true, + "bin": { + "ncp": "bin/ncp" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nntp-server": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nntp-server/-/nntp-server-3.1.0.tgz", + "integrity": "sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw==", + "dependencies": { + "debug": "^4.3.3", + "denque": "^2.0.1", + "serialize-error": "^8.1.0", + "split2": "^4.1.0" + } + }, + "node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "optional": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/node-gyp/node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "optional": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + }, + "node_modules/node-pty": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz", + "integrity": "sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg==", + "hasInstallScript": true, + "dependencies": { + "nan": "^2.14.0" + } + }, + "node_modules/nodemailer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz", + "integrity": "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/otplib": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/otplib/-/otplib-11.0.1.tgz", + "integrity": "sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ==", + "dependencies": { + "thirty-two": "1.0.2" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "optional": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "optional": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "optional": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode-generator": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz", + "integrity": "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "optional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rlogin": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz", + "integrity": "sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==", + "engines": { + "node": ">= 0.10.24" + } + }, + "node_modules/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "engines": { + "node": "6.* || >= 7.*" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "optional": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sane": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/sane/-/sane-5.0.1.tgz", + "integrity": "sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q==", + "dependencies": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^3.1.1", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.4", + "execa": "^4.0.0", + "fb-watchman": "^2.0.1", + "micromatch": "^4.0.2", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "bin": { + "sane": "src/cli.js" + }, + "engines": { + "node": "10.* || >= 12.*" + } + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-error": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "optional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", + "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", + "optional": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "optional": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/split2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", + "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sqlite3": { + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz", + "integrity": "sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.0", + "node-addon-api": "^4.2.0", + "tar": "^6.1.11" + }, + "optionalDependencies": { + "node-gyp": "8.x" + }, + "peerDependencies": { + "node-gyp": "8.x" + }, + "peerDependenciesMeta": { + "node-gyp": { + "optional": true + } + } + }, + "node_modules/sqlite3-trans": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz", + "integrity": "sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg==", + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/ssh2": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz", + "integrity": "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==", + "hasInstallScript": true, + "dependencies": { + "asn1": "^0.2.4", + "bcrypt-pbkdf": "^1.0.2" + }, + "engines": { + "node": ">=10.16.0" + }, + "optionalDependencies": { + "cpu-features": "~0.0.4", + "nan": "^2.16.0" + } + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "optional": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/string_decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", + "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/systeminformation": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.3.tgz", + "integrity": "sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A==", + "os": [ + "darwin", + "linux", + "win32", + "freebsd", + "openbsd", + "netbsd", + "sunos", + "android" + ], + "bin": { + "systeminformation": "lib/cli.js" + }, + "engines": { + "node": ">=8.0.0" + }, + "funding": { + "type": "Buy me a coffee", + "url": "https://www.buymeacoffee.com/systeminfo" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/telnet-socket": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz", + "integrity": "sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ==", + "dependencies": { + "binary-parser": "1.6.2", + "buffers": "github:NuSkooler/node-buffers" + } + }, + "node_modules/telnet-socket/node_modules/binary-parser": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz", + "integrity": "sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ==", + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/temptmp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/temptmp/-/temptmp-1.1.0.tgz", + "integrity": "sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ==", + "dependencies": { + "del": "^3.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/thirty-two": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz", + "integrity": "sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==", + "engines": { + "node": ">=0.2.6" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "optional": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "optional": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/uuid-parse": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz", + "integrity": "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==" + }, + "node_modules/v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==", + "dependencies": { + "makeerror": "1.0.x" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dependencies": { + "buffer-crc32": "~0.2.3" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - }, - "are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" - }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary-parser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz", - "integrity": "sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ==" - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "requires": { - "node-int64": "^0.4.0" - } }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" - }, - "buffers": { - "version": "git+ssh://git@github.com/NuSkooler/node-buffers.git#cd0855598f7048b02f0a51c90e22573973e9e2c2", - "from": "buffers@github:NuSkooler/node-buffers" - }, - "buildcheck": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz", - "integrity": "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==", - "optional": true - }, - "bunyan": { - "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", - "requires": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "optional": true, - "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "dependencies": { + "dependencies": { + "@breejs/later": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@breejs/later/-/later-4.1.0.tgz", + "integrity": "sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA==" + }, + "@cnakazawa/watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", + "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "optional": true + }, + "@humanwhocodes/config-array": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@mapbox/node-pre-gyp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", + "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", + "requires": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "optional": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "optional": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true + } + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "optional": true + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "optional": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "optional": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-escapes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", + "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "requires": { + "type-fest": "^0.5.2" + }, + "dependencies": { + "type-fest": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", + "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==" + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" + }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "binary-parser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz", + "integrity": "sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ==" + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + }, + "buffers": { + "version": "git+ssh://git@github.com/NuSkooler/node-buffers.git#cd0855598f7048b02f0a51c90e22573973e9e2c2", + "from": "buffers@github:NuSkooler/node-buffers" + }, + "buildcheck": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz", + "integrity": "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==", + "optional": true + }, + "bunyan": { + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", + "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", + "requires": { + "dtrace-provider": "~0.8", + "moment": "^2.19.3", + "mv": "~2", + "safe-json-stringify": "~1" + } + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "optional": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true + } + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "requires": { + "rsvp": "^4.8.4" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "optional": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" + }, + "coffee-script": { + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", + "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "cpu-features": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz", + "integrity": "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==", + "optional": true, + "requires": { + "buildcheck": "0.0.3", + "nan": "^2.15.0" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "deep-extend": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==", + "dev": true + }, + "deepdash": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz", + "integrity": "sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg==", + "requires": { + "lodash": "^4.17.21", + "lodash-es": "^4.17.21" + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "requires": { + "clone": "^1.0.2" + } + }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==", + "requires": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + }, + "dependencies": { + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "requires": { + "array-uniq": "^1.0.1" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + } + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "requires": { + "glob": "^7.0.5" + } + } + } + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "optional": true + }, + "detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dtrace-provider": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz", + "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q==", + "optional": true, + "requires": { + "nan": "^2.10.0" + } + }, + "easy-table": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", + "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==", + "requires": { + "ansi-regex": "^5.0.1", + "wcwidth": "^1.0.1" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "^1.4.0" + } + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "optional": true + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "optional": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz", + "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.3", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "requires": {} + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", + "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "exiftool": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz", + "integrity": "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" + }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "requires": { + "bser": "2.1.1" + } + }, + "figures": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", + "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", + "requires": { + "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + } + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "requires": { + "assert-plus": "^1.0.0" + } + }, "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "hashids": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz", + "integrity": "sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA==" + }, + "hjson": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz", + "integrity": "sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==" + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "optional": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "optional": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "optional": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "devOptional": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "optional": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "optional": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini-config-parser": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz", + "integrity": "sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg==", + "requires": { + "coffee-script": "^1.12.4", + "deep-extend": "^0.5.1", + "rimraf": "^2.6.1" + }, + "dependencies": { + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "requires": { + "glob": "^7.0.5" + } + } + } + }, + "inquirer": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz", + "integrity": "sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow==", + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + } + }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "optional": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "optional": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + }, + "dependencies": { + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + } + } + }, + "jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==" + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "optional": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==", + "requires": { + "tmpl": "1.0.x" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "optional": true, - "requires": { - "yallist": "^4.0.0" - } + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "optional": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "optional": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "optional": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "optional": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "optional": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } }, "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "optional": true - } - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "requires": { - "rsvp": "^4.8.4" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "optional": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" - }, - "coffee-script": { - "version": "1.12.7", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", - "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==" - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - }, - "cpu-features": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz", - "integrity": "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==", - "optional": true, - "requires": { - "buildcheck": "0.0.3", - "nan": "^2.15.0" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "deep-extend": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", - "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==", - "dev": true - }, - "deepdash": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz", - "integrity": "sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg==", - "requires": { - "lodash": "^4.17.21", - "lodash-es": "^4.17.21" - } - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", - "requires": { - "clone": "^1.0.2" - } - }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==", - "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" - }, - "dependencies": { - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "requires": { - "array-uniq": "^1.0.1" - } + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "optional": true, + "requires": { + "minimist": "^1.2.6" + } }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - } - } + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "optional": true, + "requires": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "optional": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "optional": true, + "requires": { + "glob": "^6.0.1" + } + } + } + }, + "nan": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", + "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "optional": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "optional": true + }, + "nntp-server": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nntp-server/-/nntp-server-3.1.0.tgz", + "integrity": "sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw==", + "requires": { + "debug": "^4.3.3", + "denque": "^2.0.1", + "serialize-error": "^8.1.0", + "split2": "^4.1.0" + } + }, + "node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "optional": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "optional": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "optional": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + } + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + }, + "node-pty": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz", + "integrity": "sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg==", + "requires": { + "nan": "^2.14.0" + } + }, + "nodemailer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz", + "integrity": "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==" + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + }, + "otplib": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/otplib/-/otplib-11.0.1.tgz", + "integrity": "sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ==", + "requires": { + "thirty-two": "1.0.2" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } }, "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "optional": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "requires": { + "pinkie": "^2.0.0" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "optional": true + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "optional": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qrcode-generator": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz", + "integrity": "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "optional": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true }, "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "requires": { - "glob": "^7.0.5" - } - } - } - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - }, - "denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "optional": true - }, - "detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dtrace-provider": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz", - "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q==", - "optional": true, - "requires": { - "nan": "^2.10.0" - } - }, - "easy-table": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", - "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==", - "requires": { - "ansi-regex": "^5.0.1", - "wcwidth": "^1.0.1" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - } - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "^1.4.0" - } - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "optional": true - }, - "err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "optional": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz", - "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, - "requires": {} - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "exiftool": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz", - "integrity": "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" - }, - "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "requires": { - "bser": "2.1.1" - } - }, - "figures": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", - "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", - "requires": { - "escape-string-regexp": "^1.0.5" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - } - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "requires": { - "minipass": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "rlogin": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz", + "integrity": "sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==" + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sane": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/sane/-/sane-5.0.1.tgz", + "integrity": "sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q==", + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^3.1.1", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.4", + "execa": "^4.0.0", + "fb-watchman": "^2.0.1", + "micromatch": "^4.0.2", + "minimist": "^1.1.1", + "walker": "~1.0.5" + } + }, + "sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "requires": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "serialize-error": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "requires": { + "type-fest": "^0.20.2" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "optional": true + }, + "socks": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", + "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", + "optional": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "optional": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "split2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", + "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" + }, + "sqlite3": { + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz", + "integrity": "sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA==", + "requires": { + "@mapbox/node-pre-gyp": "^1.0.0", + "node-addon-api": "^4.2.0", + "node-gyp": "8.x", + "tar": "^6.1.11" + } + }, + "sqlite3-trans": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz", + "integrity": "sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg==", + "requires": { + "lodash": "^4.17.15" + } + }, + "ssh2": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz", + "integrity": "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==", + "requires": { + "asn1": "^0.2.4", + "bcrypt-pbkdf": "^1.0.2", + "cpu-features": "~0.0.4", + "nan": "^2.16.0" + } + }, + "sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "optional": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "string_decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", + "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "systeminformation": { + "version": "5.12.3", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.3.tgz", + "integrity": "sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A==" + }, + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, + "telnet-socket": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz", + "integrity": "sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ==", + "requires": { + "binary-parser": "1.6.2", + "buffers": "github:NuSkooler/node-buffers" + }, + "dependencies": { + "binary-parser": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz", + "integrity": "sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ==" + } + } + }, + "temptmp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/temptmp/-/temptmp-1.1.0.tgz", + "integrity": "sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ==", + "requires": { + "del": "^3.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "thirty-two": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz", + "integrity": "sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - }, - "hashids": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz", - "integrity": "sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA==" - }, - "hjson": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz", - "integrity": "sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==" - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "optional": true - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "optional": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "optional": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "devOptional": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "optional": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "optional": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini-config-parser": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz", - "integrity": "sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg==", - "requires": { - "coffee-script": "^1.12.4", - "deep-extend": "^0.5.1", - "rimraf": "^2.6.1" - }, - "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "requires": { + "utf8-byte-length": "^1.0.1" + } + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "optional": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "optional": true, + "requires": { + "imurmurhash": "^0.1.4" + } }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "requires": { - "glob": "^7.0.5" - } - } - } - }, - "inquirer": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz", - "integrity": "sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow==", - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - } - }, - "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "optional": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" - }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "optional": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" - }, - "dependencies": { "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" - } - } - }, - "jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==" - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "optional": true, - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "optional": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==", - "requires": { - "tmpl": "1.0.x" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "optional": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "optional": true, - "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "optional": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "optional": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "optional": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "optional": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "optional": true, - "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "optional": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, - "rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "optional": true, - "requires": { - "glob": "^6.0.1" - } - } - } - }, - "nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "optional": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "optional": true - }, - "nntp-server": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nntp-server/-/nntp-server-3.1.0.tgz", - "integrity": "sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw==", - "requires": { - "debug": "^4.3.3", - "denque": "^2.0.1", - "serialize-error": "^8.1.0", - "split2": "^4.1.0" - } - }, - "node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", - "optional": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "dependencies": { - "are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } }, - "gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "optional": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } + "utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "optional": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - } - } - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - }, - "node-pty": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz", - "integrity": "sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg==", - "requires": { - "nan": "^2.14.0" - } - }, - "nodemailer": { - "version": "6.7.7", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz", - "integrity": "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==" - }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "requires": { - "abbrev": "1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { - "path-key": "^3.0.0" - } - }, - "npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "requires": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" - }, - "otplib": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/otplib/-/otplib-11.0.1.tgz", - "integrity": "sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ==", - "requires": { - "thirty-two": "1.0.2" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "optional": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "requires": { - "pinkie": "^2.0.0" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "optional": true - }, - "promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "optional": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qrcode-generator": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz", - "integrity": "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==" - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "optional": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "rlogin": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz", - "integrity": "sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==" - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", - "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", - "requires": { - "tslib": "^2.1.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sane": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/sane/-/sane-5.0.1.tgz", - "integrity": "sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q==", - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^3.1.1", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.4", - "execa": "^4.0.0", - "fb-watchman": "^2.0.1", - "micromatch": "^4.0.2", - "minimist": "^1.1.1", - "walker": "~1.0.5" - } - }, - "sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "requires": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "serialize-error": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", - "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", - "requires": { - "type-fest": "^0.20.2" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "optional": true - }, - "socks": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", - "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", - "optional": true, - "requires": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", - "optional": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "split2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", - "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" - }, - "sqlite3": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz", - "integrity": "sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA==", - "requires": { - "@mapbox/node-pre-gyp": "^1.0.0", - "node-addon-api": "^4.2.0", - "node-gyp": "8.x", - "tar": "^6.1.11" - } - }, - "sqlite3-trans": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz", - "integrity": "sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg==", - "requires": { - "lodash": "^4.17.15" - } - }, - "ssh2": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz", - "integrity": "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==", - "requires": { - "asn1": "^0.2.4", - "bcrypt-pbkdf": "^1.0.2", - "cpu-features": "~0.0.4", - "nan": "^2.16.0" - } - }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "optional": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "systeminformation": { - "version": "5.12.3", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.3.tgz", - "integrity": "sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A==" - }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - } - } - }, - "telnet-socket": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz", - "integrity": "sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ==", - "requires": { - "binary-parser": "1.6.2", - "buffers": "github:NuSkooler/node-buffers" - }, - "dependencies": { - "binary-parser": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz", - "integrity": "sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ==" + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "uuid-parse": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz", + "integrity": "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==" + }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==", + "requires": { + "makeerror": "1.0.x" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "requires": {} + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "requires": { + "buffer-crc32": "~0.2.3" + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } - } - }, - "temptmp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/temptmp/-/temptmp-1.1.0.tgz", - "integrity": "sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ==", - "requires": { - "del": "^3.0.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "thirty-two": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz", - "integrity": "sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==" - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "requires": { - "utf8-byte-length": "^1.0.1" - } - }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "optional": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "optional": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "uuid-parse": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz", - "integrity": "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==" - }, - "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==", - "requires": { - "makeerror": "1.0.x" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "requires": { - "defaults": "^1.0.3" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "requires": {} - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yazl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", - "requires": { - "buffer-crc32": "~0.2.3" - } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true } - } } diff --git a/package.json b/package.json index 304295ce5..79c623e05 100644 --- a/package.json +++ b/package.json @@ -1,80 +1,80 @@ { - "name": "enigma-bbs", - "version": "0.0.14-beta", - "description": "ENiGMA½ Bulletin Board System", - "author": "Bryan Ashby ", - "license": "BSD-2-Clause", - "bin": { - "enigma-bbs": "./main.js", - "oputil": "./oputil.js" - }, - "scripts": { - "start": "node main.js", - "oputil": "node ./oputil.js", - "pretty": "npx prettier --write ." - }, - "repository": { - "type": "git", - "url": "https://github.com/NuSkooler/enigma-bbs.git" - }, - "homepage": "https://github.com/NuSkooler/enigma-bbs", - "bugs": { - "url": "https://github.com/NuSkooler/enigma-bbs/issues" - }, - "keywords": [ - "bbs", - "telnet", - "ssh", - "retro" - ], - "dependencies": { - "@breejs/later": "4.1.0", - "async": "3.2.4", - "binary-parser": "2.1.0", - "buffers": "github:NuSkooler/node-buffers", - "bunyan": "1.8.15", - "deepdash": "^5.3.9", - "easy-table": "^1.2.0", - "exiftool": "^0.0.3", - "fs-extra": "10.1.0", - "glob": "8.0.3", - "graceful-fs": "^4.2.10", - "hashids": "^2.2.10", - "hjson": "3.2.2", - "http-signature": "^1.3.6", - "iconv-lite": "0.6.3", - "ini-config-parser": "^1.0.4", - "inquirer": "^8.2.2", - "lodash": "4.17.21", - "lru-cache": "7.13.2", - "mime-types": "^2.1.35", - "minimist": "^1.2.6", - "moment": "2.29.4", - "nntp-server": "3.1.0", - "node-pty": "0.10.1", - "nodemailer": "6.7.7", - "otplib": "11.0.1", - "qrcode-generator": "^1.4.4", - "rlogin": "^1.0.0", - "sane": "5.0.1", - "sanitize-filename": "^1.6.3", - "sqlite3": "5.0.11", - "sqlite3-trans": "1.3.0", - "ssh2": "1.11.0", - "systeminformation": "5.12.3", - "telnet-socket": "0.2.4", - "temptmp": "^1.1.0", - "uuid": "8.3.2", - "uuid-parse": "1.1.0", - "ws": "7.5.9", - "yazl": "^2.5.1" - }, - "devDependencies": { - "eslint": "8.21.0", - "eslint-config-prettier": "^8.5.0", - "prettier": "2.7.1" - }, - "engines": { - "node": ">=14" - } + "name": "enigma-bbs", + "version": "0.0.14-beta", + "description": "ENiGMA½ Bulletin Board System", + "author": "Bryan Ashby ", + "license": "BSD-2-Clause", + "bin": { + "enigma-bbs": "./main.js", + "oputil": "./oputil.js" + }, + "scripts": { + "start": "node main.js", + "oputil": "node ./oputil.js", + "pretty": "npx prettier --write ." + }, + "repository": { + "type": "git", + "url": "https://github.com/NuSkooler/enigma-bbs.git" + }, + "homepage": "https://github.com/NuSkooler/enigma-bbs", + "bugs": { + "url": "https://github.com/NuSkooler/enigma-bbs/issues" + }, + "keywords": [ + "bbs", + "telnet", + "ssh", + "retro" + ], + "dependencies": { + "@breejs/later": "4.1.0", + "async": "3.2.4", + "binary-parser": "2.1.0", + "buffers": "github:NuSkooler/node-buffers", + "bunyan": "1.8.15", + "deepdash": "^5.3.9", + "easy-table": "^1.2.0", + "exiftool": "^0.0.3", + "fs-extra": "10.1.0", + "glob": "8.0.3", + "graceful-fs": "^4.2.10", + "hashids": "^2.2.10", + "hjson": "3.2.2", + "http-signature": "^1.3.6", + "iconv-lite": "0.6.3", + "ini-config-parser": "^1.0.4", + "inquirer": "^8.2.2", + "lodash": "4.17.21", + "lru-cache": "7.13.2", + "mime-types": "^2.1.35", + "minimist": "^1.2.6", + "moment": "2.29.4", + "nntp-server": "3.1.0", + "node-pty": "0.10.1", + "nodemailer": "6.7.7", + "otplib": "11.0.1", + "qrcode-generator": "^1.4.4", + "rlogin": "^1.0.0", + "sane": "5.0.1", + "sanitize-filename": "^1.6.3", + "sqlite3": "5.0.11", + "sqlite3-trans": "1.3.0", + "ssh2": "1.11.0", + "systeminformation": "5.12.3", + "telnet-socket": "0.2.4", + "temptmp": "^1.1.0", + "uuid": "8.3.2", + "uuid-parse": "1.1.0", + "ws": "7.5.9", + "yazl": "^2.5.1" + }, + "devDependencies": { + "eslint": "8.21.0", + "eslint-config-prettier": "^8.5.0", + "prettier": "2.7.1" + }, + "engines": { + "node": ">=14" + } } diff --git a/yarn.lock b/yarn.lock index 692f561e9..c0ac52600 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,2387 +3,2375 @@ "@breejs/later@4.1.0": - "integrity" "sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA==" - "resolved" "https://registry.npmjs.org/@breejs/later/-/later-4.1.0.tgz" - "version" "4.1.0" + version "4.1.0" + resolved "https://registry.npmjs.org/@breejs/later/-/later-4.1.0.tgz" + integrity sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA== "@cnakazawa/watch@^1.0.3": - "integrity" "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==" - "resolved" "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz" - "version" "1.0.3" + version "1.0.3" + resolved "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz" + integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== dependencies: - "exec-sh" "^0.3.2" - "minimist" "^1.2.0" + exec-sh "^0.3.2" + minimist "^1.2.0" "@eslint/eslintrc@^1.3.0": - "integrity" "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==" - "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "ajv" "^6.12.4" - "debug" "^4.3.2" - "espree" "^9.3.2" - "globals" "^13.15.0" - "ignore" "^5.2.0" - "import-fresh" "^3.2.1" - "js-yaml" "^4.1.0" - "minimatch" "^3.1.2" - "strip-json-comments" "^3.1.1" + version "1.3.0" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz" + integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.3.2" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" "@gar/promisify@^1.0.1": - "integrity" "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" - "resolved" "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" - "version" "1.1.3" + version "1.1.3" + resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== "@humanwhocodes/config-array@^0.10.4": - "integrity" "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz" - "version" "0.10.4" + version "0.10.4" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz" + integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== dependencies: "@humanwhocodes/object-schema" "^1.2.1" - "debug" "^4.1.1" - "minimatch" "^3.0.4" + debug "^4.1.1" + minimatch "^3.0.4" "@humanwhocodes/gitignore-to-minimatch@^1.0.2": - "integrity" "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz" - "version" "1.0.2" + version "1.0.2" + resolved "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz" + integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== "@humanwhocodes/object-schema@^1.2.1": - "integrity" "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" - "version" "1.2.1" + version "1.2.1" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@mapbox/node-pre-gyp@^1.0.0": - "integrity" "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==" - "resolved" "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz" - "version" "1.0.9" - dependencies: - "detect-libc" "^2.0.0" - "https-proxy-agent" "^5.0.0" - "make-dir" "^3.1.0" - "node-fetch" "^2.6.7" - "nopt" "^5.0.0" - "npmlog" "^5.0.1" - "rimraf" "^3.0.2" - "semver" "^7.3.5" - "tar" "^6.1.11" + version "1.0.9" + resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz" + integrity sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw== + dependencies: + detect-libc "^2.0.0" + https-proxy-agent "^5.0.0" + make-dir "^3.1.0" + node-fetch "^2.6.7" + nopt "^5.0.0" + npmlog "^5.0.1" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.11" "@nodelib/fs.scandir@2.1.5": - "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - "version" "2.1.5" + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" - "run-parallel" "^1.1.9" + run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": - "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - "version" "2.0.5" +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3": - "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - "version" "1.2.8" + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" - "fastq" "^1.6.0" + fastq "^1.6.0" "@npmcli/fs@^1.0.0": - "integrity" "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==" - "resolved" "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" - "version" "1.1.1" + version "1.1.1" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== dependencies: "@gar/promisify" "^1.0.1" - "semver" "^7.3.5" + semver "^7.3.5" "@npmcli/move-file@^1.0.1": - "integrity" "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==" - "resolved" "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" - "version" "1.1.2" + version "1.1.2" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== dependencies: - "mkdirp" "^1.0.4" - "rimraf" "^3.0.2" + mkdirp "^1.0.4" + rimraf "^3.0.2" "@tootallnate/once@1": - "integrity" "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" - "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" - "version" "1.1.2" + version "1.1.2" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== "@types/color-name@^1.1.1": - "integrity" "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - "resolved" "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz" - "version" "1.1.1" - -"abbrev@1": - "integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - "version" "1.1.1" - -"acorn-jsx@^5.3.2": - "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" - "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - "version" "5.3.2" - -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8.8.0": - "integrity" "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==" - "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" - "version" "8.8.0" - -"agent-base@^6.0.2", "agent-base@6": - "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==" - "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "debug" "4" - -"agentkeepalive@^4.1.3": - "integrity" "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==" - "resolved" "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "debug" "^4.1.0" - "depd" "^1.1.2" - "humanize-ms" "^1.2.1" - -"aggregate-error@^3.0.0": - "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" - "resolved" "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "clean-stack" "^2.0.0" - "indent-string" "^4.0.0" - -"ajv@^6.10.0", "ajv@^6.12.4": - "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" - "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - "version" "6.12.6" - dependencies: - "fast-deep-equal" "^3.1.1" - "fast-json-stable-stringify" "^2.0.0" - "json-schema-traverse" "^0.4.1" - "uri-js" "^4.2.2" - -"ansi-escapes@^4.2.1": - "integrity" "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==" - "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "type-fest" "^0.5.2" - -"ansi-regex@^5.0.1": - "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - "version" "5.0.1" - -"ansi-styles@^4.1.0": - "integrity" "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz" - "version" "4.2.1" + version "1.1.1" + resolved "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +abbrev@1: + version "1.1.1" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.8.0: + version "8.8.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.1.3: + version "4.2.1" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" + integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== + dependencies: + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-escapes@^4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz" + integrity sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q== + dependencies: + type-fest "^0.5.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== dependencies: "@types/color-name" "^1.1.1" - "color-convert" "^2.0.1" + color-convert "^2.0.1" -"anymatch@^3.1.1": - "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" - "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" - "version" "3.1.2" +anymatch@^3.1.1: + version "3.1.2" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: - "normalize-path" "^3.0.0" - "picomatch" "^2.0.4" + normalize-path "^3.0.0" + picomatch "^2.0.4" "aproba@^1.0.3 || ^2.0.0": - "integrity" "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - "resolved" "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" - "version" "2.0.0" - -"are-we-there-yet@^2.0.0": - "integrity" "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==" - "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "delegates" "^1.0.0" - "readable-stream" "^3.6.0" - -"are-we-there-yet@^3.0.0": - "integrity" "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==" - "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "delegates" "^1.0.0" - "readable-stream" "^3.6.0" - -"argparse@^2.0.1": - "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - "version" "2.0.1" - -"array-union@^1.0.1": - "integrity" "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==" - "resolved" "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "array-uniq" "^1.0.1" - -"array-union@^2.1.0": - "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - "version" "2.1.0" - -"array-uniq@^1.0.1": - "integrity" "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" - "resolved" "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" - "version" "1.0.3" - -"asn1@^0.2.4", "asn1@~0.2.3": - "integrity" "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==" - "resolved" "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" - "version" "0.2.6" - dependencies: - "safer-buffer" "~2.1.0" - -"assert-plus@^1.0.0", "assert-plus@1.0.0": - "integrity" "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" - "resolved" "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" - "version" "1.0.0" - -"async@3.2.4": - "integrity" "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - "resolved" "https://registry.npmjs.org/async/-/async-3.2.4.tgz" - "version" "3.2.4" - -"balanced-match@^1.0.0": - "integrity" "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" - "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" - "version" "1.0.0" - -"base64-js@^1.3.1": - "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - "version" "1.5.1" - -"bcrypt-pbkdf@^1.0.0", "bcrypt-pbkdf@^1.0.2": - "integrity" "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==" - "resolved" "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "tweetnacl" "^0.14.3" - -"binary-parser@1.6.2": - "integrity" "sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ==" - "resolved" "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz" - "version" "1.6.2" - -"binary-parser@2.1.0": - "integrity" "sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ==" - "resolved" "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz" - "version" "2.1.0" - -"bl@^4.1.0": - "integrity" "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==" - "resolved" "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "buffer" "^5.5.0" - "inherits" "^2.0.4" - "readable-stream" "^3.4.0" - -"brace-expansion@^1.1.7": - "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" - "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - "version" "1.1.11" - dependencies: - "balanced-match" "^1.0.0" - "concat-map" "0.0.1" + version "2.0.0" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" + integrity "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==" + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + integrity "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" + +asn1@^0.2.4, asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +async@3.2.4: + version "3.2.4" + resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + integrity "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" + integrity "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==" + dependencies: + tweetnacl "^0.14.3" + +binary-parser@1.6.2: + version "1.6.2" + resolved "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz" + integrity sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ== + +binary-parser@2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz" + integrity sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ== + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" -"brace-expansion@^2.0.1": - "integrity" "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==" - "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - "version" "2.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: - "balanced-match" "^1.0.0" - -"braces@^3.0.2": - "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" - "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - "version" "3.0.2" + balanced-match "^1.0.0" + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: - "fill-range" "^7.0.1" + fill-range "^7.0.1" -"bser@2.1.1": - "integrity" "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==" - "resolved" "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "node-int64" "^0.4.0" +bser@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" -"buffer-crc32@~0.2.3": - "integrity" "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" - "resolved" "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" - "version" "0.2.13" +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" + integrity "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" -"buffer@^5.5.0": - "integrity" "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" - "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - "version" "5.7.1" - dependencies: - "base64-js" "^1.3.1" - "ieee754" "^1.1.13" +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" "buffers@github:NuSkooler/node-buffers": - "resolved" "git+ssh://git@github.com/NuSkooler/node-buffers.git#cd0855598f7048b02f0a51c90e22573973e9e2c2" - "version" "0.1.1" - -"buildcheck@0.0.3": - "integrity" "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==" - "resolved" "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz" - "version" "0.0.3" - -"bunyan@1.8.15": - "integrity" "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==" - "resolved" "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz" - "version" "1.8.15" + version "0.1.1" + resolved "git+ssh://git@github.com/NuSkooler/node-buffers.git#cd0855598f7048b02f0a51c90e22573973e9e2c2" + +buildcheck@0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz" + integrity sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA== + +bunyan@1.8.15: + version "1.8.15" + resolved "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz" + integrity sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig== optionalDependencies: - "dtrace-provider" "~0.8" - "moment" "^2.19.3" - "mv" "~2" - "safe-json-stringify" "~1" + dtrace-provider "~0.8" + moment "^2.19.3" + mv "~2" + safe-json-stringify "~1" -"cacache@^15.2.0": - "integrity" "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==" - "resolved" "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" - "version" "15.3.0" +cacache@^15.2.0: + version "15.3.0" + resolved "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== dependencies: "@npmcli/fs" "^1.0.0" "@npmcli/move-file" "^1.0.1" - "chownr" "^2.0.0" - "fs-minipass" "^2.0.0" - "glob" "^7.1.4" - "infer-owner" "^1.0.4" - "lru-cache" "^6.0.0" - "minipass" "^3.1.1" - "minipass-collect" "^1.0.2" - "minipass-flush" "^1.0.5" - "minipass-pipeline" "^1.2.2" - "mkdirp" "^1.0.3" - "p-map" "^4.0.0" - "promise-inflight" "^1.0.1" - "rimraf" "^3.0.2" - "ssri" "^8.0.1" - "tar" "^6.0.2" - "unique-filename" "^1.1.1" - -"callsites@^3.0.0": - "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - "version" "3.1.0" - -"capture-exit@^2.0.0": - "integrity" "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==" - "resolved" "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "rsvp" "^4.8.4" - -"chalk@^4.0.0", "chalk@^4.1.0", "chalk@^4.1.1": - "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - "version" "4.1.2" - dependencies: - "ansi-styles" "^4.1.0" - "supports-color" "^7.1.0" - -"chardet@^0.7.0": - "integrity" "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - "resolved" "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" - "version" "0.7.0" - -"chownr@^2.0.0": - "integrity" "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" - "resolved" "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" - "version" "2.0.0" - -"clean-stack@^2.0.0": - "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - "version" "2.2.0" - -"cli-cursor@^3.1.0": - "integrity" "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" - "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "restore-cursor" "^3.1.0" - -"cli-spinners@^2.5.0": - "integrity" "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" - "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" - "version" "2.6.1" - -"cli-width@^3.0.0": - "integrity" "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" - "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" - "version" "3.0.0" - -"clone@^1.0.2": - "integrity" "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" - "resolved" "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" - "version" "1.0.4" - -"coffee-script@^1.12.4": - "integrity" "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==" - "resolved" "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz" - "version" "1.12.7" - -"color-convert@^2.0.1": - "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "color-name" "~1.1.4" - -"color-name@~1.1.4": - "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - "version" "1.1.4" - -"color-support@^1.1.2", "color-support@^1.1.3": - "integrity" "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" - "resolved" "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" - "version" "1.1.3" - -"concat-map@0.0.1": - "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - "version" "0.0.1" - -"console-control-strings@^1.0.0", "console-control-strings@^1.1.0": - "integrity" "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" - "resolved" "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" - "version" "1.1.0" - -"core-util-is@1.0.2": - "integrity" "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - "version" "1.0.2" - -"cpu-features@~0.0.4": - "integrity" "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==" - "resolved" "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz" - "version" "0.0.4" - dependencies: - "buildcheck" "0.0.3" - "nan" "^2.15.0" - -"cross-spawn@^7.0.0", "cross-spawn@^7.0.2": - "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" - "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - "version" "7.0.3" - dependencies: - "path-key" "^3.1.0" - "shebang-command" "^2.0.0" - "which" "^2.0.1" - -"dashdash@^1.12.0": - "integrity" "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==" - "resolved" "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" - "version" "1.14.1" - dependencies: - "assert-plus" "^1.0.0" - -"debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.2", "debug@^4.3.3", "debug@4": - "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" - "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - "version" "4.3.4" - dependencies: - "ms" "2.1.2" - -"deep-extend@^0.5.1": - "integrity" "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" - "resolved" "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz" - "version" "0.5.1" - -"deep-is@^0.1.3": - "integrity" "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==" - "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" - "version" "0.1.3" - -"deepdash@^5.3.9": - "integrity" "sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg==" - "resolved" "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz" - "version" "5.3.9" - dependencies: - "lodash" "^4.17.21" - "lodash-es" "^4.17.21" - -"defaults@^1.0.3": - "integrity" "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==" - "resolved" "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "clone" "^1.0.2" - -"del@^3.0.0": - "integrity" "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==" - "resolved" "https://registry.npmjs.org/del/-/del-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "globby" "^6.1.0" - "is-path-cwd" "^1.0.0" - "is-path-in-cwd" "^1.0.0" - "p-map" "^1.1.1" - "pify" "^3.0.0" - "rimraf" "^2.2.8" - -"delegates@^1.0.0": - "integrity" "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - "resolved" "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" - "version" "1.0.0" - -"denque@^2.0.1": - "integrity" "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" - "resolved" "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz" - "version" "2.1.0" - -"depd@^1.1.2": - "integrity" "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" - "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - "version" "1.1.2" - -"detect-libc@^2.0.0": - "integrity" "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" - "resolved" "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" - "version" "2.0.1" - -"dir-glob@^3.0.1": - "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" - "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "path-type" "^4.0.0" - -"doctrine@^3.0.0": - "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" - "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "esutils" "^2.0.2" - -"dtrace-provider@~0.8": - "integrity" "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q==" - "resolved" "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz" - "version" "0.8.7" - dependencies: - "nan" "^2.10.0" - -"easy-table@^1.2.0": - "integrity" "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==" - "resolved" "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "ansi-regex" "^5.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.6.1" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + integrity "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" + +coffee-script@^1.12.4: + version "1.12.7" + resolved "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz" + integrity sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.2, color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + +console-control-strings@^1.0.0, console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +cpu-features@~0.0.4: + version "0.0.4" + resolved "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz" + integrity sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A== + dependencies: + buildcheck "0.0.3" + nan "^2.15.0" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-extend@^0.5.1: + version "0.5.1" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz" + integrity sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w== + +deep-is@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" + integrity "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==" + +deepdash@^5.3.9: + version "5.3.9" + resolved "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz" + integrity sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg== + dependencies: + lodash "^4.17.21" + lodash-es "^4.17.21" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" + integrity "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==" + dependencies: + clone "^1.0.2" + +del@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/del/-/del-3.0.0.tgz" + integrity "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==" + dependencies: + globby "^6.1.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + p-map "^1.1.1" + pify "^3.0.0" + rimraf "^2.2.8" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + integrity "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + +denque@^2.0.1: + version "2.1.0" + resolved "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz" + integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== + +depd@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +detect-libc@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" + integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dtrace-provider@~0.8: + version "0.8.7" + resolved "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz" + integrity "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q==" + dependencies: + nan "^2.10.0" + +easy-table@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz" + integrity sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww== + dependencies: + ansi-regex "^5.0.1" optionalDependencies: - "wcwidth" "^1.0.1" - -"ecc-jsbn@~0.1.1": - "integrity" "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==" - "resolved" "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" - "version" "0.1.2" - dependencies: - "jsbn" "~0.1.0" - "safer-buffer" "^2.1.0" - -"emoji-regex@^8.0.0": - "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - "version" "8.0.0" - -"encoding@^0.1.0", "encoding@^0.1.12": - "integrity" "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==" - "resolved" "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" - "version" "0.1.13" - dependencies: - "iconv-lite" "^0.6.2" - -"end-of-stream@^1.1.0": - "integrity" "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==" - "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz" - "version" "1.4.1" - dependencies: - "once" "^1.4.0" - -"env-paths@^2.2.0": - "integrity" "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" - "resolved" "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" - "version" "2.2.1" - -"err-code@^2.0.2": - "integrity" "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" - "resolved" "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" - "version" "2.0.3" - -"escape-string-regexp@^1.0.5": - "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - "version" "1.0.5" - -"escape-string-regexp@^4.0.0": - "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - "version" "4.0.0" - -"eslint-config-prettier@^8.5.0": - "integrity" "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==" - "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" - "version" "8.5.0" - -"eslint-scope@^7.1.1": - "integrity" "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==" - "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" - "version" "7.1.1" - dependencies: - "esrecurse" "^4.3.0" - "estraverse" "^5.2.0" - -"eslint-utils@^3.0.0": - "integrity" "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==" - "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "eslint-visitor-keys" "^2.0.0" - -"eslint-visitor-keys@^2.0.0": - "integrity" "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" - "version" "2.0.0" - -"eslint-visitor-keys@^3.3.0": - "integrity" "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" - "version" "3.3.0" - -"eslint@>=5", "eslint@>=7.0.0", "eslint@8.21.0": - "integrity" "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==" - "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz" - "version" "8.21.0" + wcwidth "^1.0.1" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encoding@^0.1.12: + version "0.1.13" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + dependencies: + once "^1.4.0" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-prettier@^8.5.0: + version "8.5.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@8.21.0: + version "8.21.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz" + integrity sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA== dependencies: "@eslint/eslintrc" "^1.3.0" "@humanwhocodes/config-array" "^0.10.4" "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" - "ajv" "^6.10.0" - "chalk" "^4.0.0" - "cross-spawn" "^7.0.2" - "debug" "^4.3.2" - "doctrine" "^3.0.0" - "escape-string-regexp" "^4.0.0" - "eslint-scope" "^7.1.1" - "eslint-utils" "^3.0.0" - "eslint-visitor-keys" "^3.3.0" - "espree" "^9.3.3" - "esquery" "^1.4.0" - "esutils" "^2.0.2" - "fast-deep-equal" "^3.1.3" - "file-entry-cache" "^6.0.1" - "find-up" "^5.0.0" - "functional-red-black-tree" "^1.0.1" - "glob-parent" "^6.0.1" - "globals" "^13.15.0" - "globby" "^11.1.0" - "grapheme-splitter" "^1.0.4" - "ignore" "^5.2.0" - "import-fresh" "^3.0.0" - "imurmurhash" "^0.1.4" - "is-glob" "^4.0.0" - "js-yaml" "^4.1.0" - "json-stable-stringify-without-jsonify" "^1.0.1" - "levn" "^0.4.1" - "lodash.merge" "^4.6.2" - "minimatch" "^3.1.2" - "natural-compare" "^1.4.0" - "optionator" "^0.9.1" - "regexpp" "^3.2.0" - "strip-ansi" "^6.0.1" - "strip-json-comments" "^3.1.0" - "text-table" "^0.2.0" - "v8-compile-cache" "^2.0.3" - -"espree@^9.3.2", "espree@^9.3.3": - "integrity" "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==" - "resolved" "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz" - "version" "9.3.3" - dependencies: - "acorn" "^8.8.0" - "acorn-jsx" "^5.3.2" - "eslint-visitor-keys" "^3.3.0" - -"esquery@^1.4.0": - "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==" - "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "estraverse" "^5.1.0" - -"esrecurse@^4.3.0": - "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" - "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "estraverse" "^5.2.0" - -"estraverse@^5.1.0", "estraverse@^5.2.0": - "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" - "version" "5.2.0" - -"esutils@^2.0.2": - "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - "version" "2.0.3" - -"exec-sh@^0.3.2", "exec-sh@^0.3.4": - "integrity" "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" - "resolved" "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz" - "version" "0.3.6" - -"execa@^4.0.0": - "integrity" "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==" - "resolved" "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "cross-spawn" "^7.0.0" - "get-stream" "^5.0.0" - "human-signals" "^1.1.1" - "is-stream" "^2.0.0" - "merge-stream" "^2.0.0" - "npm-run-path" "^4.0.0" - "onetime" "^5.1.0" - "signal-exit" "^3.0.2" - "strip-final-newline" "^2.0.0" - -"exiftool@^0.0.3": - "integrity" "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" - "resolved" "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz" - "version" "0.0.3" - -"external-editor@^3.0.3": - "integrity" "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==" - "resolved" "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz" - "version" "3.0.3" - dependencies: - "chardet" "^0.7.0" - "iconv-lite" "^0.4.24" - "tmp" "^0.0.33" - -"extsprintf@^1.2.0", "extsprintf@1.3.0": - "integrity" "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" - "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" - "version" "1.3.0" - -"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": - "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - "version" "3.1.3" - -"fast-glob@^3.2.9": - "integrity" "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==" - "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz" - "version" "3.2.11" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.3.3" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + functional-red-black-tree "^1.0.1" + glob-parent "^6.0.1" + globals "^13.15.0" + globby "^11.1.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^9.3.2, espree@^9.3.3: + version "9.3.3" + resolved "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz" + integrity sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +exec-sh@^0.3.2, exec-sh@^0.3.4: + version "0.3.6" + resolved "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz" + integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== + +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +exiftool@^0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz" + integrity "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" + +external-editor@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz" + integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extsprintf@1.3.0, extsprintf@^1.2.0: + version "1.3.0" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - "glob-parent" "^5.1.2" - "merge2" "^1.3.0" - "micromatch" "^4.0.4" - -"fast-json-stable-stringify@^2.0.0": - "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - "version" "2.1.0" - -"fast-levenshtein@^2.0.6": - "integrity" "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - "version" "2.0.6" - -"fastq@^1.6.0": - "integrity" "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==" - "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" - "version" "1.13.0" - dependencies: - "reusify" "^1.0.4" - -"fb-watchman@^2.0.1": - "integrity" "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==" - "resolved" "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "bser" "2.1.1" - -"figures@^3.0.0": - "integrity" "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==" - "resolved" "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "escape-string-regexp" "^1.0.5" - -"file-entry-cache@^6.0.1": - "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" - "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "flat-cache" "^3.0.4" - -"fill-range@^7.0.1": - "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" - "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "to-regex-range" "^5.0.1" - -"find-up@^5.0.0": - "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "locate-path" "^6.0.0" - "path-exists" "^4.0.0" - -"flat-cache@^3.0.4": - "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==" - "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "flatted" "^3.1.0" - "rimraf" "^3.0.2" - -"flatted@^3.1.0": - "integrity" "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==" - "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" - "version" "3.1.1" - -"fs-extra@10.1.0": - "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" - "version" "10.1.0" - dependencies: - "graceful-fs" "^4.2.0" - "jsonfile" "^6.0.1" - "universalify" "^2.0.0" - -"fs-minipass@^2.0.0": - "integrity" "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==" - "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "minipass" "^3.0.0" - -"fs.realpath@^1.0.0": - "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - "version" "1.0.0" - -"functional-red-black-tree@^1.0.1": - "integrity" "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" - "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" - "version" "1.0.1" - -"gauge@^3.0.0": - "integrity" "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==" - "resolved" "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "aproba" "^1.0.3 || ^2.0.0" - "color-support" "^1.1.2" - "console-control-strings" "^1.0.0" - "has-unicode" "^2.0.1" - "object-assign" "^4.1.1" - "signal-exit" "^3.0.0" - "string-width" "^4.2.3" - "strip-ansi" "^6.0.1" - "wide-align" "^1.1.2" - -"gauge@^4.0.3": - "integrity" "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==" - "resolved" "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" - "version" "4.0.4" - dependencies: - "aproba" "^1.0.3 || ^2.0.0" - "color-support" "^1.1.3" - "console-control-strings" "^1.1.0" - "has-unicode" "^2.0.1" - "signal-exit" "^3.0.7" - "string-width" "^4.2.3" - "strip-ansi" "^6.0.1" - "wide-align" "^1.1.5" - -"get-stream@^5.0.0": - "integrity" "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" - "version" "5.2.0" - dependencies: - "pump" "^3.0.0" - -"getpass@^0.1.1": - "integrity" "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==" - "resolved" "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" - "version" "0.1.7" - dependencies: - "assert-plus" "^1.0.0" - -"glob-parent@^5.1.2": - "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - "version" "5.1.2" - dependencies: - "is-glob" "^4.0.1" - -"glob-parent@^6.0.1": - "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "is-glob" "^4.0.3" - -"glob@^6.0.1": - "integrity" "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==" - "resolved" "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz" - "version" "6.0.4" - dependencies: - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "2 || 3" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@^7.0.3", "glob@^7.0.5": - "integrity" "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" - "version" "7.1.3" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.0.4" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@^7.1.3": - "integrity" "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" - "version" "7.1.6" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.0.4" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@^7.1.4": - "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - "version" "7.2.3" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.1.1" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@8.0.3": - "integrity" "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==" - "resolved" "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" - "version" "8.0.3" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^5.0.1" - "once" "^1.3.0" - -"globals@^13.15.0": - "integrity" "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==" - "resolved" "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" - "version" "13.17.0" - dependencies: - "type-fest" "^0.20.2" - -"globby@^11.1.0": - "integrity" "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==" - "resolved" "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - "version" "11.1.0" - dependencies: - "array-union" "^2.1.0" - "dir-glob" "^3.0.1" - "fast-glob" "^3.2.9" - "ignore" "^5.2.0" - "merge2" "^1.4.1" - "slash" "^3.0.0" - -"globby@^6.1.0": - "integrity" "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==" - "resolved" "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "array-union" "^1.0.1" - "glob" "^7.0.3" - "object-assign" "^4.0.1" - "pify" "^2.0.0" - "pinkie-promise" "^2.0.0" - -"graceful-fs@^4.1.6", "graceful-fs@^4.2.0", "graceful-fs@^4.2.10", "graceful-fs@^4.2.6": - "integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - "version" "4.2.10" - -"grapheme-splitter@^1.0.4": - "integrity" "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" - "resolved" "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" - "version" "1.0.4" - -"has-flag@^4.0.0": - "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - "version" "4.0.0" - -"has-unicode@^2.0.1": - "integrity" "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - "resolved" "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" - "version" "2.0.1" - -"hashids@^2.2.10": - "integrity" "sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA==" - "resolved" "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz" - "version" "2.2.10" - -"hjson@3.2.2": - "integrity" "sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==" - "resolved" "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" - "version" "3.2.2" - -"http-cache-semantics@^4.1.0": - "integrity" "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" - "version" "4.1.0" - -"http-proxy-agent@^4.0.1": - "integrity" "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==" - "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" - "version" "4.0.1" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +figures@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz" + integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" + integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== + +fs-extra@10.1.0: + version "10.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" + integrity "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + +gauge@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" + console-control-strings "^1.0.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" + signal-exit "^3.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@8.0.3: + version "8.0.3" + resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@^6.0.1: + version "6.0.4" + resolved "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz" + integrity "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.3, glob@^7.0.5: + version "7.1.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.1.6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.4: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.15.0: + version "13.17.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== + dependencies: + type-fest "^0.20.2" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" + integrity "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==" + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.6: + version "4.2.10" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +hashids@^2.2.10: + version "2.2.10" + resolved "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz" + integrity sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA== + +hjson@3.2.2: + version "3.2.2" + resolved "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" + integrity sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q== + +http-cache-semantics@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: "@tootallnate/once" "1" - "agent-base" "6" - "debug" "4" - -"http-signature@^1.3.6": - "integrity" "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==" - "resolved" "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz" - "version" "1.3.6" - dependencies: - "assert-plus" "^1.0.0" - "jsprim" "^2.0.2" - "sshpk" "^1.14.1" - -"https-proxy-agent@^5.0.0": - "integrity" "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==" - "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "agent-base" "6" - "debug" "4" - -"human-signals@^1.1.1": - "integrity" "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" - "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" - "version" "1.1.1" - -"humanize-ms@^1.2.1": - "integrity" "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==" - "resolved" "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" - "version" "1.2.1" - dependencies: - "ms" "^2.0.0" - -"iconv-lite@^0.4.24": - "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" - "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - "version" "0.4.24" - dependencies: - "safer-buffer" ">= 2.1.2 < 3" - -"iconv-lite@^0.6.2", "iconv-lite@0.6.3": - "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" - "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - "version" "0.6.3" - dependencies: - "safer-buffer" ">= 2.1.2 < 3.0.0" - -"ieee754@^1.1.13": - "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - "version" "1.2.1" - -"ignore@^5.2.0": - "integrity" "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" - "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" - "version" "5.2.0" - -"import-fresh@^3.0.0", "import-fresh@^3.2.1": - "integrity" "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==" - "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz" - "version" "3.2.1" - dependencies: - "parent-module" "^1.0.0" - "resolve-from" "^4.0.0" - -"imurmurhash@^0.1.4": - "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - "version" "0.1.4" - -"indent-string@^4.0.0": - "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" - "version" "4.0.0" - -"infer-owner@^1.0.4": - "integrity" "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - "resolved" "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" - "version" "1.0.4" - -"inflight@^1.0.4": - "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" - "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - "version" "1.0.6" - dependencies: - "once" "^1.3.0" - "wrappy" "1" - -"inherits@^2.0.3", "inherits@^2.0.4", "inherits@2": - "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - "version" "2.0.4" - -"ini-config-parser@^1.0.4": - "integrity" "sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg==" - "resolved" "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "coffee-script" "^1.12.4" - "deep-extend" "^0.5.1" - "rimraf" "^2.6.1" - -"inquirer@^8.2.2": - "integrity" "sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow==" - "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz" - "version" "8.2.2" - dependencies: - "ansi-escapes" "^4.2.1" - "chalk" "^4.1.1" - "cli-cursor" "^3.1.0" - "cli-width" "^3.0.0" - "external-editor" "^3.0.3" - "figures" "^3.0.0" - "lodash" "^4.17.21" - "mute-stream" "0.0.8" - "ora" "^5.4.1" - "run-async" "^2.4.0" - "rxjs" "^7.5.5" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" - "through" "^2.3.6" - -"ip@^2.0.0": - "integrity" "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" - "resolved" "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" - "version" "2.0.0" - -"is-extglob@^2.1.1": - "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - "version" "2.1.1" - -"is-fullwidth-code-point@^3.0.0": - "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - "version" "3.0.0" - -"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@^4.0.3": - "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" - "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "is-extglob" "^2.1.1" - -"is-interactive@^1.0.0": - "integrity" "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" - "resolved" "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" - "version" "1.0.0" - -"is-lambda@^1.0.1": - "integrity" "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" - "resolved" "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" - "version" "1.0.1" - -"is-number@^7.0.0": - "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - "version" "7.0.0" - -"is-path-cwd@^1.0.0": - "integrity" "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" - "resolved" "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz" - "version" "1.0.0" - -"is-path-in-cwd@^1.0.0": - "integrity" "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==" - "resolved" "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "is-path-inside" "^1.0.0" - -"is-path-inside@^1.0.0": - "integrity" "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==" - "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "path-is-inside" "^1.0.1" - -"is-stream@^2.0.0": - "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - "version" "2.0.1" - -"is-unicode-supported@^0.1.0": - "integrity" "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" - "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - "version" "0.1.0" - -"isexe@^2.0.0": - "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - "version" "2.0.0" - -"js-yaml@^4.1.0": - "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "argparse" "^2.0.1" - -"jsbn@~0.1.0": - "integrity" "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - "resolved" "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" - "version" "0.1.1" - -"json-schema-traverse@^0.4.1": - "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - "version" "0.4.1" - -"json-schema@0.4.0": - "integrity" "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - "resolved" "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" - "version" "0.4.0" - -"json-stable-stringify-without-jsonify@^1.0.1": - "integrity" "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - "version" "1.0.1" - -"jsonfile@^6.0.1": - "integrity" "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==" - "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "universalify" "^1.0.0" + agent-base "6" + debug "4" + +http-signature@^1.3.6: + version "1.3.6" + resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz" + integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== + dependencies: + assert-plus "^1.0.0" + jsprim "^2.0.2" + sshpk "^1.14.1" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +iconv-lite@0.6.3, iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini-config-parser@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz" + integrity sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg== + dependencies: + coffee-script "^1.12.4" + deep-extend "^0.5.1" + rimraf "^2.6.1" + +inquirer@^8.2.2: + version "8.2.2" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz" + integrity sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz" + integrity "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz" + integrity "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==" + dependencies: + path-is-inside "^1.0.1" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" optionalDependencies: - "graceful-fs" "^4.1.6" - -"jsprim@^2.0.2": - "integrity" "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==" - "resolved" "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "assert-plus" "1.0.0" - "extsprintf" "1.3.0" - "json-schema" "0.4.0" - "verror" "1.10.0" - -"levn@^0.4.1": - "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" - "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - "version" "0.4.1" - dependencies: - "prelude-ls" "^1.2.1" - "type-check" "~0.4.0" - -"locate-path@^6.0.0": - "integrity" "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==" - "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "p-locate" "^5.0.0" - -"lodash-es@^4.17.21": - "integrity" "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - "resolved" "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" - "version" "4.17.21" - -"lodash.merge@^4.6.2": - "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - "version" "4.6.2" - -"lodash@^4.17.15", "lodash@^4.17.21", "lodash@4.17.21": - "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - "version" "4.17.21" - -"log-symbols@^4.1.0": - "integrity" "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==" - "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "chalk" "^4.1.0" - "is-unicode-supported" "^0.1.0" - -"lru-cache@^6.0.0": - "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "yallist" "^4.0.0" - -"lru-cache@7.13.2": - "integrity" "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz" - "version" "7.13.2" - -"make-dir@^3.1.0": - "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" - "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "semver" "^6.0.0" - -"make-fetch-happen@^9.1.0": - "integrity" "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==" - "resolved" "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" - "version" "9.1.0" - dependencies: - "agentkeepalive" "^4.1.3" - "cacache" "^15.2.0" - "http-cache-semantics" "^4.1.0" - "http-proxy-agent" "^4.0.1" - "https-proxy-agent" "^5.0.0" - "is-lambda" "^1.0.1" - "lru-cache" "^6.0.0" - "minipass" "^3.1.3" - "minipass-collect" "^1.0.2" - "minipass-fetch" "^1.3.2" - "minipass-flush" "^1.0.5" - "minipass-pipeline" "^1.2.4" - "negotiator" "^0.6.2" - "promise-retry" "^2.0.1" - "socks-proxy-agent" "^6.0.0" - "ssri" "^8.0.0" - -"makeerror@1.0.x": - "integrity" "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==" - "resolved" "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz" - "version" "1.0.11" - dependencies: - "tmpl" "1.0.x" - -"merge-stream@^2.0.0": - "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - "version" "2.0.0" - -"merge2@^1.3.0", "merge2@^1.4.1": - "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - "version" "1.4.1" - -"micromatch@^4.0.2", "micromatch@^4.0.4": - "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==" - "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - "version" "4.0.5" - dependencies: - "braces" "^3.0.2" - "picomatch" "^2.3.1" - -"mime-db@1.52.0": - "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - "version" "1.52.0" - -"mime-types@^2.1.35": - "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" - "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - "version" "2.1.35" - dependencies: - "mime-db" "1.52.0" - -"mimic-fn@^2.1.0": - "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - "version" "2.1.0" - -"minimatch@^3.0.4", "minimatch@^3.1.1", "minimatch@^3.1.2", "minimatch@2 || 3": - "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - "version" "3.1.2" - dependencies: - "brace-expansion" "^1.1.7" - -"minimatch@^5.0.1": - "integrity" "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "brace-expansion" "^2.0.1" - -"minimist@^1.1.1", "minimist@^1.2.0", "minimist@^1.2.6": - "integrity" "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" - "version" "1.2.6" - -"minipass-collect@^1.0.2": - "integrity" "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==" - "resolved" "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "minipass" "^3.0.0" - -"minipass-fetch@^1.3.2": - "integrity" "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==" - "resolved" "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" - "version" "1.4.1" - dependencies: - "minipass" "^3.1.0" - "minipass-sized" "^1.0.3" - "minizlib" "^2.0.0" + graceful-fs "^4.1.6" + +jsprim@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz" + integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +lru-cache@7.13.2: + version "7.13.2" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz" + integrity sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-fetch-happen@^9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz" + integrity "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==" + dependencies: + tmpl "1.0.x" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.35: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.0" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" optionalDependencies: - "encoding" "^0.1.12" - -"minipass-flush@^1.0.5": - "integrity" "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==" - "resolved" "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" - "version" "1.0.5" - dependencies: - "minipass" "^3.0.0" - -"minipass-pipeline@^1.2.2", "minipass-pipeline@^1.2.4": - "integrity" "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==" - "resolved" "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" - "version" "1.2.4" - dependencies: - "minipass" "^3.0.0" - -"minipass-sized@^1.0.3": - "integrity" "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==" - "resolved" "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "minipass" "^3.0.0" - -"minipass@^3.0.0", "minipass@^3.1.0", "minipass@^3.1.1", "minipass@^3.1.3": - "integrity" "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==" - "resolved" "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" - "version" "3.3.4" - dependencies: - "yallist" "^4.0.0" - -"minizlib@^2.0.0", "minizlib@^2.1.1": - "integrity" "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==" - "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" - "version" "2.1.2" - dependencies: - "minipass" "^3.0.0" - "yallist" "^4.0.0" - -"mkdirp@^1.0.3": - "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - "version" "1.0.4" - -"mkdirp@^1.0.4": - "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - "version" "1.0.4" - -"mkdirp@~0.5.1": - "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" - "version" "0.5.6" - dependencies: - "minimist" "^1.2.6" - -"moment@^2.19.3", "moment@2.29.4": - "integrity" "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" - "resolved" "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" - "version" "2.29.4" - -"ms@^2.0.0", "ms@2.1.2": - "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - "version" "2.1.2" - -"mute-stream@0.0.8": - "integrity" "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" - "version" "0.0.8" - -"mv@~2": - "integrity" "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==" - "resolved" "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "mkdirp" "~0.5.1" - "ncp" "~2.0.0" - "rimraf" "~2.4.0" - -"nan@^2.10.0", "nan@^2.14.0", "nan@^2.15.0", "nan@^2.16.0": - "integrity" "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" - "resolved" "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz" - "version" "2.16.0" - -"natural-compare@^1.4.0": - "integrity" "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - "version" "1.4.0" - -"ncp@~2.0.0": - "integrity" "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==" - "resolved" "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz" - "version" "2.0.0" - -"negotiator@^0.6.2": - "integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - "version" "0.6.3" - -"nntp-server@3.1.0": - "integrity" "sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw==" - "resolved" "https://registry.npmjs.org/nntp-server/-/nntp-server-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "debug" "^4.3.3" - "denque" "^2.0.1" - "serialize-error" "^8.1.0" - "split2" "^4.1.0" - -"node-addon-api@^4.2.0": - "integrity" "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" - "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz" - "version" "4.3.0" - -"node-fetch@^2.6.7": - "integrity" "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==" - "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" - "version" "2.6.7" - dependencies: - "whatwg-url" "^5.0.0" - -"node-gyp@8.x": - "integrity" "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==" - "resolved" "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" - "version" "8.4.1" - dependencies: - "env-paths" "^2.2.0" - "glob" "^7.1.4" - "graceful-fs" "^4.2.6" - "make-fetch-happen" "^9.1.0" - "nopt" "^5.0.0" - "npmlog" "^6.0.0" - "rimraf" "^3.0.2" - "semver" "^7.3.5" - "tar" "^6.1.2" - "which" "^2.0.2" - -"node-int64@^0.4.0": - "integrity" "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - "resolved" "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" - "version" "0.4.0" - -"node-pty@0.10.1": - "integrity" "sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg==" - "resolved" "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz" - "version" "0.10.1" - dependencies: - "nan" "^2.14.0" - -"nodemailer@6.7.7": - "integrity" "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==" - "resolved" "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz" - "version" "6.7.7" - -"nopt@^5.0.0": - "integrity" "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==" - "resolved" "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "abbrev" "1" - -"normalize-path@^3.0.0": - "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - "version" "3.0.0" - -"npm-run-path@^4.0.0": - "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" - "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "path-key" "^3.0.0" - -"npmlog@^5.0.1": - "integrity" "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==" - "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "are-we-there-yet" "^2.0.0" - "console-control-strings" "^1.1.0" - "gauge" "^3.0.0" - "set-blocking" "^2.0.0" - -"npmlog@^6.0.0": - "integrity" "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==" - "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "are-we-there-yet" "^3.0.0" - "console-control-strings" "^1.1.0" - "gauge" "^4.0.3" - "set-blocking" "^2.0.0" - -"object-assign@^4.0.1", "object-assign@^4.1.1": - "integrity" "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - "version" "4.1.1" - -"once@^1.3.0", "once@^1.3.1", "once@^1.4.0": - "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" - "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "wrappy" "1" - -"onetime@^5.1.0": - "integrity" "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==" - "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "mimic-fn" "^2.1.0" - -"optionator@^0.9.1": - "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" - "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" - "version" "0.9.1" - dependencies: - "deep-is" "^0.1.3" - "fast-levenshtein" "^2.0.6" - "levn" "^0.4.1" - "prelude-ls" "^1.2.1" - "type-check" "^0.4.0" - "word-wrap" "^1.2.3" - -"ora@^5.4.1": - "integrity" "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==" - "resolved" "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" - "version" "5.4.1" - dependencies: - "bl" "^4.1.0" - "chalk" "^4.1.0" - "cli-cursor" "^3.1.0" - "cli-spinners" "^2.5.0" - "is-interactive" "^1.0.0" - "is-unicode-supported" "^0.1.0" - "log-symbols" "^4.1.0" - "strip-ansi" "^6.0.0" - "wcwidth" "^1.0.1" - -"os-tmpdir@~1.0.2": - "integrity" "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" - "resolved" "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - "version" "1.0.2" - -"otplib@11.0.1": - "integrity" "sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ==" - "resolved" "https://registry.npmjs.org/otplib/-/otplib-11.0.1.tgz" - "version" "11.0.1" - dependencies: - "thirty-two" "1.0.2" - -"p-limit@^3.0.2": - "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "yocto-queue" "^0.1.0" - -"p-locate@^5.0.0": - "integrity" "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==" - "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "p-limit" "^3.0.2" - -"p-map@^1.1.1": - "integrity" "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" - "resolved" "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz" - "version" "1.2.0" - -"p-map@^4.0.0": - "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" - "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "aggregate-error" "^3.0.0" - -"parent-module@^1.0.0": - "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" - "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "callsites" "^3.0.0" - -"path-exists@^4.0.0": - "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - "version" "4.0.0" - -"path-is-absolute@^1.0.0": - "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - "version" "1.0.1" - -"path-is-inside@^1.0.1": - "integrity" "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - "resolved" "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" - "version" "1.0.2" - -"path-key@^3.0.0", "path-key@^3.1.0": - "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - "version" "3.1.1" - -"path-type@^4.0.0": - "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - "version" "4.0.0" - -"picomatch@^2.0.4", "picomatch@^2.3.1": - "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - "version" "2.3.1" - -"pify@^2.0.0": - "integrity" "sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - "version" "2.3.0" - -"pify@^3.0.0": - "integrity" "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" - "resolved" "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" - "version" "3.0.0" - -"pinkie-promise@^2.0.0": - "integrity" "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==" - "resolved" "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "pinkie" "^2.0.0" - -"pinkie@^2.0.0": - "integrity" "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" - "resolved" "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" - "version" "2.0.4" - -"prelude-ls@^1.2.1": - "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - "version" "1.2.1" - -"prettier@2.7.1": - "integrity" "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==" - "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" - "version" "2.7.1" - -"promise-inflight@^1.0.1": - "integrity" "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" - "resolved" "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" - "version" "1.0.1" - -"promise-retry@^2.0.1": - "integrity" "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==" - "resolved" "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "err-code" "^2.0.2" - "retry" "^0.12.0" - -"pump@^3.0.0": - "integrity" "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==" - "resolved" "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "end-of-stream" "^1.1.0" - "once" "^1.3.1" - -"punycode@^2.1.0": - "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - "version" "2.1.1" - -"qrcode-generator@^1.4.4": - "integrity" "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==" - "resolved" "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz" - "version" "1.4.4" - -"queue-microtask@^1.2.2": - "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - "version" "1.2.3" - -"readable-stream@^3.4.0", "readable-stream@^3.6.0": - "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - "version" "3.6.0" - dependencies: - "inherits" "^2.0.3" - "string_decoder" "^1.1.1" - "util-deprecate" "^1.0.1" - -"regexpp@^3.2.0": - "integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" - "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - "version" "3.2.0" - -"resolve-from@^4.0.0": - "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - "version" "4.0.0" - -"restore-cursor@^3.1.0": - "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" - "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "onetime" "^5.1.0" - "signal-exit" "^3.0.2" - -"retry@^0.12.0": - "integrity" "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" - "resolved" "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" - "version" "0.12.0" - -"reusify@^1.0.4": - "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - "version" "1.0.4" - -"rimraf@^2.2.8": - "integrity" "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" - "version" "2.6.2" - dependencies: - "glob" "^7.0.5" - -"rimraf@^2.6.1": - "integrity" "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" - "version" "2.6.2" - dependencies: - "glob" "^7.0.5" - -"rimraf@^3.0.2": - "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "glob" "^7.1.3" - -"rimraf@~2.4.0": - "integrity" "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz" - "version" "2.4.5" - dependencies: - "glob" "^6.0.1" - -"rlogin@^1.0.0": - "integrity" "sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==" - "resolved" "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz" - "version" "1.0.0" - -"rsvp@^4.8.4": - "integrity" "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" - "resolved" "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz" - "version" "4.8.5" - -"run-async@^2.4.0": - "integrity" "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" - "resolved" "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" - "version" "2.4.1" - -"run-parallel@^1.1.9": - "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" - "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "queue-microtask" "^1.2.2" - -"rxjs@^7.5.5": - "integrity" "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==" - "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz" - "version" "7.5.5" - dependencies: - "tslib" "^2.1.0" - -"safe-buffer@~5.1.0": - "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - "version" "5.1.2" - -"safe-json-stringify@~1": - "integrity" "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==" - "resolved" "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz" - "version" "1.2.0" - -"safer-buffer@^2.0.2", "safer-buffer@^2.1.0", "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", "safer-buffer@~2.1.0": - "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - "version" "2.1.2" - -"sane@5.0.1": - "integrity" "sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q==" - "resolved" "https://registry.npmjs.org/sane/-/sane-5.0.1.tgz" - "version" "5.0.1" + encoding "^0.1.12" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: + version "3.3.4" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" + integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== + dependencies: + yallist "^4.0.0" + +minizlib@^2.0.0, minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@~0.5.1: + version "0.5.6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +moment@2.29.4, moment@^2.19.3: + version "2.29.4" + resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== + +ms@2.1.2, ms@^2.0.0: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mv@~2: + version "2.1.1" + resolved "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz" + integrity "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==" + dependencies: + mkdirp "~0.5.1" + ncp "~2.0.0" + rimraf "~2.4.0" + +nan@^2.10.0, nan@^2.14.0, nan@^2.15.0, nan@^2.16.0: + version "2.16.0" + resolved "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz" + integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + +ncp@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz" + integrity "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==" + +negotiator@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +nntp-server@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/nntp-server/-/nntp-server-3.1.0.tgz" + integrity sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw== + dependencies: + debug "^4.3.3" + denque "^2.0.1" + serialize-error "^8.1.0" + split2 "^4.1.0" + +node-addon-api@^4.2.0: + version "4.3.0" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz" + integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== + +node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-gyp@8.x: + version "8.4.1" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + integrity "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + +node-pty@0.10.1: + version "0.10.1" + resolved "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz" + integrity sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg== + dependencies: + nan "^2.14.0" + +nodemailer@6.7.7: + version "6.7.7" + resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz" + integrity sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA== + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +object-assign@^4.0.1, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + dependencies: + mimic-fn "^2.1.0" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + integrity "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + +otplib@11.0.1: + version "11.0.1" + resolved "https://registry.npmjs.org/otplib/-/otplib-11.0.1.tgz" + integrity sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ== + dependencies: + thirty-two "1.0.2" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" + integrity "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picomatch@^2.0.4, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity "sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + integrity "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + integrity "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + integrity "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier@2.7.1: + version "2.7.1" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qrcode-generator@^1.4.4: + version "1.4.4" + resolved "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz" + integrity sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^2.2.8, rimraf@^2.6.1: + version "2.6.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" + integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== + dependencies: + glob "^7.0.5" + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rimraf@~2.4.0: + version "2.4.5" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz" + integrity "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==" + dependencies: + glob "^6.0.1" + +rlogin@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz" + integrity "sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==" + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.5.5: + version "7.5.5" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz" + integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== + dependencies: + tslib "^2.1.0" + +safe-buffer@~5.1.0: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-json-stringify@~1: + version "1.2.0" + resolved "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz" + integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/sane/-/sane-5.0.1.tgz" + integrity sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q== dependencies: "@cnakazawa/watch" "^1.0.3" - "anymatch" "^3.1.1" - "capture-exit" "^2.0.0" - "exec-sh" "^0.3.4" - "execa" "^4.0.0" - "fb-watchman" "^2.0.1" - "micromatch" "^4.0.2" - "minimist" "^1.1.1" - "walker" "~1.0.5" - -"sanitize-filename@^1.6.3": - "integrity" "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==" - "resolved" "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz" - "version" "1.6.3" - dependencies: - "truncate-utf8-bytes" "^1.0.0" - -"semver@^6.0.0": - "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - "version" "6.3.0" - -"semver@^7.3.5": - "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - "version" "7.3.7" - dependencies: - "lru-cache" "^6.0.0" - -"serialize-error@^8.1.0": - "integrity" "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==" - "resolved" "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz" - "version" "8.1.0" - dependencies: - "type-fest" "^0.20.2" - -"set-blocking@^2.0.0": - "integrity" "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - "version" "2.0.0" - -"shebang-command@^2.0.0": - "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" - "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "shebang-regex" "^3.0.0" - -"shebang-regex@^3.0.0": - "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - "version" "3.0.0" - -"signal-exit@^3.0.0", "signal-exit@^3.0.2", "signal-exit@^3.0.7": - "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - "version" "3.0.7" - -"slash@^3.0.0": - "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - "version" "3.0.0" - -"smart-buffer@^4.2.0": - "integrity" "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" - "resolved" "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" - "version" "4.2.0" - -"socks-proxy-agent@^6.0.0": - "integrity" "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==" - "resolved" "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz" - "version" "6.2.1" - dependencies: - "agent-base" "^6.0.2" - "debug" "^4.3.3" - "socks" "^2.6.2" - -"socks@^2.6.2": - "integrity" "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==" - "resolved" "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz" - "version" "2.7.0" - dependencies: - "ip" "^2.0.0" - "smart-buffer" "^4.2.0" - -"split2@^4.1.0": - "integrity" "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" - "resolved" "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz" - "version" "4.1.0" - -"sqlite3-trans@1.3.0": - "integrity" "sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg==" - "resolved" "https://registry.npmjs.org/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "lodash" "^4.17.15" - -"sqlite3@5.0.11": - "integrity" "sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA==" - "resolved" "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz" - "version" "5.0.11" + anymatch "^3.1.1" + capture-exit "^2.0.0" + exec-sh "^0.3.4" + execa "^4.0.0" + fb-watchman "^2.0.1" + micromatch "^4.0.2" + minimist "^1.1.1" + walker "~1.0.5" + +sanitize-filename@^1.6.3: + version "1.6.3" + resolved "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz" + integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== + dependencies: + truncate-utf8-bytes "^1.0.0" + +semver@^6.0.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.5: + version "7.3.7" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +serialize-error@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz" + integrity sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ== + dependencies: + type-fest "^0.20.2" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^6.0.0: + version "6.2.1" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz" + integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.7.0" + resolved "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz" + integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + +split2@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz" + integrity sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ== + +sqlite3-trans@1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz" + integrity sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg== + dependencies: + lodash "^4.17.15" + +sqlite3@5.0.11: + version "5.0.11" + resolved "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz" + integrity sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA== dependencies: "@mapbox/node-pre-gyp" "^1.0.0" - "node-addon-api" "^4.2.0" - "tar" "^6.1.11" + node-addon-api "^4.2.0" + tar "^6.1.11" optionalDependencies: - "node-gyp" "8.x" + node-gyp "8.x" -"ssh2@1.11.0": - "integrity" "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==" - "resolved" "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz" - "version" "1.11.0" +ssh2@1.11.0: + version "1.11.0" + resolved "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz" + integrity sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw== dependencies: - "asn1" "^0.2.4" - "bcrypt-pbkdf" "^1.0.2" + asn1 "^0.2.4" + bcrypt-pbkdf "^1.0.2" optionalDependencies: - "cpu-features" "~0.0.4" - "nan" "^2.16.0" - -"sshpk@^1.14.1": - "integrity" "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==" - "resolved" "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" - "version" "1.17.0" - dependencies: - "asn1" "~0.2.3" - "assert-plus" "^1.0.0" - "bcrypt-pbkdf" "^1.0.0" - "dashdash" "^1.12.0" - "ecc-jsbn" "~0.1.1" - "getpass" "^0.1.1" - "jsbn" "~0.1.0" - "safer-buffer" "^2.0.2" - "tweetnacl" "~0.14.0" - -"ssri@^8.0.0", "ssri@^8.0.1": - "integrity" "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==" - "resolved" "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" - "version" "8.0.1" - dependencies: - "minipass" "^3.1.1" - -"string_decoder@^1.1.1": - "integrity" "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "safe-buffer" "~5.1.0" - -"string-width@^1.0.2 || 2 || 3 || 4", "string-width@^4.1.0", "string-width@^4.2.3": - "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - "version" "4.2.3" - dependencies: - "emoji-regex" "^8.0.0" - "is-fullwidth-code-point" "^3.0.0" - "strip-ansi" "^6.0.1" - -"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": - "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "ansi-regex" "^5.0.1" - -"strip-final-newline@^2.0.0": - "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - "version" "2.0.0" - -"strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1": - "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - "version" "3.1.1" - -"supports-color@^7.1.0": - "integrity" "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz" - "version" "7.1.0" - dependencies: - "has-flag" "^4.0.0" - -"systeminformation@5.12.3": - "integrity" "sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A==" - "resolved" "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.3.tgz" - "version" "5.12.3" - -"tar@^6.0.2", "tar@^6.1.11", "tar@^6.1.2": - "integrity" "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==" - "resolved" "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" - "version" "6.1.11" - dependencies: - "chownr" "^2.0.0" - "fs-minipass" "^2.0.0" - "minipass" "^3.0.0" - "minizlib" "^2.1.1" - "mkdirp" "^1.0.3" - "yallist" "^4.0.0" - -"telnet-socket@0.2.4": - "integrity" "sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ==" - "resolved" "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz" - "version" "0.2.4" - dependencies: - "binary-parser" "1.6.2" - "buffers" "github:NuSkooler/node-buffers" - -"temptmp@^1.1.0": - "integrity" "sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ==" - "resolved" "https://registry.npmjs.org/temptmp/-/temptmp-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "del" "^3.0.0" - -"text-table@^0.2.0": - "integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - "version" "0.2.0" - -"thirty-two@1.0.2": - "integrity" "sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==" - "resolved" "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz" - "version" "1.0.2" - -"through@^2.3.6": - "integrity" "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - "version" "2.3.8" - -"tmp@^0.0.33": - "integrity" "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==" - "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" - "version" "0.0.33" - dependencies: - "os-tmpdir" "~1.0.2" - -"tmpl@1.0.x": - "integrity" "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - "resolved" "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" - "version" "1.0.5" - -"to-regex-range@^5.0.1": - "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" - "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "is-number" "^7.0.0" - -"tr46@~0.0.3": - "integrity" "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - "version" "0.0.3" - -"truncate-utf8-bytes@^1.0.0": - "integrity" "sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==" - "resolved" "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "utf8-byte-length" "^1.0.1" - -"tslib@^2.1.0": - "integrity" "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" - "version" "2.3.1" - -"tweetnacl@^0.14.3", "tweetnacl@~0.14.0": - "integrity" "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - "resolved" "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" - "version" "0.14.5" - -"type-check@^0.4.0", "type-check@~0.4.0": - "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" - "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - "version" "0.4.0" - dependencies: - "prelude-ls" "^1.2.1" - -"type-fest@^0.20.2": - "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - "version" "0.20.2" - -"type-fest@^0.5.2": - "integrity" "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz" - "version" "0.5.2" - -"unique-filename@^1.1.1": - "integrity" "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==" - "resolved" "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "unique-slug" "^2.0.0" - -"unique-slug@^2.0.0": - "integrity" "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==" - "resolved" "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "imurmurhash" "^0.1.4" - -"universalify@^1.0.0": - "integrity" "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" - "resolved" "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz" - "version" "1.0.0" - -"universalify@^2.0.0": - "integrity" "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - "resolved" "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" - "version" "2.0.0" - -"uri-js@^4.2.2": - "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" - "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - "version" "4.4.1" - dependencies: - "punycode" "^2.1.0" - -"utf8-byte-length@^1.0.1": - "integrity" "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - "resolved" "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz" - "version" "1.0.4" - -"util-deprecate@^1.0.1": - "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - "version" "1.0.2" - -"uuid-parse@1.1.0": - "integrity" "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==" - "resolved" "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz" - "version" "1.1.0" - -"uuid@8.3.2": - "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - "version" "8.3.2" - -"v8-compile-cache@^2.0.3": - "integrity" "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==" - "resolved" "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz" - "version" "2.1.1" - -"verror@1.10.0": - "integrity" "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==" - "resolved" "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" - "version" "1.10.0" - dependencies: - "assert-plus" "^1.0.0" - "core-util-is" "1.0.2" - "extsprintf" "^1.2.0" - -"walker@~1.0.5": - "integrity" "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==" - "resolved" "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz" - "version" "1.0.7" - dependencies: - "makeerror" "1.0.x" - -"wcwidth@^1.0.1": - "integrity" "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==" - "resolved" "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "defaults" "^1.0.3" - -"webidl-conversions@^3.0.0": - "integrity" "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - "version" "3.0.1" - -"whatwg-url@^5.0.0": - "integrity" "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==" - "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "tr46" "~0.0.3" - "webidl-conversions" "^3.0.0" - -"which@^2.0.1", "which@^2.0.2": - "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" - "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "isexe" "^2.0.0" - -"wide-align@^1.1.2", "wide-align@^1.1.5": - "integrity" "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==" - "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" - "version" "1.1.5" - dependencies: - "string-width" "^1.0.2 || 2 || 3 || 4" - -"word-wrap@^1.2.3": - "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - "version" "1.2.3" - -"wrappy@1": - "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - "version" "1.0.2" - -"ws@7.5.9": - "integrity" "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" - "resolved" "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" - "version" "7.5.9" - -"yallist@^4.0.0": - "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - "version" "4.0.0" - -"yazl@^2.5.1": - "integrity" "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==" - "resolved" "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz" - "version" "2.5.1" - dependencies: - "buffer-crc32" "~0.2.3" - -"yocto-queue@^0.1.0": - "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - "version" "0.1.0" + cpu-features "~0.0.4" + nan "^2.16.0" + +sshpk@^1.14.1: + version "1.17.0" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz" + integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + +systeminformation@5.12.3: + version "5.12.3" + resolved "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.3.tgz" + integrity sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A== + +tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: + version "6.1.11" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +telnet-socket@0.2.4: + version "0.2.4" + resolved "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz" + integrity sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ== + dependencies: + binary-parser "1.6.2" + buffers "github:NuSkooler/node-buffers" + +temptmp@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/temptmp/-/temptmp-1.1.0.tgz" + integrity sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ== + dependencies: + del "^3.0.0" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + +thirty-two@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz" + integrity "sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + integrity "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmpl@1.0.x: + version "1.0.5" + resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +truncate-utf8-bytes@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz" + integrity "sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==" + dependencies: + utf8-byte-length "^1.0.1" + +tslib@^2.1.0: + version "2.3.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + integrity "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz" + integrity sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw== + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +utf8-byte-length@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz" + integrity "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + +uuid-parse@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz" + integrity sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A== + +uuid@8.3.2: + version "8.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache@^2.0.3: + version "2.1.1" + resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz" + integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz" + integrity "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==" + dependencies: + makeerror "1.0.x" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + integrity "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==" + dependencies: + defaults "^1.0.3" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.2, wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + +ws@7.5.9: + version "7.5.9" + resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yazl@^2.5.1: + version "2.5.1" + resolved "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz" + integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw== + dependencies: + buffer-crc32 "~0.2.3" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From fb5858e90f1d9bbb571a7c4768781703da08a1a0 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 2 Jan 2023 16:57:27 -0700 Subject: [PATCH 019/233] dev updates --- package.json | 4 +- yarn.lock | 173 +++++++++++++++++---------------------------------- 2 files changed, 60 insertions(+), 117 deletions(-) diff --git a/package.json b/package.json index 79c623e05..2804554d5 100644 --- a/package.json +++ b/package.json @@ -70,9 +70,9 @@ "yazl": "^2.5.1" }, "devDependencies": { - "eslint": "8.21.0", + "eslint": "8.31.0", "eslint-config-prettier": "^8.5.0", - "prettier": "2.7.1" + "prettier": "2.8.1" }, "engines": { "node": ">=14" diff --git a/yarn.lock b/yarn.lock index c0ac52600..ba92ffae5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,15 +15,15 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@eslint/eslintrc@^1.3.0": - version "1.3.0" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz" - integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== +"@eslint/eslintrc@^1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" + integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.3.2" - globals "^13.15.0" + espree "^9.4.0" + globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" js-yaml "^4.1.0" @@ -35,19 +35,19 @@ resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== -"@humanwhocodes/config-array@^0.10.4": - version "0.10.4" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz" - integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== +"@humanwhocodes/config-array@^0.11.8": + version "0.11.8" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" + integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" - minimatch "^3.0.4" + minimatch "^3.0.5" -"@humanwhocodes/gitignore-to-minimatch@^1.0.2": - version "1.0.2" - resolved "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz" - integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" @@ -77,14 +77,14 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@2.0.5": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3": +"@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -226,11 +226,6 @@ array-union@^1.0.1: dependencies: array-uniq "^1.0.1" -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" @@ -556,13 +551,6 @@ detect-libc@^2.0.0: resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - doctrine@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" @@ -663,14 +651,15 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@8.21.0: - version "8.21.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz" - integrity sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA== +eslint@8.31.0: + version "8.31.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.31.0.tgz#75028e77cbcff102a9feae1d718135931532d524" + integrity sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA== dependencies: - "@eslint/eslintrc" "^1.3.0" - "@humanwhocodes/config-array" "^0.10.4" - "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" + "@eslint/eslintrc" "^1.4.1" + "@humanwhocodes/config-array" "^0.11.8" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -680,21 +669,21 @@ eslint@8.21.0: eslint-scope "^7.1.1" eslint-utils "^3.0.0" eslint-visitor-keys "^3.3.0" - espree "^9.3.3" + espree "^9.4.0" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" find-up "^5.0.0" - functional-red-black-tree "^1.0.1" - glob-parent "^6.0.1" - globals "^13.15.0" - globby "^11.1.0" + glob-parent "^6.0.2" + globals "^13.19.0" grapheme-splitter "^1.0.4" ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" @@ -706,12 +695,11 @@ eslint@8.21.0: strip-ansi "^6.0.1" strip-json-comments "^3.1.0" text-table "^0.2.0" - v8-compile-cache "^2.0.3" -espree@^9.3.2, espree@^9.3.3: - version "9.3.3" - resolved "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz" - integrity sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng== +espree@^9.4.0: + version "9.4.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== dependencies: acorn "^8.8.0" acorn-jsx "^5.3.2" @@ -785,17 +773,6 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" @@ -883,11 +860,6 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" - integrity "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" - gauge@^3.0.0: version "3.0.2" resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" @@ -931,16 +903,9 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.1: +glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" @@ -1003,25 +968,13 @@ glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^13.15.0: - version "13.17.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" - integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== +globals@^13.19.0: + version "13.19.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8" + integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ== dependencies: type-fest "^0.20.2" -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - globby@^6.1.0: version "6.1.0" resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" @@ -1210,7 +1163,7 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: +is-glob@^4.0.0, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -1251,6 +1204,11 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + is-stream@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" @@ -1266,6 +1224,11 @@ isexe@^2.0.0: resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" +js-sdsl@^4.1.4: + version "4.2.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" + integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== + js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" @@ -1403,12 +1366,7 @@ merge-stream@^2.0.0: resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@^4.0.2: version "4.0.5" resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -1433,7 +1391,7 @@ mimic-fn@^2.1.0: resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -1767,11 +1725,6 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - picomatch@^2.0.4, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" @@ -1804,10 +1757,10 @@ prelude-ls@^1.2.1: resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier@2.7.1: - version "2.7.1" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== +prettier@2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" + integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== promise-inflight@^1.0.1: version "1.0.1" @@ -2010,11 +1963,6 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7: resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - smart-buffer@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" @@ -2289,11 +2237,6 @@ uuid@8.3.2: resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-compile-cache@^2.0.3: - version "2.1.1" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz" - integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== - verror@1.10.0: version "1.10.0" resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" From 99e9ebbec99362d69c7a8b936e450187a1775617 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 2 Jan 2023 22:25:32 -0700 Subject: [PATCH 020/233] Utility, cleanup, etc. --- .../servers/content/web_handlers/webfinger.js | 45 +++++++++---------- core/web_handler_module.js | 17 +++++++ 2 files changed, 37 insertions(+), 25 deletions(-) diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index a5caa91ca..146b3aaa1 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -1,8 +1,6 @@ const WebHandlerModule = require('../../../web_handler_module'); const Config = require('../../../config').get; const { Errors, ErrorReasons } = require('../../../enig_error'); - -const WebServerPackageName = require('../web').moduleInfo.packageName; const { WellKnownLocations } = require('../web'); const _ = require('lodash'); @@ -35,7 +33,7 @@ Achievement Points: %ACHIEVEMENT_POINTS% // // WebFinger: https://www.rfc-editor.org/rfc/rfc7033 // -exports.getModule = class WebFingerServerModule extends WebHandlerModule { +exports.getModule = class WebFingerWebHandler extends WebHandlerModule { constructor() { super(); } @@ -43,20 +41,17 @@ exports.getModule = class WebFingerServerModule extends WebHandlerModule { init(cb) { const config = Config(); - if (!_.get(config, 'contentServers.web.handlers.webFinger.enabled')) { + if (!WebHandlerModule.isEnabled('webFinger')) { return cb(null); } - const { getServer } = require('../../../listening_server'); - // we rely on the web server - this.webServer = getServer(WebServerPackageName); - const ws = this._webServer(); - if (!ws || !ws.isEnabled()) { + this.webServer = WebHandlerModule.getWebServer(); + if (!this.webServer || !this.webServer.isEnabled()) { return cb(Errors.UnexpectedState('Cannot access web server!')); } - const domain = ws.getDomain(); + const domain = this.webServer.getDomain(); if (!domain) { return cb(Errors.UnexpectedState('Web server does not have "domain" set')); } @@ -67,21 +62,25 @@ exports.getModule = class WebFingerServerModule extends WebHandlerModule { new RegExp(`^acct:(.+)@${domain}$`), // profile page // https://webfinger.net/rel/profile-page/ - new RegExp(`^${ws.buildUrl(WellKnownLocations.Internal + '/wf/@')}(.+)$`), + new RegExp( + `^${this.webServer.buildUrl(WellKnownLocations.Internal + '/wf/@')}(.+)$` + ), // self URL new RegExp( - `^${ws.buildUrl(WellKnownLocations.Internal + '/ap/users/')}(.+)$` + `^${this.webServer.buildUrl( + WellKnownLocations.Internal + '/ap/users/' + )}(.+)$` ), ]; - ws.addRoute({ + this.webServer.addRoute({ method: 'GET', // https://www.rfc-editor.org/rfc/rfc7033.html#section-10.1 path: /^\/\.well-known\/webfinger\/?\?/, handler: this._webFingerRequestHandler.bind(this), }); - ws.addRoute({ + this.webServer.addRoute({ method: 'GET', path: /^\/_enig\/wf\/@.+$/, handler: this._profileRequestHandler.bind(this), @@ -90,10 +89,6 @@ exports.getModule = class WebFingerServerModule extends WebHandlerModule { return cb(null); } - _webServer() { - return this.webServer.instance; - } - _profileRequestHandler(req, resp) { const url = new URL(req.url, `https://${req.headers.host}`); @@ -174,7 +169,7 @@ exports.getModule = class WebFingerServerModule extends WebHandlerModule { 'contentServers.web.handlers.webFinger.profileTemplate' ); if (templateFile) { - templateFile = this._webServer().resolveTemplatePath(templateFile); + templateFile = this.webServer.resolveTemplatePath(templateFile); } fs.readFile(templateFile || '', 'utf8', (err, data) => { if (err) { @@ -196,7 +191,7 @@ exports.getModule = class WebFingerServerModule extends WebHandlerModule { const resource = url.searchParams.get('resource'); if (!resource) { - return this._webServer().respondWithError( + return this.webServer.respondWithError( resp, 400, '"resource" is required', @@ -218,7 +213,7 @@ exports.getModule = class WebFingerServerModule extends WebHandlerModule { return Log.warn({ error: err.message }, `WebFinger failed: ${req.url}`); } - const domain = this._webServer().getDomain(); + const domain = this.webServer.getDomain(); const body = JSON.stringify({ subject: `acct:${user.username}@${domain}`, @@ -241,7 +236,7 @@ exports.getModule = class WebFingerServerModule extends WebHandlerModule { } _profileUrl(user) { - return this._webServer().buildUrl( + return this.webServer.buildUrl( WellKnownLocations.Internal + `/wf/@${user.username}` ); } @@ -256,7 +251,7 @@ exports.getModule = class WebFingerServerModule extends WebHandlerModule { } _selfUrl(user) { - return this._webServer().buildUrl( + return this.webServer.buildUrl( WellKnownLocations.Internal + `/ap/users/${user.username}` ); } @@ -275,7 +270,7 @@ exports.getModule = class WebFingerServerModule extends WebHandlerModule { _subscribeLink() { return { rel: 'http://ostatus.org/schema/1.0/subscribe', - template: this._webServer().buildUrl( + template: this.webServer.buildUrl( WellKnownLocations.Internal + '/ap/authorize_interaction?uri={uri}' ), }; @@ -291,7 +286,7 @@ exports.getModule = class WebFingerServerModule extends WebHandlerModule { } _notFound(resp) { - this._webServer().respondWithError( + this.webServer.respondWithError( resp, 404, 'Resource not found', diff --git a/core/web_handler_module.js b/core/web_handler_module.js index e2d1fc6f0..b666c9338 100644 --- a/core/web_handler_module.js +++ b/core/web_handler_module.js @@ -1,4 +1,5 @@ const { PluginModule } = require('./plugin_module'); +const Config = require('./config').get; module.exports = class WebHandlerModule extends PluginModule { constructor(options) { @@ -9,4 +10,20 @@ module.exports = class WebHandlerModule extends PluginModule { // to be implemented! return cb(null); } + + static isEnabled(handlerName) { + const config = Config(); + const handlers = config.contentServers?.web?.handlers; + return handlers && true === handlers[handlerName]?.enabled; + } + + static getWebServer() { + const { getServer } = require('./listening_server'); + const WebServerPackageName = require('./servers/content/web').moduleInfo + .packageName; + const ws = getServer(WebServerPackageName); + if (ws) { + return ws.instance; + } + } }; From 127e9794ee68dbd9a92970d8a828f6ffa2266532 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Tue, 3 Jan 2023 15:10:39 -0700 Subject: [PATCH 021/233] Central check for enable/disabled web handlers, added some utility functions, etc. --- core/activitypub_util.js | 9 +++++++++ core/servers/content/web.js | 11 ++++++++--- core/servers/content/web_handlers/webfinger.js | 11 +++-------- 3 files changed, 20 insertions(+), 11 deletions(-) create mode 100644 core/activitypub_util.js diff --git a/core/activitypub_util.js b/core/activitypub_util.js new file mode 100644 index 000000000..68072a2f9 --- /dev/null +++ b/core/activitypub_util.js @@ -0,0 +1,9 @@ +const { WellKnownLocations } = require('./servers/content/web'); + +exports.buildSelfUrl = buildSelfUrl; + +function buildSelfUrl(webServer, user, relPrefix) { + return webServer.buildUrl( + WellKnownLocations.Internal + `${relPrefix}${user.username}` + ); +} diff --git a/core/servers/content/web.js b/core/servers/content/web.js index 7b471dadc..cbed4dde0 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -5,7 +5,9 @@ const Log = require('../../logger.js').log; const ServerModule = require('../../server_module.js').ServerModule; const Config = require('../../config.js').get; -const { Errors } = require('../../enig_error.js'); +const { Errors, ErrorReasons } = require('../../enig_error.js'); +const { loadModulesForCategory, moduleCategories } = require('../../module_util'); +const WebHandlerModule = require('../../web_handler_module'); // deps const http = require('http'); @@ -17,8 +19,6 @@ const mimeTypes = require('mime-types'); const forEachSeries = require('async/forEachSeries'); const findSeries = require('async/findSeries'); -const { loadModulesForCategory, moduleCategories } = require('../../module_util'); - const ModuleInfo = (exports.moduleInfo = { name: 'Web', desc: 'Web Server', @@ -166,6 +166,11 @@ exports.getModule = class WebServerModule extends ServerModule { (module, nextModule) => { const moduleInst = new module.getModule(); try { + const normalizedName = _.camelCase(module.moduleInfo.name); + if (!WebHandlerModule.isEnabled(normalizedName)) { + return nextModule(null); + } + moduleInst.init(err => { return nextModule(err); }); diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index 146b3aaa1..e7e95353d 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -2,6 +2,7 @@ const WebHandlerModule = require('../../../web_handler_module'); const Config = require('../../../config').get; const { Errors, ErrorReasons } = require('../../../enig_error'); const { WellKnownLocations } = require('../web'); +const { buildSelfUrl } = require('../../../activitypub_util'); const _ = require('lodash'); const User = require('../../../user'); @@ -17,7 +18,7 @@ exports.moduleInfo = { name: 'WebFinger', desc: 'A simple WebFinger Handler.', author: 'NuSkooler, CognitiveGears', - packageName: 'codes.l33t.enigma.web.handler.finger', + packageName: 'codes.l33t.enigma.web.handler.webfinger', }; // :TODO: more info in default @@ -41,10 +42,6 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { init(cb) { const config = Config(); - if (!WebHandlerModule.isEnabled('webFinger')) { - return cb(null); - } - // we rely on the web server this.webServer = WebHandlerModule.getWebServer(); if (!this.webServer || !this.webServer.isEnabled()) { @@ -251,9 +248,7 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { } _selfUrl(user) { - return this.webServer.buildUrl( - WellKnownLocations.Internal + `/ap/users/${user.username}` - ); + return buildSelfUrl(this.webServer, user, '/ap/users/'); } // :TODO: only if ActivityPub is enabled From 6cea4269b22b777b9be2e065801e8b3f4302dde3 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Tue, 3 Jan 2023 20:32:09 -0700 Subject: [PATCH 022/233] More utils, tidy, and activitypub.js added --- core/activitypub_util.js | 42 +++++++- core/servers/content/web.js | 2 +- .../content/web_handlers/activitypub.js | 95 +++++++++++++++++++ .../servers/content/web_handlers/webfinger.js | 58 +++-------- 4 files changed, 150 insertions(+), 47 deletions(-) create mode 100644 core/servers/content/web_handlers/activitypub.js diff --git a/core/activitypub_util.js b/core/activitypub_util.js index 68072a2f9..90ee210a9 100644 --- a/core/activitypub_util.js +++ b/core/activitypub_util.js @@ -1,9 +1,47 @@ const { WellKnownLocations } = require('./servers/content/web'); +const User = require('./user'); +const { Errors } = require('./enig_error'); +const UserProps = require('./user_property'); -exports.buildSelfUrl = buildSelfUrl; +exports.makeUserUrl = makeUserUrl; +exports.webFingerProfileUrl = webFingerProfileUrl; +exports.selfUrl = selfUrl; +exports.userFromAccount = userFromAccount; -function buildSelfUrl(webServer, user, relPrefix) { +function makeUserUrl(webServer, user, relPrefix) { return webServer.buildUrl( WellKnownLocations.Internal + `${relPrefix}${user.username}` ); } + +function webFingerProfileUrl(webServer, user) { + return webServer.buildUrl(WellKnownLocations.Internal + `/wf/@${user.username}`); +} + +function selfUrl(webServer, user) { + return makeUserUrl(webServer, user, '/ap/users/'); +} + +function userFromAccount(accountName, cb) { + User.getUserIdAndName(accountName, (err, userId) => { + if (err) { + return cb(err); + } + + User.getUser(userId, (err, user) => { + if (err) { + return cb(err); + } + + const accountStatus = user.getPropertyAsNumber(UserProps.AccountStatus); + if ( + User.AccountStatus.disabled == accountStatus || + User.AccountStatus.inactive == accountStatus + ) { + return cb(Errors.AccessDenied('Account disabled', ErrorReasons.Disabled)); + } + + return cb(null, user); + }); + }); +} diff --git a/core/servers/content/web.js b/core/servers/content/web.js index cbed4dde0..90fea57cb 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -175,7 +175,7 @@ exports.getModule = class WebServerModule extends ServerModule { return nextModule(err); }); } catch (e) { - logger.log.error(e, 'Exception caught web handler!'); + Log.error(e, 'Exception caught web handler!'); return nextModule(e); } }, diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js new file mode 100644 index 000000000..4c7a65b7f --- /dev/null +++ b/core/servers/content/web_handlers/activitypub.js @@ -0,0 +1,95 @@ +const WebHandlerModule = require('../../../web_handler_module'); +const { + makeUserUrl, + webFingerProfileUrl, + selfUrl, + userFromAccount, +} = require('../../../activitypub_util'); +const UserProps = require('../../../user_property'); +const { Errors } = require('../../../enig_error'); + +exports.moduleInfo = { + name: 'ActivityPub', + desc: 'Provides ActivityPub support', + author: 'NuSkooler, CognitiveGears', + packageName: 'codes.l33t.enigma.web.handler.activitypub', +}; + +exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { + constructor() { + super(); + } + + init(cb) { + this.webServer = WebHandlerModule.getWebServer(); + if (!this.webServer) { + return cb(Errors.UnexpectedState('Cannot access web server!')); + } + + this.webServer.addRoute({ + method: 'GET', + path: /^\/_enig\/ap\/users\/.+$/, + handler: this._selfUrlRequestHandler.bind(this), + }); + + return cb(null); + } + + _selfUrlRequestHandler(req, resp) { + const accept = req.headers['accept'] || '*/*'; + if (accept === 'application/activity+json') { + return this._selfActorHandler(req, resp); + } + } + + _selfActorHandler(req, resp) { + const url = new URL(req.url, `https://${req.headers.host}`); + const accountName = url.pathname.substring(url.pathname.lastIndexOf('/') + 1); + + userFromAccount(accountName, (err, user) => { + if (err) { + return this._notFound(resp); + } + + const body = JSON.stringify({ + '@context': [ + 'https://www.w3.org/ns/activitystreams', + 'https://w3id.org/security/v1', + ], + id: selfUrl(this.webServer, user), + type: 'Person', + preferredUsername: user.username, + name: user.getSanitizedName('real'), + endpoints: { + sharedInbox: 'TODO', + }, + inbox: makeUserUrl(this.webServer, user, '/ap/users') + '/outbox', + outbox: makeUserUrl(this.webServer, user, '/ap/users') + '/inbox', + followers: makeUserUrl(this.webServer, user, '/ap/users') + '/followers', + following: makeUserUrl(this.webServer, user, '/ap/users') + '/following', + summary: user.getProperty(UserProps.AutoSignature) || '', + url: webFingerProfileUrl(this.webServer, user), + publicKey: {}, + + // :TODO: we can start to define BBS related stuff with the community perhaps + }); + + const headers = { + 'Content-Type': 'application/activity+json', + 'Content-Length': body.length, + }; + + resp.writeHead(200, headers); + return resp.end(body); + }); + } + + _notFound(resp) { + this.webServer.respondWithError( + resp, + 404, + 'Resource not found', + 'Resource Not Found' + ); + } +}; diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index e7e95353d..3f83da9a9 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -2,7 +2,11 @@ const WebHandlerModule = require('../../../web_handler_module'); const Config = require('../../../config').get; const { Errors, ErrorReasons } = require('../../../enig_error'); const { WellKnownLocations } = require('../web'); -const { buildSelfUrl } = require('../../../activitypub_util'); +const { + selfUrl, + webFingerProfileUrl, + userFromAccount, +} = require('../../../activitypub_util'); const _ = require('lodash'); const User = require('../../../user'); @@ -44,7 +48,7 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { // we rely on the web server this.webServer = WebHandlerModule.getWebServer(); - if (!this.webServer || !this.webServer.isEnabled()) { + if (!this.webServer) { return cb(Errors.UnexpectedState('Cannot access web server!')); } @@ -107,13 +111,10 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { const accountName = resource.substring(userPosition + 1); - this._getUser(accountName, resp, (err, user) => { + userFromAccount(accountName, (err, user) => { if (err) { - // |resp| already written to - return Log.warn( - { error: err.message }, - `Profile request failed: ${req.url}` - ); + Log.warn({ error: err.message }, `Profile request failed: ${req.url}`); + return this._notFound(resp); } this._getProfileTemplate((template, mimeType) => { @@ -204,10 +205,10 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { ); } - this._getUser(accountName, resp, (err, user) => { + userFromAccount(accountName, (err, user) => { if (err) { - // |resp| already written to - return Log.warn({ error: err.message }, `WebFinger failed: ${req.url}`); + Log.warn({ error: err.message }, `WebFinger failed: ${req.url}`); + return this._notFound(resp); } const domain = this.webServer.getDomain(); @@ -233,9 +234,7 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { } _profileUrl(user) { - return this.webServer.buildUrl( - WellKnownLocations.Internal + `/wf/@${user.username}` - ); + return webFingerProfileUrl(this.webServer, user); } _profilePageLink(user) { @@ -248,7 +247,7 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { } _selfUrl(user) { - return buildSelfUrl(this.webServer, user, '/ap/users/'); + return selfUrl(this.webServer, user); } // :TODO: only if ActivityPub is enabled @@ -288,33 +287,4 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { 'Resource Not Found' ); } - - _getUser(accountName, resp, cb) { - User.getUserIdAndName(accountName, (err, userId) => { - if (err) { - this._notFound(resp); - return cb(err); - } - - User.getUser(userId, (err, user) => { - if (err) { - this._notFound(resp); - return cb(err); - } - - const accountStatus = user.getPropertyAsNumber(UserProps.AccountStatus); - if ( - User.AccountStatus.disabled == accountStatus || - User.AccountStatus.inactive == accountStatus - ) { - this._notFound(resp); - return cb( - Errors.AccessDenied('Account disabled', ErrorReasons.Disabled) - ); - } - - return cb(null, user); - }); - }); - } }; From d4f74447ec3d60020011e61dd181a8256acab8be Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Tue, 3 Jan 2023 20:42:36 -0700 Subject: [PATCH 023/233] Skeleton work --- core/servers/content/web_handlers/activitypub.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 4c7a65b7f..a8c53efd9 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -38,11 +38,13 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { _selfUrlRequestHandler(req, resp) { const accept = req.headers['accept'] || '*/*'; if (accept === 'application/activity+json') { - return this._selfActorHandler(req, resp); + return this._selfAsActorHandler(req, resp); } + + return this._standardSelfHandler(req, resp); } - _selfActorHandler(req, resp) { + _selfAsActorHandler(req, resp) { const url = new URL(req.url, `https://${req.headers.host}`); const accountName = url.pathname.substring(url.pathname.lastIndexOf('/') + 1); @@ -84,6 +86,11 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } + _standardSelfHandler(req, resp) { + // :TODO: this should also be their profile page?! Perhaps that should also be shared... + return this._notFound(resp); + } + _notFound(resp) { this.webServer.respondWithError( resp, From 5055337eff4ecf63feef882925cedcca213bb860 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 4 Jan 2023 20:29:18 -0700 Subject: [PATCH 024/233] Hand back a profile for self --- core/activitypub_util.js | 92 ++++++++++++++ core/servers/content/web.js | 2 +- .../content/web_handlers/activitypub.js | 116 +++++++++++------- .../servers/content/web_handlers/webfinger.js | 108 +++++----------- 4 files changed, 195 insertions(+), 123 deletions(-) diff --git a/core/activitypub_util.js b/core/activitypub_util.js index 90ee210a9..1ccb27ac9 100644 --- a/core/activitypub_util.js +++ b/core/activitypub_util.js @@ -3,10 +3,32 @@ const User = require('./user'); const { Errors } = require('./enig_error'); const UserProps = require('./user_property'); +// deps +const _ = require('lodash'); +const mimeTypes = require('mime-types'); +const waterfall = require('async/waterfall'); +const fs = require('graceful-fs'); +const paths = require('path'); +const moment = require('moment'); + exports.makeUserUrl = makeUserUrl; exports.webFingerProfileUrl = webFingerProfileUrl; exports.selfUrl = selfUrl; exports.userFromAccount = userFromAccount; +exports.getUserProfileTemplatedBody = getUserProfileTemplatedBody; + +// :TODO: more info in default +// this profile template is the *default* for both WebFinger +// profiles and 'self' requests without the +// Accept: application/activity+json headers present +exports.DefaultProfileTemplate = ` +User information for: %USERNAME% + +Real Name: %REAL_NAME% +Login Count: %LOGIN_COUNT% +Affiliations: %AFFILIATIONS% +Achievement Points: %ACHIEVEMENT_POINTS% +`; function makeUserUrl(webServer, user, relPrefix) { return webServer.buildUrl( @@ -45,3 +67,73 @@ function userFromAccount(accountName, cb) { }); }); } + +function getUserProfileTemplatedBody( + templateFile, + user, + defaultTemplate, + defaultContentType, + cb +) { + const Log = require('./logger').log; + const Config = require('./config').get; + + waterfall( + [ + callback => { + return fs.readFile(templateFile || '', 'utf8', (err, template) => { + return callback(null, template); + }); + }, + (template, callback) => { + if (!template) { + if (templateFile) { + Log.warn(`Failed to load profile template "${templateFile}"`); + } + return callback(null, defaultTemplate, defaultContentType); + } + + const contentType = mimeTypes.contentType(paths.basename(templateFile)); + return callback(null, template, contentType); + }, + (template, contentType, callback) => { + const up = (p, na = 'N/A') => { + return user.getProperty(p) || na; + }; + + let birthDate = up(UserProps.Birthdate); + if (moment.isDate(birthDate)) { + birthDate = moment(birthDate); + } + + const varMap = { + USERNAME: user.username, + REAL_NAME: user.getSanitizedName('real'), + SEX: up(UserProps.Sex), + BIRTHDATE: birthDate, + AGE: user.getAge(), + LOCATION: up(UserProps.Location), + AFFILIATIONS: up(UserProps.Affiliations), + EMAIL: up(UserProps.EmailAddress), + WEB_ADDRESS: up(UserProps.WebAddress), + ACCOUNT_CREATED: moment(user.getProperty(UserProps.AccountCreated)), + LAST_LOGIN: moment(user.getProperty(UserProps.LastLoginTs)), + LOGIN_COUNT: up(UserProps.LoginCount), + ACHIEVEMENT_COUNT: up(UserProps.AchievementTotalCount, '0'), + ACHIEVEMENT_POINTS: up(UserProps.AchievementTotalPoints, '0'), + BOARDNAME: Config().general.boardName, + }; + + let body = template; + _.each(varMap, (val, varName) => { + body = body.replace(new RegExp(`%${varName}%`, 'g'), val); + }); + + return callback(null, body, contentType); + }, + ], + (err, data, contentType) => { + return cb(err, data, contentType); + } + ); +} diff --git a/core/servers/content/web.js b/core/servers/content/web.js index 90fea57cb..6631ea5cd 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -317,8 +317,8 @@ exports.getModule = class WebServerModule extends ServerModule { req.url.substr(req.url.lastIndexOf('/', 1)), tryFile ); - const filePath = this.resolveStaticPath(fileName); + const filePath = this.resolveStaticPath(fileName); fs.stat(filePath, (err, stats) => { if (err || !stats.isFile()) { return nextTryFile(null, false); diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index a8c53efd9..470adecc3 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -4,9 +4,15 @@ const { webFingerProfileUrl, selfUrl, userFromAccount, + getUserProfileTemplatedBody, + DefaultProfileTemplate, } = require('../../../activitypub_util'); const UserProps = require('../../../user_property'); const { Errors } = require('../../../enig_error'); +const Config = require('../../../config').get; + +// deps +const _ = require('lodash'); exports.moduleInfo = { name: 'ActivityPub', @@ -36,15 +42,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _selfUrlRequestHandler(req, resp) { - const accept = req.headers['accept'] || '*/*'; - if (accept === 'application/activity+json') { - return this._selfAsActorHandler(req, resp); - } - - return this._standardSelfHandler(req, resp); - } - - _selfAsActorHandler(req, resp) { const url = new URL(req.url, `https://${req.headers.host}`); const accountName = url.pathname.substring(url.pathname.lastIndexOf('/') + 1); @@ -53,42 +50,77 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this._notFound(resp); } - const body = JSON.stringify({ - '@context': [ - 'https://www.w3.org/ns/activitystreams', - 'https://w3id.org/security/v1', - ], - id: selfUrl(this.webServer, user), - type: 'Person', - preferredUsername: user.username, - name: user.getSanitizedName('real'), - endpoints: { - sharedInbox: 'TODO', - }, - inbox: makeUserUrl(this.webServer, user, '/ap/users') + '/outbox', - outbox: makeUserUrl(this.webServer, user, '/ap/users') + '/inbox', - followers: makeUserUrl(this.webServer, user, '/ap/users') + '/followers', - following: makeUserUrl(this.webServer, user, '/ap/users') + '/following', - summary: user.getProperty(UserProps.AutoSignature) || '', - url: webFingerProfileUrl(this.webServer, user), - publicKey: {}, - - // :TODO: we can start to define BBS related stuff with the community perhaps - }); - - const headers = { - 'Content-Type': 'application/activity+json', - 'Content-Length': body.length, - }; - - resp.writeHead(200, headers); - return resp.end(body); + const accept = req.headers['accept'] || '*/*'; + if (accept === 'application/activity+json') { + return this._selfAsActorHandler(user, req, resp); + } + + return this._standardSelfHandler(user, req, resp); + }); + } + + _selfAsActorHandler(user, req, resp) { + const body = JSON.stringify({ + '@context': [ + 'https://www.w3.org/ns/activitystreams', + 'https://w3id.org/security/v1', + ], + id: selfUrl(this.webServer, user), + type: 'Person', + preferredUsername: user.username, + name: user.getSanitizedName('real'), + endpoints: { + sharedInbox: 'TODO', + }, + inbox: makeUserUrl(this.webServer, user, '/ap/users') + '/outbox', + outbox: makeUserUrl(this.webServer, user, '/ap/users') + '/inbox', + followers: makeUserUrl(this.webServer, user, '/ap/users') + '/followers', + following: makeUserUrl(this.webServer, user, '/ap/users') + '/following', + summary: user.getProperty(UserProps.AutoSignature) || '', + url: webFingerProfileUrl(this.webServer, user), + publicKey: {}, + + // :TODO: we can start to define BBS related stuff with the community perhaps }); + + const headers = { + 'Content-Type': 'application/activity+json', + 'Content-Length': body.length, + }; + + resp.writeHead(200, headers); + return resp.end(body); } - _standardSelfHandler(req, resp) { - // :TODO: this should also be their profile page?! Perhaps that should also be shared... - return this._notFound(resp); + _standardSelfHandler(user, req, resp) { + let templateFile = _.get( + Config(), + 'contentServers.web.handlers.activityPub.selfTemplate' + ); + if (templateFile) { + templateFile = this.webServer.resolveTemplatePath(templateFile); + } + + // we'll fall back to the same default profile info as the WebFinger profile + getUserProfileTemplatedBody( + templateFile, + user, + DefaultProfileTemplate, + 'text/plain', + (err, body, contentType) => { + if (err) { + return this._notFound(resp); + } + + const headers = { + 'Content-Type': contentType, + 'Content-Length': body.length, + }; + + resp.writeHead(200, headers); + return resp.end(body); + } + ); } _notFound(resp) { diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index 3f83da9a9..7e7f9f1eb 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -1,22 +1,17 @@ const WebHandlerModule = require('../../../web_handler_module'); const Config = require('../../../config').get; -const { Errors, ErrorReasons } = require('../../../enig_error'); +const { Errors } = require('../../../enig_error'); const { WellKnownLocations } = require('../web'); const { selfUrl, webFingerProfileUrl, userFromAccount, + getUserProfileTemplatedBody, + DefaultProfileTemplate, } = require('../../../activitypub_util'); const _ = require('lodash'); -const User = require('../../../user'); -const UserProps = require('../../../user_property'); const Log = require('../../../logger').log; -const mimeTypes = require('mime-types'); - -const fs = require('graceful-fs'); -const paths = require('path'); -const moment = require('moment'); exports.moduleInfo = { name: 'WebFinger', @@ -25,16 +20,6 @@ exports.moduleInfo = { packageName: 'codes.l33t.enigma.web.handler.webfinger', }; -// :TODO: more info in default -const DefaultProfileTemplate = ` -User information for: %USERNAME% - -Real Name: %REAL_NAME% -Login Count: %LOGIN_COUNT% -Affiliations: %AFFILIATIONS% -Achievement Points: %ACHIEVEMENT_POINTS% -`; - // // WebFinger: https://www.rfc-editor.org/rfc/rfc7033 // @@ -117,70 +102,33 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { return this._notFound(resp); } - this._getProfileTemplate((template, mimeType) => { - const up = (p, na = 'N/A') => { - return user.getProperty(p) || na; - }; - - let birthDate = up(UserProps.Birthdate); - if (moment.isDate(birthDate)) { - birthDate = moment(birthDate); - } - - const varMap = { - USERNAME: user.username, - REAL_NAME: user.getSanitizedName('real'), - SEX: up(UserProps.Sex), - BIRTHDATE: birthDate, - AGE: user.getAge(), - LOCATION: up(UserProps.Location), - AFFILIATIONS: up(UserProps.Affiliations), - EMAIL: up(UserProps.EmailAddress), - WEB_ADDRESS: up(UserProps.WebAddress), - ACCOUNT_CREATED: moment(user.getProperty(UserProps.AccountCreated)), - LAST_LOGIN: moment(user.getProperty(UserProps.LastLoginTs)), - LOGIN_COUNT: up(UserProps.LoginCount), - ACHIEVEMENT_COUNT: up(UserProps.AchievementTotalCount, '0'), - ACHIEVEMENT_POINTS: up(UserProps.AchievementTotalPoints, '0'), - BOARDNAME: Config().general.boardName, - }; - - let body = template; - _.each(varMap, (val, varName) => { - body = body.replace(new RegExp(`%${varName}%`, 'g'), val); - }); - - const headers = { - 'Content-Type': mimeType, - 'Content-Length': body.length, - }; - - resp.writeHead(200, headers); - return resp.end(body); - }); - }); - } + let templateFile = _.get( + Config(), + 'contentServers.web.handlers.webFinger.profileTemplate' + ); + if (templateFile) { + templateFile = this.webServer.resolveTemplatePath(templateFile); + } - _getProfileTemplate(cb) { - let templateFile = _.get( - Config(), - 'contentServers.web.handlers.webFinger.profileTemplate' - ); - if (templateFile) { - templateFile = this.webServer.resolveTemplatePath(templateFile); - } - fs.readFile(templateFile || '', 'utf8', (err, data) => { - if (err) { - if (templateFile) { - Log.warn( - { error: err.message }, - `Failed to load profile template "${templateFile}"` - ); + getUserProfileTemplatedBody( + templateFile, + user, + DefaultProfileTemplate, + 'text/plain', + (err, body, contentType) => { + if (err) { + return this._notFound(resp); + } + + const headers = { + 'Content-Type': contentType, + 'Content-Length': body.length, + }; + + resp.writeHead(200, headers); + return resp.end(body); } - - return cb(DefaultProfileTemplate, 'text/plain'); - } - return cb(data, mimeTypes.contentType(paths.basename(templateFile))); + ); }); } From 8026164ae49ab0e0f73949bcbeed3de637df2a0e Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 4 Jan 2023 21:25:33 -0700 Subject: [PATCH 025/233] Standardize on _enig prefix for internal routes; update all _internal to this prefix --- WHATSNEW.md | 2 +- core/user_2fa_otp_web_register.js | 12 ++++++++---- core/web_password_reset.js | 16 ++++++++++------ 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/WHATSNEW.md b/WHATSNEW.md index f91313a68..3efd0752d 100644 --- a/WHATSNEW.md +++ b/WHATSNEW.md @@ -4,7 +4,7 @@ This document attempts to track **major** changes and additions in ENiGMA½. For ## 0.0.14-beta * The [Web Server](/docs/_docs/servers/contentservers/web-server.md) has made some possibly breaking changes: * `/static/` prefixes are no longer required. This was a ugly hack. - * Some internal routes such as those used for password resets live within `/_internal/`. + * Some internal routes such as those used for password resets live within `/_enig/`. * Routes for the file base now default to `/_f/` prefixed instead of just `/f/`. If `/f/` is in your `config.hjson` you are encouraged to update it! * Finally, the system will search for `index.html` and `index.htm` in that order, if another suitable route cannot be established. diff --git a/core/user_2fa_otp_web_register.js b/core/user_2fa_otp_web_register.js index edae1d5b7..27944a5c1 100644 --- a/core/user_2fa_otp_web_register.js +++ b/core/user_2fa_otp_web_register.js @@ -5,6 +5,7 @@ const Config = require('./config.js').get; const getServer = require('./listening_server.js').getServer; const webServerPackageName = require('./servers/content/web.js').moduleInfo.packageName; +const { WellKnownLocations } = require('./servers/content/web'); const { createToken, deleteToken, @@ -76,7 +77,8 @@ module.exports = class User2FA_OTPWebRegister { (token, textTemplate, htmlTemplate, callback) => { const webServer = getWebServer(); const registerUrl = webServer.instance.buildUrl( - `/_internal/enable_2fa_otp?token=${token}&otpType=${otpType}` + WellKnownLocations.Internal + + `/2fa/enable_2fa_otp?token=${token}&otpType=${otpType}` ); const replaceTokens = s => { @@ -170,7 +172,9 @@ module.exports = class User2FA_OTPWebRegister { return User2FA_OTPWebRegister.accessDenied(webServer, resp); } - const postUrl = webServer.instance.buildUrl('/_internal/enable_2fa_otp'); + const postUrl = webServer.instance.buildUrl( + WellKnownLocations.Internal + '/2fa/enable_2fa_otp' + ); const config = Config(); return webServer.instance.routeTemplateFilePage( _.get(config, 'users.twoFactorAuth.otp.registerPageTemplate'), @@ -296,12 +300,12 @@ ${backupCodes} [ { method: 'GET', - path: /^\/_internal\/enable_2fa_otp\?token=[a-f0-9]+&otpType=[a-zA-Z0-9_]+$/, + path: /^\/_enig\/2fa\/enable_2fa_otp\?token=[a-f0-9]+&otpType=[a-zA-Z0-9_]+$/, handler: User2FA_OTPWebRegister.routeRegisterGet, }, { method: 'POST', - path: /^\/_internal\/enable_2fa_otp$/, + path: /^\/_enig\/2fa\/enable_2fa_otp$/, handler: User2FA_OTPWebRegister.routeRegisterPost, }, ].forEach(r => { diff --git a/core/web_password_reset.js b/core/web_password_reset.js index dbc4f88d6..a1b46bf1a 100644 --- a/core/web_password_reset.js +++ b/core/web_password_reset.js @@ -6,6 +6,7 @@ const Config = require('./config.js').get; const Errors = require('./enig_error.js').Errors; const getServer = require('./listening_server.js').getServer; const webServerPackageName = require('./servers/content/web.js').moduleInfo.packageName; +const { WellKnownLocations } = require('./servers/content/web'); const User = require('./user.js'); const userDb = require('./database.js').dbs.user; const getISOTimestampString = require('./database.js').getISOTimestampString; @@ -121,9 +122,10 @@ class WebPasswordReset { const sendMail = require('./email.js').sendMail; const resetUrl = webServer.instance.buildUrl( - `/_internal/reset_password?token=${ - user.properties[UserProps.EmailPwResetToken] - }` + WellKnownLocations.Internal + + `/sec/reset_password?token=${ + user.properties[UserProps.EmailPwResetToken] + }` ); function replaceTokens(s) { @@ -194,13 +196,13 @@ class WebPasswordReset { { // this is the page displayed to user when they GET it method: 'GET', - path: /^\/_internal\/reset_password\?token=[a-f0-9]+$/, + path: /^\/_enig\/sec\/reset_password\?token=[a-f0-9]+$/, handler: WebPasswordReset.routeResetPasswordGet, }, // POST handler for performing the actual reset { method: 'POST', - path: /^\/_internal\/reset_password$/, + path: /^\/_enig\/sec\/reset_password$/, handler: WebPasswordReset.routeResetPasswordPost, }, ].forEach(r => { @@ -269,7 +271,9 @@ class WebPasswordReset { ); } - const postResetUrl = webServer.instance.buildUrl('/_internal/reset_password'); + const postResetUrl = webServer.instance.buildUrl( + WellKnownLocations.Internal + '/sec/reset_password' + ); const config = Config(); return webServer.instance.routeTemplateFilePage( From dc7f9021824a4547f9d0fbf78367113f30998e76 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 4 Jan 2023 22:19:12 -0700 Subject: [PATCH 026/233] Missing import --- core/activitypub_util.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/activitypub_util.js b/core/activitypub_util.js index 1ccb27ac9..ba8f23c5a 100644 --- a/core/activitypub_util.js +++ b/core/activitypub_util.js @@ -1,6 +1,6 @@ const { WellKnownLocations } = require('./servers/content/web'); const User = require('./user'); -const { Errors } = require('./enig_error'); +const { Errors, ErrorReasons } = require('./enig_error'); const UserProps = require('./user_property'); // deps From 9f33c8b21d6b1812736818fecd00b9768f575121 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Thu, 5 Jan 2023 22:33:03 -0600 Subject: [PATCH 027/233] Added public/private keypairs for user (and hid from logging) --- core/logger.js | 4 +- core/user.js | 1785 +++++++++++++++++++++-------------------- core/user_property.js | 2 + 3 files changed, 909 insertions(+), 882 deletions(-) diff --git a/core/logger.js b/core/logger.js index 6d99ad810..eb4cbb2c1 100644 --- a/core/logger.js +++ b/core/logger.js @@ -32,7 +32,7 @@ module.exports = class Log { }; // try to remove sensitive info by default, e.g. 'password' fields - ['formData', 'formValue'].forEach(keyName => { + ['formData', 'formValue', 'user'].forEach(keyName => { serializers[keyName] = fd => Log.hideSensitive(fd); }); @@ -65,7 +65,7 @@ module.exports = class Log { // return JSON.parse( JSON.stringify(obj).replace( - /"(password|passwordConfirm|key|authCode)"\s?:\s?"([^"]+)"/, + /"(password|passwordConfirm|key|authCode|private_key_main)"\s?:\s?"([^"]+)"/, (match, valueName) => { return `"${valueName}":"********"`; } diff --git a/core/user.js b/core/user.js index 58cf69d96..3ea4c5d95 100644 --- a/core/user.js +++ b/core/user.js @@ -21,980 +21,1005 @@ const sanatizeFilename = require('sanitize-filename'); const ssh2 = require('ssh2'); module.exports = class User { - constructor() { - this.userId = 0; - this.username = ''; - this.properties = {}; // name:value - this.groups = []; // group membership(s) - this.authFactor = User.AuthFactors.None; - this.statusFlags = User.StatusFlags.None; + constructor() { + this.userId = 0; + this.username = ''; + this.properties = {}; // name:value + this.groups = []; // group membership(s) + this.authFactor = User.AuthFactors.None; + this.statusFlags = User.StatusFlags.None; + } + + // static property accessors + static get RootUserID() { + return 1; + } + + static get AuthFactors() { + return { + None: 0, // Not yet authenticated in any way + Factor1: 1, // username + password/pubkey/etc. checked out + Factor2: 2, // validated with 2FA of some sort such as OTP + }; + } + + static get PBKDF2() { + return { + iterations: 1000, + keyLen: 128, + saltLen: 32, + }; + } + + static get StandardPropertyGroups() { + return { + auth: [ + UserProps.PassPbkdf2Salt, + UserProps.PassPbkdf2Dk, + UserProps.AuthPubKey, + ], + }; + } + + static get AccountStatus() { + return { + disabled: 0, // +op disabled + inactive: 1, // inactive, aka requires +op approval/activation + active: 2, // standard, active + locked: 3, // locked out (too many bad login attempts, etc.) + }; + } + + static get StatusFlags() { + return { + None: 0x00000000, + NotAvailable: 0x00000001, // Not currently available for chat, message, page, etc. + NotVisible: 0x00000002, // Invisible -- does not show online, last callers, etc. + }; + } + + isAuthenticated() { + return true === this.authenticated; + } + + isValid() { + if (this.userId <= 0 || this.username.length < Config().users.usernameMin) { + return false; } - // static property accessors - static get RootUserID() { - return 1; - } - - static get AuthFactors() { - return { - None: 0, // Not yet authenticated in any way - Factor1: 1, // username + password/pubkey/etc. checked out - Factor2: 2, // validated with 2FA of some sort such as OTP - }; - } - - static get PBKDF2() { - return { - iterations: 1000, - keyLen: 128, - saltLen: 32, - }; - } + return this.hasValidPasswordProperties(); + } - static get StandardPropertyGroups() { - return { - auth: [ - UserProps.PassPbkdf2Salt, - UserProps.PassPbkdf2Dk, - UserProps.AuthPubKey, - ], - }; - } + hasValidPasswordProperties() { + const salt = this.getProperty(UserProps.PassPbkdf2Salt); + const dk = this.getProperty(UserProps.PassPbkdf2Dk); - static get AccountStatus() { - return { - disabled: 0, // +op disabled - inactive: 1, // inactive, aka requires +op approval/activation - active: 2, // standard, active - locked: 3, // locked out (too many bad login attempts, etc.) - }; + if ( + !salt || + !dk || + salt.length !== User.PBKDF2.saltLen * 2 || + dk.length !== User.PBKDF2.keyLen * 2 + ) { + return false; } - static get StatusFlags() { - return { - None: 0x00000000, - NotAvailable: 0x00000001, // Not currently available for chat, message, page, etc. - NotVisible: 0x00000002, // Invisible -- does not show online, last callers, etc. - }; - } + return true; + } - isAuthenticated() { - return true === this.authenticated; - } + isRoot() { + return User.isRootUserId(this.userId); + } - isValid() { - if (this.userId <= 0 || this.username.length < Config().users.usernameMin) { - return false; - } + isSysOp() { + // alias to isRoot() + return this.isRoot(); + } - return this.hasValidPasswordProperties(); + isGroupMember(groupNames) { + if (_.isString(groupNames)) { + groupNames = [groupNames]; } - hasValidPasswordProperties() { - const salt = this.getProperty(UserProps.PassPbkdf2Salt); - const dk = this.getProperty(UserProps.PassPbkdf2Dk); - - if ( - !salt || - !dk || - salt.length !== User.PBKDF2.saltLen * 2 || - dk.length !== User.PBKDF2.keyLen * 2 - ) { - return false; - } - - return true; - } - - isRoot() { - return User.isRootUserId(this.userId); - } - - isSysOp() { - // alias to isRoot() - return this.isRoot(); - } - - isGroupMember(groupNames) { - if (_.isString(groupNames)) { - groupNames = [groupNames]; - } - - const isMember = groupNames.some(gn => -1 !== this.groups.indexOf(gn)); - return isMember; + const isMember = groupNames.some(gn => -1 !== this.groups.indexOf(gn)); + return isMember; + } + + getSanitizedName(type = 'username') { + const name = + 'real' === type ? this.getProperty(UserProps.RealName) : this.username; + return sanatizeFilename(name) || `user${this.userId.toString()}`; + } + + isAvailable() { + return (this.statusFlags & User.StatusFlags.NotAvailable) == 0; + } + + isVisible() { + return (this.statusFlags & User.StatusFlags.NotVisible) == 0; + } + + setAvailability(available) { + if (available) { + this.statusFlags &= ~User.StatusFlags.NotAvailable; + } else { + this.statusFlags |= User.StatusFlags.NotAvailable; } + } - getSanitizedName(type = 'username') { - const name = - 'real' === type ? this.getProperty(UserProps.RealName) : this.username; - return sanatizeFilename(name) || `user${this.userId.toString()}`; + setVisibility(visible) { + if (visible) { + this.statusFlags &= ~User.StatusFlags.NotVisible; + } else { + this.statusFlags |= User.StatusFlags.NotVisible; } + } - isAvailable() { - return (this.statusFlags & User.StatusFlags.NotAvailable) == 0; + getLegacySecurityLevel() { + if (this.isRoot() || this.isGroupMember('sysops')) { + return 100; } - isVisible() { - return (this.statusFlags & User.StatusFlags.NotVisible) == 0; + if (this.isGroupMember('users')) { + return 30; } - setAvailability(available) { - if (available) { - this.statusFlags &= ~User.StatusFlags.NotAvailable; - } else { - this.statusFlags |= User.StatusFlags.NotAvailable; - } - } - - setVisibility(visible) { - if (visible) { - this.statusFlags &= ~User.StatusFlags.NotVisible; - } else { - this.statusFlags |= User.StatusFlags.NotVisible; - } - } - - getLegacySecurityLevel() { - if (this.isRoot() || this.isGroupMember('sysops')) { - return 100; - } - - if (this.isGroupMember('users')) { - return 30; - } - - return 10; // :TODO: Is this what we want? - } - - processFailedLogin(userId, cb) { - async.waterfall( - [ - callback => { - return User.getUser(userId, callback); - }, - (tempUser, callback) => { - return StatLog.incrementUserStat( - tempUser, - UserProps.FailedLoginAttempts, - 1, - (err, failedAttempts) => { - return callback(null, tempUser, failedAttempts); - } - ); - }, - (tempUser, failedAttempts, callback) => { - const lockAccount = _.get(Config(), 'users.failedLogin.lockAccount'); - if (lockAccount > 0 && failedAttempts >= lockAccount) { - const props = { - [UserProps.AccountStatus]: User.AccountStatus.locked, - [UserProps.AccountLockedTs]: StatLog.now, - }; - if ( - !_.has(tempUser.properties, UserProps.AccountLockedPrevStatus) - ) { - props[UserProps.AccountLockedPrevStatus] = - tempUser.getProperty(UserProps.AccountStatus); - } - Log.info( - { userId, failedAttempts }, - '(Re)setting account to locked due to failed logins' - ); - return tempUser.persistProperties(props, callback); - } - - return cb(null); - }, - ], - err => { - return cb(err); + return 10; // :TODO: Is this what we want? + } + + processFailedLogin(userId, cb) { + async.waterfall( + [ + callback => { + return User.getUser(userId, callback); + }, + (tempUser, callback) => { + return StatLog.incrementUserStat( + tempUser, + UserProps.FailedLoginAttempts, + 1, + (err, failedAttempts) => { + return callback(null, tempUser, failedAttempts); + } + ); + }, + (tempUser, failedAttempts, callback) => { + const lockAccount = _.get(Config(), 'users.failedLogin.lockAccount'); + if (lockAccount > 0 && failedAttempts >= lockAccount) { + const props = { + [UserProps.AccountStatus]: User.AccountStatus.locked, + [UserProps.AccountLockedTs]: StatLog.now, + }; + if ( + !_.has(tempUser.properties, UserProps.AccountLockedPrevStatus) + ) { + props[UserProps.AccountLockedPrevStatus] = + tempUser.getProperty(UserProps.AccountStatus); } - ); + Log.info( + { userId, failedAttempts }, + '(Re)setting account to locked due to failed logins' + ); + return tempUser.persistProperties(props, callback); + } + + return cb(null); + }, + ], + err => { + return cb(err); + } + ); + } + + unlockAccount(cb) { + const prevStatus = this.getProperty(UserProps.AccountLockedPrevStatus); + if (!prevStatus) { + return cb(null); // nothing to do } - unlockAccount(cb) { - const prevStatus = this.getProperty(UserProps.AccountLockedPrevStatus); - if (!prevStatus) { - return cb(null); // nothing to do + this.persistProperty(UserProps.AccountStatus, prevStatus, err => { + if (err) { + return cb(err); + } + + return this.removeProperties( + [UserProps.AccountLockedPrevStatus, UserProps.AccountLockedTs], + cb + ); + }); + } + + static get AuthFactor1Types() { + return { + SSHPubKey: 'sshPubKey', + Password: 'password', + TLSClient: 'tlsClientAuth', + }; + } + + authenticateFactor1(authInfo, cb) { + const username = authInfo.username; + const self = this; + const tempAuthInfo = {}; + + const validatePassword = (props, callback) => { + User.generatePasswordDerivedKey( + authInfo.password, + props[UserProps.PassPbkdf2Salt], + (err, dk) => { + if (err) { + return callback(err); + } + + // + // Use constant time comparison here for security feel-goods + // + const passDkBuf = Buffer.from(dk, 'hex'); + const propsDkBuf = Buffer.from(props[UserProps.PassPbkdf2Dk], 'hex'); + + return callback( + crypto.timingSafeEqual(passDkBuf, propsDkBuf) + ? null + : Errors.AccessDenied('Invalid password') + ); } - - this.persistProperty(UserProps.AccountStatus, prevStatus, err => { - if (err) { - return cb(err); + ); + }; + + const validatePubKey = (props, callback) => { + const pubKeyActual = ssh2.utils.parseKey(props[UserProps.AuthPubKey]); + if (!pubKeyActual) { + return callback(Errors.AccessDenied('Invalid public key')); + } + + if ( + authInfo.pubKey.key.algo != pubKeyActual.type || + !crypto.timingSafeEqual( + authInfo.pubKey.key.data, + pubKeyActual.getPublicSSH() + ) + ) { + return callback(Errors.AccessDenied('Invalid public key')); + } + + return callback(null); + }; + + async.waterfall( + [ + function fetchUserId(callback) { + // get user ID + User.getUserIdAndName(username, (err, uid, un) => { + tempAuthInfo.userId = uid; + tempAuthInfo.username = un; + + return callback(err); + }); + }, + function getRequiredAuthProperties(callback) { + // fetch properties required for authentication + User.loadProperties( + tempAuthInfo.userId, + { names: User.StandardPropertyGroups.auth }, + (err, props) => { + return callback(err, props); + } + ); + }, + function validatePassOrPubKey(props, callback) { + if (User.AuthFactor1Types.SSHPubKey === authInfo.type) { + return validatePubKey(props, callback); + } + return validatePassword(props, callback); + }, + function initProps(callback) { + User.loadProperties(tempAuthInfo.userId, (err, allProps) => { + if (!err) { + tempAuthInfo.properties = allProps; } - return this.removeProperties( - [UserProps.AccountLockedPrevStatus, UserProps.AccountLockedTs], - cb + return callback(err); + }); + }, + function checkAccountStatus(callback) { + const accountStatus = parseInt( + tempAuthInfo.properties[UserProps.AccountStatus], + 10 + ); + if (User.AccountStatus.disabled === accountStatus) { + return callback( + Errors.AccessDenied('Account disabled', ErrorReasons.Disabled) ); - }); - } - - static get AuthFactor1Types() { - return { - SSHPubKey: 'sshPubKey', - Password: 'password', - TLSClient: 'tlsClientAuth', - }; - } - - authenticateFactor1(authInfo, cb) { - const username = authInfo.username; - const self = this; - const tempAuthInfo = {}; - - const validatePassword = (props, callback) => { - User.generatePasswordDerivedKey( - authInfo.password, - props[UserProps.PassPbkdf2Salt], - (err, dk) => { - if (err) { - return callback(err); - } - - // - // Use constant time comparison here for security feel-goods - // - const passDkBuf = Buffer.from(dk, 'hex'); - const propsDkBuf = Buffer.from(props[UserProps.PassPbkdf2Dk], 'hex'); - - return callback( - crypto.timingSafeEqual(passDkBuf, propsDkBuf) - ? null - : Errors.AccessDenied('Invalid password') - ); - } + } + if (User.AccountStatus.inactive === accountStatus) { + return callback( + Errors.AccessDenied('Account inactive', ErrorReasons.Inactive) ); - }; + } - const validatePubKey = (props, callback) => { - const pubKeyActual = ssh2.utils.parseKey(props[UserProps.AuthPubKey]); - if (!pubKeyActual) { - return callback(Errors.AccessDenied('Invalid public key')); + if (User.AccountStatus.locked === accountStatus) { + const autoUnlockMinutes = _.get( + Config(), + 'users.failedLogin.autoUnlockMinutes' + ); + const lockedTs = moment( + tempAuthInfo.properties[UserProps.AccountLockedTs] + ); + if (autoUnlockMinutes && lockedTs.isValid()) { + const minutesSinceLocked = moment().diff(lockedTs, 'minutes'); + if (minutesSinceLocked >= autoUnlockMinutes) { + // allow the login - we will clear any lock there + Log.info( + { + username, + userId: tempAuthInfo.userId, + lockedAt: lockedTs.format(), + }, + 'Locked account will now be unlocked due to auto-unlock minutes policy' + ); + return callback(null); + } } - - if ( - authInfo.pubKey.key.algo != pubKeyActual.type || - !crypto.timingSafeEqual( - authInfo.pubKey.key.data, - pubKeyActual.getPublicSSH() - ) - ) { - return callback(Errors.AccessDenied('Invalid public key')); + return callback( + Errors.AccessDenied('Account is locked', ErrorReasons.Locked) + ); + } + + // anything else besides active is still not allowed + if (User.AccountStatus.active !== accountStatus) { + return callback(Errors.AccessDenied('Account is not active')); + } + + return callback(null); + }, + function initGroups(callback) { + userGroup.getGroupsForUser(tempAuthInfo.userId, (err, groups) => { + if (!err) { + tempAuthInfo.groups = groups; } - return callback(null); - }; - - async.waterfall( - [ - function fetchUserId(callback) { - // get user ID - User.getUserIdAndName(username, (err, uid, un) => { - tempAuthInfo.userId = uid; - tempAuthInfo.username = un; - - return callback(err); - }); - }, - function getRequiredAuthProperties(callback) { - // fetch properties required for authentication - User.loadProperties( - tempAuthInfo.userId, - { names: User.StandardPropertyGroups.auth }, - (err, props) => { - return callback(err, props); - } - ); - }, - function validatePassOrPubKey(props, callback) { - if (User.AuthFactor1Types.SSHPubKey === authInfo.type) { - return validatePubKey(props, callback); - } - return validatePassword(props, callback); - }, - function initProps(callback) { - User.loadProperties(tempAuthInfo.userId, (err, allProps) => { - if (!err) { - tempAuthInfo.properties = allProps; - } - - return callback(err); - }); - }, - function checkAccountStatus(callback) { - const accountStatus = parseInt( - tempAuthInfo.properties[UserProps.AccountStatus], - 10 - ); - if (User.AccountStatus.disabled === accountStatus) { - return callback( - Errors.AccessDenied('Account disabled', ErrorReasons.Disabled) - ); - } - if (User.AccountStatus.inactive === accountStatus) { - return callback( - Errors.AccessDenied('Account inactive', ErrorReasons.Inactive) - ); - } - - if (User.AccountStatus.locked === accountStatus) { - const autoUnlockMinutes = _.get( - Config(), - 'users.failedLogin.autoUnlockMinutes' - ); - const lockedTs = moment( - tempAuthInfo.properties[UserProps.AccountLockedTs] - ); - if (autoUnlockMinutes && lockedTs.isValid()) { - const minutesSinceLocked = moment().diff(lockedTs, 'minutes'); - if (minutesSinceLocked >= autoUnlockMinutes) { - // allow the login - we will clear any lock there - Log.info( - { - username, - userId: tempAuthInfo.userId, - lockedAt: lockedTs.format(), - }, - 'Locked account will now be unlocked due to auto-unlock minutes policy' - ); - return callback(null); - } - } - return callback( - Errors.AccessDenied('Account is locked', ErrorReasons.Locked) - ); - } - - // anything else besides active is still not allowed - if (User.AccountStatus.active !== accountStatus) { - return callback(Errors.AccessDenied('Account is not active')); - } - - return callback(null); - }, - function initGroups(callback) { - userGroup.getGroupsForUser(tempAuthInfo.userId, (err, groups) => { - if (!err) { - tempAuthInfo.groups = groups; - } - - return callback(err); - }); - }, - ], - err => { - if (err) { - // - // If we failed login due to something besides an inactive or disabled account, - // we need to update failure status and possibly lock the account. - // - // If locked already, update the lock timestamp -- ie, extend the lockout period. - // - if ( - ![ErrorReasons.Disabled, ErrorReasons.Inactive].includes( - err.reasonCode - ) && - tempAuthInfo.userId - ) { - self.processFailedLogin(tempAuthInfo.userId, persistErr => { - if (persistErr) { - Log.warn( - { error: persistErr.message }, - 'Failed to persist failed login information' - ); - } - return cb(err); // pass along original error - }); - } else { - return cb(err); - } - } else { - // everything checks out - load up info - self.userId = tempAuthInfo.userId; - self.username = tempAuthInfo.username; - self.properties = tempAuthInfo.properties; - self.groups = tempAuthInfo.groups; - self.authFactor = User.AuthFactors.Factor1; - - // - // If 2FA/OTP is required, this user is not quite authenticated yet. - // - self.authenticated = !(self.getProperty(UserProps.AuthFactor2OTP) - ? true - : false); - - self.removeProperty(UserProps.FailedLoginAttempts); - - // - // We need to *revert* any locked status back to - // the user's previous status & clean up props. - // - self.unlockAccount(unlockErr => { - if (unlockErr) { - Log.warn( - { error: unlockErr.message }, - 'Failed to unlock account' - ); - } - return cb(null); - }); - } + return callback(err); + }); + }, + ], + err => { + if (err) { + // + // If we failed login due to something besides an inactive or disabled account, + // we need to update failure status and possibly lock the account. + // + // If locked already, update the lock timestamp -- ie, extend the lockout period. + // + if ( + ![ErrorReasons.Disabled, ErrorReasons.Inactive].includes( + err.reasonCode + ) && + tempAuthInfo.userId + ) { + self.processFailedLogin(tempAuthInfo.userId, persistErr => { + if (persistErr) { + Log.warn( + { error: persistErr.message }, + 'Failed to persist failed login information' + ); + } + return cb(err); // pass along original error + }); + } else { + return cb(err); + } + } else { + // everything checks out - load up info + self.userId = tempAuthInfo.userId; + self.username = tempAuthInfo.username; + self.properties = tempAuthInfo.properties; + self.groups = tempAuthInfo.groups; + self.authFactor = User.AuthFactors.Factor1; + + // + // If 2FA/OTP is required, this user is not quite authenticated yet. + // + self.authenticated = !(self.getProperty(UserProps.AuthFactor2OTP) + ? true + : false); + + self.removeProperty(UserProps.FailedLoginAttempts); + + // + // We need to *revert* any locked status back to + // the user's previous status & clean up props. + // + self.unlockAccount(unlockErr => { + if (unlockErr) { + Log.warn( + { error: unlockErr.message }, + 'Failed to unlock account' + ); } - ); - } - - create(createUserInfo, cb) { - assert(0 === this.userId); - const config = Config(); - - if ( - this.username.length < config.users.usernameMin || - this.username.length > config.users.usernameMax - ) { - return cb(Errors.Invalid('Invalid username length')); + return cb(null); + }); } + } + ); + } + + create(createUserInfo, cb) { + assert(0 === this.userId); + const config = Config(); + + if ( + this.username.length < config.users.usernameMin || + this.username.length > config.users.usernameMax + ) { + return cb(Errors.Invalid('Invalid username length')); + } - const self = this; - - // :TODO: set various defaults, e.g. default activation status, etc. - self.properties[UserProps.AccountStatus] = config.users.requireActivation - ? User.AccountStatus.inactive - : User.AccountStatus.active; - - async.waterfall( - [ - function beginTransaction(callback) { - return userDb.beginTransaction(callback); - }, - function createUserRec(trans, callback) { - trans.run( - `INSERT INTO user (user_name) + const self = this; + + // :TODO: set various defaults, e.g. default activation status, etc. + self.properties[UserProps.AccountStatus] = config.users.requireActivation + ? User.AccountStatus.inactive + : User.AccountStatus.active; + + async.waterfall( + [ + function beginTransaction(callback) { + return userDb.beginTransaction(callback); + }, + function createUserRec(trans, callback) { + trans.run( + `INSERT INTO user (user_name) VALUES (?);`, - [self.username], - function inserted(err) { - // use classic function for |this| - if (err) { - return callback(err); - } - - self.userId = this.lastID; - - // Do not require activation for userId 1 (root/admin) - if (User.RootUserID === self.userId) { - self.properties[UserProps.AccountStatus] = - User.AccountStatus.active; - } - - return callback(null, trans); - } - ); - }, - function genAuthCredentials(trans, callback) { - User.generatePasswordDerivedKeyAndSalt( - createUserInfo.password, - (err, info) => { - if (err) { - return callback(err); - } - - self.properties[UserProps.PassPbkdf2Salt] = info.salt; - self.properties[UserProps.PassPbkdf2Dk] = info.dk; - return callback(null, trans); - } - ); - }, - function setInitialGroupMembership(trans, callback) { - // Assign initial groups. Must perform a clone: #235 - All users are sysops (and I can't un-sysop them) - self.groups = [...config.users.defaultGroups]; - - if (User.RootUserID === self.userId) { - // root/SysOp? - self.groups.push('sysops'); - } - - return callback(null, trans); - }, - function saveAll(trans, callback) { - self.persistWithTransaction(trans, err => { - return callback(err, trans); - }); - }, - function sendEvent(trans, callback) { - Events.emit(Events.getSystemEvents().NewUser, { - user: Object.assign({}, self, { - sessionId: createUserInfo.sessionId, - }), - }); - return callback(null, trans); - }, - ], - (err, trans) => { - if (trans) { - trans[err ? 'rollback' : 'commit'](transErr => { - return cb(err ? err : transErr); - }); - } else { - return cb(err); - } + [self.username], + function inserted(err) { + // use classic function for |this| + if (err) { + return callback(err); + } + + self.userId = this.lastID; + + // Do not require activation for userId 1 (root/admin) + if (User.RootUserID === self.userId) { + self.properties[UserProps.AccountStatus] = + User.AccountStatus.active; + } + + return callback(null, trans); } - ); - } - - persistWithTransaction(trans, cb) { - assert(this.userId > 0); - - const self = this; - - async.series( - [ - function saveProps(callback) { - self.persistProperties(self.properties, trans, err => { - return callback(err); - }); - }, - function saveGroups(callback) { - userGroup.addUserToGroups(self.userId, self.groups, trans, err => { - return callback(err); - }); - }, - ], - err => { - return cb(err); + ); + }, + function genAuthCredentials(trans, callback) { + User.generatePasswordDerivedKeyAndSalt( + createUserInfo.password, + (err, info) => { + if (err) { + return callback(err); + } + + self.properties[UserProps.PassPbkdf2Salt] = info.salt; + self.properties[UserProps.PassPbkdf2Dk] = info.dk; + return callback(null, trans); } - ); - } - - static persistPropertyByUserId(userId, propName, propValue, cb) { - userDb.run( - `REPLACE INTO user_property (user_id, prop_name, prop_value) - VALUES (?, ?, ?);`, - [userId, propName, propValue], - err => { - if (cb) { - return cb(err, propValue); - } - } - ); - } - - setProperty(propName, propValue) { - this.properties[propName] = propValue; - } - - incrementProperty(propName, incrementBy) { - incrementBy = incrementBy || 1; - let newValue = parseInt(this.getProperty(propName)); - if (newValue) { - newValue += incrementBy; + ); + }, + function setInitialGroupMembership(trans, callback) { + // Assign initial groups. Must perform a clone: #235 - All users are sysops (and I can't un-sysop them) + self.groups = [...config.users.defaultGroups]; + + if (User.RootUserID === self.userId) { + // root/SysOp? + self.groups.push('sysops'); + } + + return callback(null, trans); + }, + function saveAll(trans, callback) { + self.persistWithTransaction(trans, err => { + return callback(err, trans); + }); + }, + function sendEvent(trans, callback) { + Events.emit(Events.getSystemEvents().NewUser, { + user: Object.assign({}, self, { + sessionId: createUserInfo.sessionId, + }), + }); + return callback(null, trans); + }, + ], + (err, trans) => { + if (trans) { + trans[err ? 'rollback' : 'commit'](transErr => { + return cb(err ? err : transErr); + }); } else { - newValue = incrementBy; + return cb(err); + } + } + ); + } + + persistWithTransaction(trans, cb) { + assert(this.userId > 0); + + const self = this; + + async.series( + [ + function setKeyPair(callback) { + self.generateMainKeyPair(err => { + return callback(err); + }); + }, + function saveProps(callback) { + self.persistProperties(self.properties, trans, err => { + return callback(err); + }); + }, + function saveGroups(callback) { + userGroup.addUserToGroups(self.userId, self.groups, trans, err => { + return callback(err); + }); + }, + ], + err => { + return cb(err); + } + ); + } + + static persistPropertyByUserId(userId, propName, propValue, cb) { + userDb.run( + `REPLACE INTO user_property (user_id, prop_name, prop_value) + VALUES (?, ?, ?);`, + [userId, propName, propValue], + err => { + if (cb) { + return cb(err, propValue); } - this.setProperty(propName, newValue); - return newValue; + } + ); + } + + setProperty(propName, propValue) { + this.properties[propName] = propValue; + } + + incrementProperty(propName, incrementBy) { + incrementBy = incrementBy || 1; + let newValue = parseInt(this.getProperty(propName)); + if (newValue) { + newValue += incrementBy; + } else { + newValue = incrementBy; } + this.setProperty(propName, newValue); + return newValue; + } - getProperty(propName) { - return this.properties[propName]; - } + getProperty(propName) { + return this.properties[propName]; + } - getPropertyAsNumber(propName) { - return parseInt(this.getProperty(propName), 10); - } + getPropertyAsNumber(propName) { + return parseInt(this.getProperty(propName), 10); + } - persistProperty(propName, propValue, cb) { - // update live props - this.properties[propName] = propValue; + persistProperty(propName, propValue, cb) { + // update live props + this.properties[propName] = propValue; - return User.persistPropertyByUserId(this.userId, propName, propValue, cb); - } + return User.persistPropertyByUserId(this.userId, propName, propValue, cb); + } - removeProperty(propName, cb) { - // update live - delete this.properties[propName]; + removeProperty(propName, cb) { + // update live + delete this.properties[propName]; - userDb.run( - `DELETE FROM user_property + userDb.run( + `DELETE FROM user_property WHERE user_id = ? AND prop_name = ?;`, - [this.userId, propName], - err => { - if (cb) { - return cb(err); - } - } - ); - } - - removeProperties(propNames, cb) { - async.each( - propNames, - (name, next) => { - return this.removeProperty(name, next); - }, - err => { - if (cb) { - return cb(err); - } - } - ); - } - - persistProperties(properties, transOrDb, cb) { - if (!_.isFunction(cb) && _.isFunction(transOrDb)) { - cb = transOrDb; - transOrDb = userDb; + [this.userId, propName], + err => { + if (cb) { + return cb(err); } + } + ); + } + + removeProperties(propNames, cb) { + async.each( + propNames, + (name, next) => { + return this.removeProperty(name, next); + }, + err => { + if (cb) { + return cb(err); + } + } + ); + } + + generateMainKeyPair(cb) { + crypto.generateKeyPair('rsa', { + modulusLength: 4096, + publicKeyEncoding: { + type: 'spki', + format: 'pem' + }, + privateKeyEncoding: { + type: 'pkcs8', + format: 'pem' + } + }, (err, publicKey, privateKey) => { + if (!err) { + this.setProperty(UserProps.PrivateKeyMain, privateKey); + this.setProperty(UserProps.PublicKeyMain, publicKey); + } + return cb(err); + }); + } + + persistProperties(properties, transOrDb, cb) { + if (!_.isFunction(cb) && _.isFunction(transOrDb)) { + cb = transOrDb; + transOrDb = userDb; + } - const self = this; + const self = this; - // update live props - _.merge(this.properties, properties); + // update live props + _.merge(this.properties, properties); - const stmt = transOrDb.prepare( - `REPLACE INTO user_property (user_id, prop_name, prop_value) + const stmt = transOrDb.prepare( + `REPLACE INTO user_property (user_id, prop_name, prop_value) VALUES (?, ?, ?);` - ); - - async.each( - Object.keys(properties), - (propName, nextProp) => { - stmt.run(self.userId, propName, properties[propName], err => { - return nextProp(err); - }); - }, - err => { - if (err) { - return cb(err); - } - - stmt.finalize(() => { - return cb(null); - }); - } - ); - } + ); - setNewAuthCredentials(password, cb) { - User.generatePasswordDerivedKeyAndSalt(password, (err, info) => { - if (err) { - return cb(err); - } - - const newProperties = { - [UserProps.PassPbkdf2Salt]: info.salt, - [UserProps.PassPbkdf2Dk]: info.dk, - }; - - this.persistProperties(newProperties, err => { - return cb(err); - }); + async.each( + Object.keys(properties), + (propName, nextProp) => { + stmt.run(self.userId, propName, properties[propName], err => { + return nextProp(err); }); - } - - getAge() { - const birthdate = this.getProperty(UserProps.Birthdate); - if (birthdate) { - return moment().diff(birthdate, 'years'); + }, + err => { + if (err) { + return cb(err); } - } - static getUser(userId, cb) { - async.waterfall( - [ - function fetchUserId(callback) { - User.getUserName(userId, (err, userName) => { - return callback(null, userName); - }); - }, - function initProps(userName, callback) { - User.loadProperties(userId, (err, properties) => { - return callback(err, userName, properties); - }); - }, - function initGroups(userName, properties, callback) { - userGroup.getGroupsForUser(userId, (err, groups) => { - return callback(null, userName, properties, groups); - }); - }, - ], - (err, userName, properties, groups) => { - const user = new User(); - user.userId = userId; - user.username = userName; - user.properties = properties; - user.groups = groups; - - // explicitly NOT an authenticated user! - user.authenticated = false; - user.authFactor = User.AuthFactors.None; - - return cb(err, user); - } - ); + stmt.finalize(() => { + return cb(null); + }); + } + ); + } + + setNewAuthCredentials(password, cb) { + User.generatePasswordDerivedKeyAndSalt(password, (err, info) => { + if (err) { + return cb(err); + } + + const newProperties = { + [UserProps.PassPbkdf2Salt]: info.salt, + [UserProps.PassPbkdf2Dk]: info.dk, + }; + + this.persistProperties(newProperties, err => { + return cb(err); + }); + }); + } + + getAge() { + const birthdate = this.getProperty(UserProps.Birthdate); + if (birthdate) { + return moment().diff(birthdate, 'years'); + } + } + + static getUser(userId, cb) { + async.waterfall( + [ + function fetchUserId(callback) { + User.getUserName(userId, (err, userName) => { + return callback(null, userName); + }); + }, + function initProps(userName, callback) { + User.loadProperties(userId, (err, properties) => { + return callback(err, userName, properties); + }); + }, + function initGroups(userName, properties, callback) { + userGroup.getGroupsForUser(userId, (err, groups) => { + return callback(null, userName, properties, groups); + }); + }, + ], + (err, userName, properties, groups) => { + const user = new User(); + user.userId = userId; + user.username = userName; + user.properties = properties; + user.groups = groups; + + // explicitly NOT an authenticated user! + user.authenticated = false; + user.authFactor = User.AuthFactors.None; + + return cb(err, user); + } + ); + } + + static getUserInfo(userId, propsList, cb) { + if (!cb && _.isFunction(propsList)) { + cb = propsList; + propsList = [ + UserProps.RealName, + UserProps.Sex, + UserProps.EmailAddress, + UserProps.Location, + UserProps.Affiliations, + ]; } - static getUserInfo(userId, propsList, cb) { - if (!cb && _.isFunction(propsList)) { - cb = propsList; - propsList = [ - UserProps.RealName, - UserProps.Sex, - UserProps.EmailAddress, - UserProps.Location, - UserProps.Affiliations, - ]; + async.waterfall( + [ + callback => { + return User.getUserName(userId, callback); + }, + (userName, callback) => { + User.loadProperties(userId, { names: propsList }, (err, props) => { + return callback( + err, + Object.assign({}, props, { user_name: userName }) + ); + }); + }, + ], + (err, userProps) => { + if (err) { + return cb(err); } - async.waterfall( - [ - callback => { - return User.getUserName(userId, callback); - }, - (userName, callback) => { - User.loadProperties(userId, { names: propsList }, (err, props) => { - return callback( - err, - Object.assign({}, props, { user_name: userName }) - ); - }); - }, - ], - (err, userProps) => { - if (err) { - return cb(err); - } - - const userInfo = {}; - Object.keys(userProps).forEach(key => { - userInfo[_.camelCase(key)] = userProps[key] || 'N/A'; - }); - - return cb(null, userInfo); - } - ); - } + const userInfo = {}; + Object.keys(userProps).forEach(key => { + userInfo[_.camelCase(key)] = userProps[key] || 'N/A'; + }); - static isRootUserId(userId) { - return User.RootUserID === userId; - } + return cb(null, userInfo); + } + ); + } + + static isRootUserId(userId) { + return User.RootUserID === userId; + } - static getUserIdAndName(username, cb) { - userDb.get( - `SELECT id, user_name + static getUserIdAndName(username, cb) { + userDb.get( + `SELECT id, user_name FROM user WHERE user_name LIKE ?;`, - [username], - (err, row) => { - if (err) { - return cb(err); - } + [username], + (err, row) => { + if (err) { + return cb(err); + } - if (row) { - return cb(null, row.id, row.user_name); - } + if (row) { + return cb(null, row.id, row.user_name); + } - return cb(Errors.DoesNotExist('No matching username')); - } - ); - } + return cb(Errors.DoesNotExist('No matching username')); + } + ); + } - static getUserIdAndNameByRealName(realName, cb) { - userDb.get( - `SELECT id, user_name + static getUserIdAndNameByRealName(realName, cb) { + userDb.get( + `SELECT id, user_name FROM user WHERE id = ( SELECT user_id FROM user_property WHERE prop_name='${UserProps.RealName}' AND prop_value LIKE ? );`, - [realName], - (err, row) => { - if (err) { - return cb(err); - } + [realName], + (err, row) => { + if (err) { + return cb(err); + } - if (row) { - return cb(null, row.id, row.user_name); - } + if (row) { + return cb(null, row.id, row.user_name); + } - return cb(Errors.DoesNotExist('No matching real name')); - } - ); - } + return cb(Errors.DoesNotExist('No matching real name')); + } + ); + } - static getUserIdAndNameByLookup(lookup, cb) { - User.getUserIdAndName(lookup, (err, userId, userName) => { - if (err) { - User.getUserIdAndNameByRealName(lookup, (err, userId, userName) => { - return cb(err, userId, userName); - }); - } else { - return cb(null, userId, userName); - } + static getUserIdAndNameByLookup(lookup, cb) { + User.getUserIdAndName(lookup, (err, userId, userName) => { + if (err) { + User.getUserIdAndNameByRealName(lookup, (err, userId, userName) => { + return cb(err, userId, userName); }); - } - - static getUserName(userId, cb) { - userDb.get( - `SELECT user_name + } else { + return cb(null, userId, userName); + } + }); + } + + static getUserName(userId, cb) { + userDb.get( + `SELECT user_name FROM user WHERE id = ?;`, - [userId], - (err, row) => { - if (err) { - return cb(err); - } + [userId], + (err, row) => { + if (err) { + return cb(err); + } - if (row) { - return cb(null, row.user_name); - } + if (row) { + return cb(null, row.user_name); + } - return cb(Errors.DoesNotExist('No matching user ID')); - } - ); - } + return cb(Errors.DoesNotExist('No matching user ID')); + } + ); + } - static loadProperties(userId, options, cb) { - if (!cb && _.isFunction(options)) { - cb = options; - options = {}; - } + static loadProperties(userId, options, cb) { + if (!cb && _.isFunction(options)) { + cb = options; + options = {}; + } - let sql = `SELECT prop_name, prop_value + let sql = `SELECT prop_name, prop_value FROM user_property WHERE user_id = ?`; - if (options.names) { - sql += ` AND prop_name IN("${options.names.join('","')}");`; - } else { - sql += ';'; - } - - let properties = {}; - userDb.each( - sql, - [userId], - (err, row) => { - if (err) { - return cb(err); - } - properties[row.prop_name] = row.prop_value; - }, - err => { - return cb(err, err ? null : properties); - } - ); + if (options.names) { + sql += ` AND prop_name IN("${options.names.join('","')}");`; + } else { + sql += ';'; } - // :TODO: make this much more flexible - propValue should allow for case-insensitive compare, etc. - static getUserIdsWithProperty(propName, propValue, cb) { - let userIds = []; - - userDb.each( - `SELECT user_id + let properties = {}; + userDb.each( + sql, + [userId], + (err, row) => { + if (err) { + return cb(err); + } + properties[row.prop_name] = row.prop_value; + }, + err => { + return cb(err, err ? null : properties); + } + ); + } + + // :TODO: make this much more flexible - propValue should allow for case-insensitive compare, etc. + static getUserIdsWithProperty(propName, propValue, cb) { + let userIds = []; + + userDb.each( + `SELECT user_id FROM user_property WHERE prop_name = ? AND prop_value = ?;`, - [propName, propValue], - (err, row) => { - if (row) { - userIds.push(row.user_id); - } - }, - () => { - return cb(null, userIds); - } - ); - } - - static getUserCount(cb) { - userDb.get( - `SELECT count() AS user_count + [propName, propValue], + (err, row) => { + if (row) { + userIds.push(row.user_id); + } + }, + () => { + return cb(null, userIds); + } + ); + } + + static getUserCount(cb) { + userDb.get( + `SELECT count() AS user_count FROM user;`, - (err, row) => { - if (err) { - return cb(err); - } - return cb(null, row.user_count); - } - ); - } - - static getUserList(options, cb) { - const userList = []; - - options.properties = options.properties || [UserProps.RealName]; - - const asList = []; - const joinList = []; - for (let i = 0; i < options.properties.length; ++i) { - const dbProp = options.properties[i]; - const propName = options.propsCamelCase ? _.camelCase(dbProp) : dbProp; - asList.push(`p${i}.prop_value AS ${propName}`); - joinList.push( - `LEFT OUTER JOIN user_property p${i} ON p${i}.user_id = u.id AND p${i}.prop_name = '${dbProp}'` - ); + (err, row) => { + if (err) { + return cb(err); } + return cb(null, row.user_count); + } + ); + } + + static getUserList(options, cb) { + const userList = []; + + options.properties = options.properties || [UserProps.RealName]; + + const asList = []; + const joinList = []; + for (let i = 0; i < options.properties.length; ++i) { + const dbProp = options.properties[i]; + const propName = options.propsCamelCase ? _.camelCase(dbProp) : dbProp; + asList.push(`p${i}.prop_value AS ${propName}`); + joinList.push( + `LEFT OUTER JOIN user_property p${i} ON p${i}.user_id = u.id AND p${i}.prop_name = '${dbProp}'` + ); + } - userDb.each( - `SELECT u.id as userId, u.user_name as userName, ${asList.join(', ')} + userDb.each( + `SELECT u.id as userId, u.user_name as userName, ${asList.join(', ')} FROM user u ${joinList.join(' ')} ORDER BY u.user_name;`, - (err, row) => { - if (err) { - return cb(err); - } - userList.push(row); - }, - err => { - return cb(err, userList); - } - ); - } - - static generatePasswordDerivedKeyAndSalt(password, cb) { - async.waterfall( - [ - function getSalt(callback) { - User.generatePasswordDerivedKeySalt((err, salt) => { - return callback(err, salt); - }); - }, - function getDk(salt, callback) { - User.generatePasswordDerivedKey(password, salt, (err, dk) => { - return callback(err, salt, dk); - }); - }, - ], - (err, salt, dk) => { - return cb(err, { salt: salt, dk: dk }); - } - ); - } - - static generatePasswordDerivedKeySalt(cb) { - crypto.randomBytes(User.PBKDF2.saltLen, (err, salt) => { - if (err) { - return cb(err); - } - return cb(null, salt.toString('hex')); - }); - } + (err, row) => { + if (err) { + return cb(err); + } + userList.push(row); + }, + err => { + return cb(err, userList); + } + ); + } + + static generatePasswordDerivedKeyAndSalt(password, cb) { + async.waterfall( + [ + function getSalt(callback) { + User.generatePasswordDerivedKeySalt((err, salt) => { + return callback(err, salt); + }); + }, + function getDk(salt, callback) { + User.generatePasswordDerivedKey(password, salt, (err, dk) => { + return callback(err, salt, dk); + }); + }, + ], + (err, salt, dk) => { + return cb(err, { salt: salt, dk: dk }); + } + ); + } + + static generatePasswordDerivedKeySalt(cb) { + crypto.randomBytes(User.PBKDF2.saltLen, (err, salt) => { + if (err) { + return cb(err); + } + return cb(null, salt.toString('hex')); + }); + } + + static generatePasswordDerivedKey(password, salt, cb) { + password = Buffer.from(password).toString('hex'); + + crypto.pbkdf2( + password, + salt, + User.PBKDF2.iterations, + User.PBKDF2.keyLen, + 'sha1', + (err, dk) => { + if (err) { + return cb(err); + } - static generatePasswordDerivedKey(password, salt, cb) { - password = Buffer.from(password).toString('hex'); - - crypto.pbkdf2( - password, - salt, - User.PBKDF2.iterations, - User.PBKDF2.keyLen, - 'sha1', - (err, dk) => { - if (err) { - return cb(err); - } - - return cb(null, dk.toString('hex')); - } - ); - } + return cb(null, dk.toString('hex')); + } + ); + } }; diff --git a/core/user_property.js b/core/user_property.js index c3f979b37..9f00aedb1 100644 --- a/core/user_property.js +++ b/core/user_property.js @@ -66,4 +66,6 @@ module.exports = { AuthFactor2OTP: 'auth_factor2_otp', // If present, OTP type for 2FA. See OTPTypes AuthFactor2OTPSecret: 'auth_factor2_otp_secret', // Secret used in conjunction with OTP 2FA AuthFactor2OTPBackupCodes: 'auth_factor2_otp_backup', // JSON array of backup codes + PublicKeyMain: 'public_key_main', // RSA public key for user + PrivateKeyMain: 'private_key_main', // RSA private key (corresponding to PublicKeyMain) }; From 344d4716ceb8370493025e14a7061b6ebdd89381 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Fri, 6 Jan 2023 13:15:29 -0600 Subject: [PATCH 028/233] Added ability to use .json to get JSON from self URL. Also added some logging. --- core/servers/content/web.js | 63 ++++++++++--------- .../content/web_handlers/activitypub.js | 25 +++++++- 2 files changed, 55 insertions(+), 33 deletions(-) diff --git a/core/servers/content/web.js b/core/servers/content/web.js index 6631ea5cd..f26ecc53e 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -5,7 +5,7 @@ const Log = require('../../logger.js').log; const ServerModule = require('../../server_module.js').ServerModule; const Config = require('../../config.js').get; -const { Errors, ErrorReasons } = require('../../enig_error.js'); +const { Errors } = require('../../enig_error.js'); const { loadModulesForCategory, moduleCategories } = require('../../module_util'); const WebHandlerModule = require('../../web_handler_module'); @@ -49,18 +49,18 @@ class Route { isValid() { return ( (this.pathRegExp instanceof RegExp && - -1 !== - [ - 'GET', - 'HEAD', - 'POST', - 'PUT', - 'DELETE', - 'CONNECT', - 'OPTIONS', - 'TRACE', - ].indexOf(this.method)) || - !_.isFunction(this.handler) + -1 !== + [ + 'GET', + 'HEAD', + 'POST', + 'PUT', + 'DELETE', + 'CONNECT', + 'OPTIONS', + 'TRACE', + ].indexOf(this.method)) || + !_.isFunction(this.handler) ); } @@ -96,13 +96,13 @@ exports.getModule = class WebServerModule extends ServerModule { } buildUrl(pathAndQuery) { - // - // Create a URL such as - // https://l33t.codes:44512/ + |pathAndQuery| - // - // Prefer HTTPS over HTTP. Be explicit about the port - // only if non-standard. Allow users to override full prefix in config. - // + // + // Create a URL such as + // https://l33t.codes:44512/ + |pathAndQuery| + // + // Prefer HTTPS over HTTP. Be explicit about the port + // only if non-standard. Allow users to override full prefix in config. + // const config = Config(); if (_.isString(config.contentServers.web.overrideUrlPrefix)) { return `${config.contentServers.web.overrideUrlPrefix}${pathAndQuery}`; @@ -113,15 +113,15 @@ exports.getModule = class WebServerModule extends ServerModule { if (config.contentServers.web.https.enabled) { schema = 'https://'; port = - 443 === config.contentServers.web.https.port - ? '' - : `:${config.contentServers.web.https.port}`; + 443 === config.contentServers.web.https.port + ? '' + : `:${config.contentServers.web.https.port}`; } else { schema = 'http://'; port = - 80 === config.contentServers.web.http.port - ? '' - : `:${config.contentServers.web.http.port}`; + 80 === config.contentServers.web.http.port + ? '' + : `:${config.contentServers.web.http.port}`; } return `${schema}${config.contentServers.web.domain}${port}${pathAndQuery}`; @@ -168,9 +168,12 @@ exports.getModule = class WebServerModule extends ServerModule { try { const normalizedName = _.camelCase(module.moduleInfo.name); if (!WebHandlerModule.isEnabled(normalizedName)) { + Log.info({ moduleName: normalizedName }, 'Skipping web handler module - not enabled.'); return nextModule(null); } + Log.info({ moduleName: normalizedName }, 'Initializing web handler module.'); + moduleInst.init(err => { return nextModule(err); }); @@ -326,8 +329,8 @@ exports.getModule = class WebServerModule extends ServerModule { const headers = { 'Content-Type': - mimeTypes.contentType(paths.basename(filePath)) || - mimeTypes.contentType('.bin'), + mimeTypes.contentType(paths.basename(filePath)) || + mimeTypes.contentType('.bin'), 'Content-Length': stats.size, }; @@ -359,8 +362,8 @@ exports.getModule = class WebServerModule extends ServerModule { const headers = { 'Content-Type': - mimeTypes.contentType(paths.basename(filePath)) || - mimeTypes.contentType('.bin'), + mimeTypes.contentType(paths.basename(filePath)) || + mimeTypes.contentType('.bin'), 'Content-Length': stats.size, }; diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 470adecc3..01770cba7 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -10,6 +10,7 @@ const { const UserProps = require('../../../user_property'); const { Errors } = require('../../../enig_error'); const Config = require('../../../config').get; +const Log = require('../../../logger').log; // deps const _ = require('lodash'); @@ -31,6 +32,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { if (!this.webServer) { return cb(Errors.UnexpectedState('Cannot access web server!')); } + Log.debug('Adding route for ActivityPub'); this.webServer.addRoute({ method: 'GET', @@ -42,20 +44,37 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _selfUrlRequestHandler(req, resp) { + Log.debug({ url: req.url }, 'Received request for self url'); const url = new URL(req.url, `https://${req.headers.host}`); - const accountName = url.pathname.substring(url.pathname.lastIndexOf('/') + 1); + let accountName = url.pathname.substring(url.pathname.lastIndexOf('/') + 1); + let sendActor = false; + + // Like Mastodon, if .json is appended onto URL then return the JSON content + if (accountName.endsWith('.json')) { + sendActor = true; + accountName = accountName.slice(0, -5); + } + Log.debug({ accountName: accountName }, 'Retrieving self url for account.'); userFromAccount(accountName, (err, user) => { if (err) { + Log.info({ accountName: accountName }, 'Unable to find user from account retrieving self url.'); return this._notFound(resp); } const accept = req.headers['accept'] || '*/*'; if (accept === 'application/activity+json') { - return this._selfAsActorHandler(user, req, resp); + sendActor = true; } - return this._standardSelfHandler(user, req, resp); + Log.debug({ sendActor: sendActor }, 'Sending actor JSON'); + + if (sendActor) { + return this._selfAsActorHandler(user, req, resp); + } + else { + return this._standardSelfHandler(user, req, resp); + } }); } From e478665456f3e1b3b68d366dda00e3edc12849d0 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Fri, 6 Jan 2023 13:42:15 -0600 Subject: [PATCH 029/233] Added public key to selfUrl --- .../content/web_handlers/activitypub.js | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 01770cba7..de5de0969 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -79,12 +79,15 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _selfAsActorHandler(user, req, resp) { - const body = JSON.stringify({ + + const sUrl = selfUrl(this.webServer, user); + + const bodyJson = { '@context': [ 'https://www.w3.org/ns/activitystreams', 'https://w3id.org/security/v1', ], - id: selfUrl(this.webServer, user), + id: sUrl, type: 'Person', preferredUsername: user.username, name: user.getSanitizedName('real'), @@ -97,10 +100,19 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { following: makeUserUrl(this.webServer, user, '/ap/users') + '/following', summary: user.getProperty(UserProps.AutoSignature) || '', url: webFingerProfileUrl(this.webServer, user), - publicKey: {}, // :TODO: we can start to define BBS related stuff with the community perhaps - }); + }; + + const publicKeyPem = user.getProperty(UserProps.PublicKeyMain); + if (!(_.isEmpty(publicKeyPem))) { + bodyJson['publicKey'] = { id: sUrl + '#main-key', owner: sUrl, publicKeyPem: user.getProperty(UserProps.PublicKeyMain) }; + } + else { + Log.debug({ User: user.username }, 'User does not have a publickey.'); + } + + const body = JSON.stringify(bodyJson); const headers = { 'Content-Type': 'application/activity+json', From d615b53f1f538f2ad957f7164baa66da8db744b1 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Fri, 6 Jan 2023 13:49:45 -0600 Subject: [PATCH 030/233] Small fixes to activitypub json output --- core/servers/content/web_handlers/activitypub.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index de5de0969..126f44212 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -94,10 +94,10 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { endpoints: { sharedInbox: 'TODO', }, - inbox: makeUserUrl(this.webServer, user, '/ap/users') + '/outbox', - outbox: makeUserUrl(this.webServer, user, '/ap/users') + '/inbox', - followers: makeUserUrl(this.webServer, user, '/ap/users') + '/followers', - following: makeUserUrl(this.webServer, user, '/ap/users') + '/following', + inbox: makeUserUrl(this.webServer, user, '/ap/users/') + '/inbox', + outbox: makeUserUrl(this.webServer, user, '/ap/users/') + '/outbox', + followers: makeUserUrl(this.webServer, user, '/ap/users/') + '/followers', + following: makeUserUrl(this.webServer, user, '/ap/users/') + '/following', summary: user.getProperty(UserProps.AutoSignature) || '', url: webFingerProfileUrl(this.webServer, user), From 848044bec638a70ff7c8d07a536b15bcfa8b1468 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 6 Jan 2023 13:49:13 -0700 Subject: [PATCH 031/233] Prettier --- core/servers/content/web.js | 68 +- .../content/web_handlers/activitypub.js | 26 +- core/user.js | 1858 +++++++++-------- 3 files changed, 983 insertions(+), 969 deletions(-) diff --git a/core/servers/content/web.js b/core/servers/content/web.js index f26ecc53e..463c07675 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -49,18 +49,18 @@ class Route { isValid() { return ( (this.pathRegExp instanceof RegExp && - -1 !== - [ - 'GET', - 'HEAD', - 'POST', - 'PUT', - 'DELETE', - 'CONNECT', - 'OPTIONS', - 'TRACE', - ].indexOf(this.method)) || - !_.isFunction(this.handler) + -1 !== + [ + 'GET', + 'HEAD', + 'POST', + 'PUT', + 'DELETE', + 'CONNECT', + 'OPTIONS', + 'TRACE', + ].indexOf(this.method)) || + !_.isFunction(this.handler) ); } @@ -96,13 +96,13 @@ exports.getModule = class WebServerModule extends ServerModule { } buildUrl(pathAndQuery) { - // - // Create a URL such as - // https://l33t.codes:44512/ + |pathAndQuery| - // - // Prefer HTTPS over HTTP. Be explicit about the port - // only if non-standard. Allow users to override full prefix in config. - // + // + // Create a URL such as + // https://l33t.codes:44512/ + |pathAndQuery| + // + // Prefer HTTPS over HTTP. Be explicit about the port + // only if non-standard. Allow users to override full prefix in config. + // const config = Config(); if (_.isString(config.contentServers.web.overrideUrlPrefix)) { return `${config.contentServers.web.overrideUrlPrefix}${pathAndQuery}`; @@ -113,15 +113,15 @@ exports.getModule = class WebServerModule extends ServerModule { if (config.contentServers.web.https.enabled) { schema = 'https://'; port = - 443 === config.contentServers.web.https.port - ? '' - : `:${config.contentServers.web.https.port}`; + 443 === config.contentServers.web.https.port + ? '' + : `:${config.contentServers.web.https.port}`; } else { schema = 'http://'; port = - 80 === config.contentServers.web.http.port - ? '' - : `:${config.contentServers.web.http.port}`; + 80 === config.contentServers.web.http.port + ? '' + : `:${config.contentServers.web.http.port}`; } return `${schema}${config.contentServers.web.domain}${port}${pathAndQuery}`; @@ -168,11 +168,17 @@ exports.getModule = class WebServerModule extends ServerModule { try { const normalizedName = _.camelCase(module.moduleInfo.name); if (!WebHandlerModule.isEnabled(normalizedName)) { - Log.info({ moduleName: normalizedName }, 'Skipping web handler module - not enabled.'); + Log.info( + { moduleName: normalizedName }, + 'Skipping web handler module - not enabled.' + ); return nextModule(null); } - Log.info({ moduleName: normalizedName }, 'Initializing web handler module.'); + Log.info( + { moduleName: normalizedName }, + 'Initializing web handler module.' + ); moduleInst.init(err => { return nextModule(err); @@ -329,8 +335,8 @@ exports.getModule = class WebServerModule extends ServerModule { const headers = { 'Content-Type': - mimeTypes.contentType(paths.basename(filePath)) || - mimeTypes.contentType('.bin'), + mimeTypes.contentType(paths.basename(filePath)) || + mimeTypes.contentType('.bin'), 'Content-Length': stats.size, }; @@ -362,8 +368,8 @@ exports.getModule = class WebServerModule extends ServerModule { const headers = { 'Content-Type': - mimeTypes.contentType(paths.basename(filePath)) || - mimeTypes.contentType('.bin'), + mimeTypes.contentType(paths.basename(filePath)) || + mimeTypes.contentType('.bin'), 'Content-Length': stats.size, }; diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 126f44212..7c3ffa0dd 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -58,7 +58,10 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { userFromAccount(accountName, (err, user) => { if (err) { - Log.info({ accountName: accountName }, 'Unable to find user from account retrieving self url.'); + Log.info( + { accountName: accountName }, + 'Unable to find user from account retrieving self url.' + ); return this._notFound(resp); } @@ -71,23 +74,21 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { if (sendActor) { return this._selfAsActorHandler(user, req, resp); - } - else { + } else { return this._standardSelfHandler(user, req, resp); } }); } _selfAsActorHandler(user, req, resp) { - - const sUrl = selfUrl(this.webServer, user); + const selfUrl = selfUrl(this.webServer, user); const bodyJson = { '@context': [ 'https://www.w3.org/ns/activitystreams', 'https://w3id.org/security/v1', ], - id: sUrl, + id: selfUrl, type: 'Person', preferredUsername: user.username, name: user.getSanitizedName('real'), @@ -105,11 +106,14 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }; const publicKeyPem = user.getProperty(UserProps.PublicKeyMain); - if (!(_.isEmpty(publicKeyPem))) { - bodyJson['publicKey'] = { id: sUrl + '#main-key', owner: sUrl, publicKeyPem: user.getProperty(UserProps.PublicKeyMain) }; - } - else { - Log.debug({ User: user.username }, 'User does not have a publickey.'); + if (!_.isEmpty(publicKeyPem)) { + bodyJson['publicKey'] = { + id: selfUrl + '#main-key', + owner: sUrl, + publicKeyPem: user.getProperty(UserProps.PublicKeyMain), + }; + } else { + Log.debug({ username: user.username }, 'User does not have a publickey.'); } const body = JSON.stringify(bodyJson); diff --git a/core/user.js b/core/user.js index 3ea4c5d95..8d6b16538 100644 --- a/core/user.js +++ b/core/user.js @@ -21,1005 +21,1009 @@ const sanatizeFilename = require('sanitize-filename'); const ssh2 = require('ssh2'); module.exports = class User { - constructor() { - this.userId = 0; - this.username = ''; - this.properties = {}; // name:value - this.groups = []; // group membership(s) - this.authFactor = User.AuthFactors.None; - this.statusFlags = User.StatusFlags.None; - } - - // static property accessors - static get RootUserID() { - return 1; - } - - static get AuthFactors() { - return { - None: 0, // Not yet authenticated in any way - Factor1: 1, // username + password/pubkey/etc. checked out - Factor2: 2, // validated with 2FA of some sort such as OTP - }; - } - - static get PBKDF2() { - return { - iterations: 1000, - keyLen: 128, - saltLen: 32, - }; - } - - static get StandardPropertyGroups() { - return { - auth: [ - UserProps.PassPbkdf2Salt, - UserProps.PassPbkdf2Dk, - UserProps.AuthPubKey, - ], - }; - } - - static get AccountStatus() { - return { - disabled: 0, // +op disabled - inactive: 1, // inactive, aka requires +op approval/activation - active: 2, // standard, active - locked: 3, // locked out (too many bad login attempts, etc.) - }; - } - - static get StatusFlags() { - return { - None: 0x00000000, - NotAvailable: 0x00000001, // Not currently available for chat, message, page, etc. - NotVisible: 0x00000002, // Invisible -- does not show online, last callers, etc. - }; - } - - isAuthenticated() { - return true === this.authenticated; - } - - isValid() { - if (this.userId <= 0 || this.username.length < Config().users.usernameMin) { - return false; + constructor() { + this.userId = 0; + this.username = ''; + this.properties = {}; // name:value + this.groups = []; // group membership(s) + this.authFactor = User.AuthFactors.None; + this.statusFlags = User.StatusFlags.None; } - return this.hasValidPasswordProperties(); - } + // static property accessors + static get RootUserID() { + return 1; + } - hasValidPasswordProperties() { - const salt = this.getProperty(UserProps.PassPbkdf2Salt); - const dk = this.getProperty(UserProps.PassPbkdf2Dk); + static get AuthFactors() { + return { + None: 0, // Not yet authenticated in any way + Factor1: 1, // username + password/pubkey/etc. checked out + Factor2: 2, // validated with 2FA of some sort such as OTP + }; + } - if ( - !salt || - !dk || - salt.length !== User.PBKDF2.saltLen * 2 || - dk.length !== User.PBKDF2.keyLen * 2 - ) { - return false; + static get PBKDF2() { + return { + iterations: 1000, + keyLen: 128, + saltLen: 32, + }; } - return true; - } + static get StandardPropertyGroups() { + return { + auth: [ + UserProps.PassPbkdf2Salt, + UserProps.PassPbkdf2Dk, + UserProps.AuthPubKey, + ], + }; + } - isRoot() { - return User.isRootUserId(this.userId); - } + static get AccountStatus() { + return { + disabled: 0, // +op disabled + inactive: 1, // inactive, aka requires +op approval/activation + active: 2, // standard, active + locked: 3, // locked out (too many bad login attempts, etc.) + }; + } - isSysOp() { - // alias to isRoot() - return this.isRoot(); - } + static get StatusFlags() { + return { + None: 0x00000000, + NotAvailable: 0x00000001, // Not currently available for chat, message, page, etc. + NotVisible: 0x00000002, // Invisible -- does not show online, last callers, etc. + }; + } - isGroupMember(groupNames) { - if (_.isString(groupNames)) { - groupNames = [groupNames]; + isAuthenticated() { + return true === this.authenticated; } - const isMember = groupNames.some(gn => -1 !== this.groups.indexOf(gn)); - return isMember; - } - - getSanitizedName(type = 'username') { - const name = - 'real' === type ? this.getProperty(UserProps.RealName) : this.username; - return sanatizeFilename(name) || `user${this.userId.toString()}`; - } - - isAvailable() { - return (this.statusFlags & User.StatusFlags.NotAvailable) == 0; - } - - isVisible() { - return (this.statusFlags & User.StatusFlags.NotVisible) == 0; - } - - setAvailability(available) { - if (available) { - this.statusFlags &= ~User.StatusFlags.NotAvailable; - } else { - this.statusFlags |= User.StatusFlags.NotAvailable; + isValid() { + if (this.userId <= 0 || this.username.length < Config().users.usernameMin) { + return false; + } + + return this.hasValidPasswordProperties(); } - } - setVisibility(visible) { - if (visible) { - this.statusFlags &= ~User.StatusFlags.NotVisible; - } else { - this.statusFlags |= User.StatusFlags.NotVisible; + hasValidPasswordProperties() { + const salt = this.getProperty(UserProps.PassPbkdf2Salt); + const dk = this.getProperty(UserProps.PassPbkdf2Dk); + + if ( + !salt || + !dk || + salt.length !== User.PBKDF2.saltLen * 2 || + dk.length !== User.PBKDF2.keyLen * 2 + ) { + return false; + } + + return true; } - } - getLegacySecurityLevel() { - if (this.isRoot() || this.isGroupMember('sysops')) { - return 100; + isRoot() { + return User.isRootUserId(this.userId); } - if (this.isGroupMember('users')) { - return 30; + isSysOp() { + // alias to isRoot() + return this.isRoot(); } - return 10; // :TODO: Is this what we want? - } - - processFailedLogin(userId, cb) { - async.waterfall( - [ - callback => { - return User.getUser(userId, callback); - }, - (tempUser, callback) => { - return StatLog.incrementUserStat( - tempUser, - UserProps.FailedLoginAttempts, - 1, - (err, failedAttempts) => { - return callback(null, tempUser, failedAttempts); - } - ); - }, - (tempUser, failedAttempts, callback) => { - const lockAccount = _.get(Config(), 'users.failedLogin.lockAccount'); - if (lockAccount > 0 && failedAttempts >= lockAccount) { - const props = { - [UserProps.AccountStatus]: User.AccountStatus.locked, - [UserProps.AccountLockedTs]: StatLog.now, - }; - if ( - !_.has(tempUser.properties, UserProps.AccountLockedPrevStatus) - ) { - props[UserProps.AccountLockedPrevStatus] = - tempUser.getProperty(UserProps.AccountStatus); - } - Log.info( - { userId, failedAttempts }, - '(Re)setting account to locked due to failed logins' - ); - return tempUser.persistProperties(props, callback); - } - - return cb(null); - }, - ], - err => { - return cb(err); - } - ); - } - - unlockAccount(cb) { - const prevStatus = this.getProperty(UserProps.AccountLockedPrevStatus); - if (!prevStatus) { - return cb(null); // nothing to do + isGroupMember(groupNames) { + if (_.isString(groupNames)) { + groupNames = [groupNames]; + } + + const isMember = groupNames.some(gn => -1 !== this.groups.indexOf(gn)); + return isMember; } - this.persistProperty(UserProps.AccountStatus, prevStatus, err => { - if (err) { - return cb(err); - } - - return this.removeProperties( - [UserProps.AccountLockedPrevStatus, UserProps.AccountLockedTs], - cb - ); - }); - } - - static get AuthFactor1Types() { - return { - SSHPubKey: 'sshPubKey', - Password: 'password', - TLSClient: 'tlsClientAuth', - }; - } - - authenticateFactor1(authInfo, cb) { - const username = authInfo.username; - const self = this; - const tempAuthInfo = {}; - - const validatePassword = (props, callback) => { - User.generatePasswordDerivedKey( - authInfo.password, - props[UserProps.PassPbkdf2Salt], - (err, dk) => { - if (err) { - return callback(err); - } - - // - // Use constant time comparison here for security feel-goods - // - const passDkBuf = Buffer.from(dk, 'hex'); - const propsDkBuf = Buffer.from(props[UserProps.PassPbkdf2Dk], 'hex'); - - return callback( - crypto.timingSafeEqual(passDkBuf, propsDkBuf) - ? null - : Errors.AccessDenied('Invalid password') - ); + getSanitizedName(type = 'username') { + const name = + 'real' === type ? this.getProperty(UserProps.RealName) : this.username; + return sanatizeFilename(name) || `user${this.userId.toString()}`; + } + + isAvailable() { + return (this.statusFlags & User.StatusFlags.NotAvailable) == 0; + } + + isVisible() { + return (this.statusFlags & User.StatusFlags.NotVisible) == 0; + } + + setAvailability(available) { + if (available) { + this.statusFlags &= ~User.StatusFlags.NotAvailable; + } else { + this.statusFlags |= User.StatusFlags.NotAvailable; + } + } + + setVisibility(visible) { + if (visible) { + this.statusFlags &= ~User.StatusFlags.NotVisible; + } else { + this.statusFlags |= User.StatusFlags.NotVisible; + } + } + + getLegacySecurityLevel() { + if (this.isRoot() || this.isGroupMember('sysops')) { + return 100; + } + + if (this.isGroupMember('users')) { + return 30; } - ); - }; - - const validatePubKey = (props, callback) => { - const pubKeyActual = ssh2.utils.parseKey(props[UserProps.AuthPubKey]); - if (!pubKeyActual) { - return callback(Errors.AccessDenied('Invalid public key')); - } - - if ( - authInfo.pubKey.key.algo != pubKeyActual.type || - !crypto.timingSafeEqual( - authInfo.pubKey.key.data, - pubKeyActual.getPublicSSH() - ) - ) { - return callback(Errors.AccessDenied('Invalid public key')); - } - - return callback(null); - }; - - async.waterfall( - [ - function fetchUserId(callback) { - // get user ID - User.getUserIdAndName(username, (err, uid, un) => { - tempAuthInfo.userId = uid; - tempAuthInfo.username = un; - - return callback(err); - }); - }, - function getRequiredAuthProperties(callback) { - // fetch properties required for authentication - User.loadProperties( - tempAuthInfo.userId, - { names: User.StandardPropertyGroups.auth }, - (err, props) => { - return callback(err, props); + + return 10; // :TODO: Is this what we want? + } + + processFailedLogin(userId, cb) { + async.waterfall( + [ + callback => { + return User.getUser(userId, callback); + }, + (tempUser, callback) => { + return StatLog.incrementUserStat( + tempUser, + UserProps.FailedLoginAttempts, + 1, + (err, failedAttempts) => { + return callback(null, tempUser, failedAttempts); + } + ); + }, + (tempUser, failedAttempts, callback) => { + const lockAccount = _.get(Config(), 'users.failedLogin.lockAccount'); + if (lockAccount > 0 && failedAttempts >= lockAccount) { + const props = { + [UserProps.AccountStatus]: User.AccountStatus.locked, + [UserProps.AccountLockedTs]: StatLog.now, + }; + if ( + !_.has(tempUser.properties, UserProps.AccountLockedPrevStatus) + ) { + props[UserProps.AccountLockedPrevStatus] = + tempUser.getProperty(UserProps.AccountStatus); + } + Log.info( + { userId, failedAttempts }, + '(Re)setting account to locked due to failed logins' + ); + return tempUser.persistProperties(props, callback); + } + + return cb(null); + }, + ], + err => { + return cb(err); } - ); - }, - function validatePassOrPubKey(props, callback) { - if (User.AuthFactor1Types.SSHPubKey === authInfo.type) { - return validatePubKey(props, callback); - } - return validatePassword(props, callback); - }, - function initProps(callback) { - User.loadProperties(tempAuthInfo.userId, (err, allProps) => { - if (!err) { - tempAuthInfo.properties = allProps; + ); + } + + unlockAccount(cb) { + const prevStatus = this.getProperty(UserProps.AccountLockedPrevStatus); + if (!prevStatus) { + return cb(null); // nothing to do + } + + this.persistProperty(UserProps.AccountStatus, prevStatus, err => { + if (err) { + return cb(err); } - return callback(err); - }); - }, - function checkAccountStatus(callback) { - const accountStatus = parseInt( - tempAuthInfo.properties[UserProps.AccountStatus], - 10 - ); - if (User.AccountStatus.disabled === accountStatus) { - return callback( - Errors.AccessDenied('Account disabled', ErrorReasons.Disabled) + return this.removeProperties( + [UserProps.AccountLockedPrevStatus, UserProps.AccountLockedTs], + cb ); - } - if (User.AccountStatus.inactive === accountStatus) { - return callback( - Errors.AccessDenied('Account inactive', ErrorReasons.Inactive) - ); - } + }); + } - if (User.AccountStatus.locked === accountStatus) { - const autoUnlockMinutes = _.get( - Config(), - 'users.failedLogin.autoUnlockMinutes' - ); - const lockedTs = moment( - tempAuthInfo.properties[UserProps.AccountLockedTs] + static get AuthFactor1Types() { + return { + SSHPubKey: 'sshPubKey', + Password: 'password', + TLSClient: 'tlsClientAuth', + }; + } + + authenticateFactor1(authInfo, cb) { + const username = authInfo.username; + const self = this; + const tempAuthInfo = {}; + + const validatePassword = (props, callback) => { + User.generatePasswordDerivedKey( + authInfo.password, + props[UserProps.PassPbkdf2Salt], + (err, dk) => { + if (err) { + return callback(err); + } + + // + // Use constant time comparison here for security feel-goods + // + const passDkBuf = Buffer.from(dk, 'hex'); + const propsDkBuf = Buffer.from(props[UserProps.PassPbkdf2Dk], 'hex'); + + return callback( + crypto.timingSafeEqual(passDkBuf, propsDkBuf) + ? null + : Errors.AccessDenied('Invalid password') + ); + } ); - if (autoUnlockMinutes && lockedTs.isValid()) { - const minutesSinceLocked = moment().diff(lockedTs, 'minutes'); - if (minutesSinceLocked >= autoUnlockMinutes) { - // allow the login - we will clear any lock there - Log.info( - { - username, - userId: tempAuthInfo.userId, - lockedAt: lockedTs.format(), - }, - 'Locked account will now be unlocked due to auto-unlock minutes policy' - ); - return callback(null); - } + }; + + const validatePubKey = (props, callback) => { + const pubKeyActual = ssh2.utils.parseKey(props[UserProps.AuthPubKey]); + if (!pubKeyActual) { + return callback(Errors.AccessDenied('Invalid public key')); } - return callback( - Errors.AccessDenied('Account is locked', ErrorReasons.Locked) - ); - } - - // anything else besides active is still not allowed - if (User.AccountStatus.active !== accountStatus) { - return callback(Errors.AccessDenied('Account is not active')); - } - - return callback(null); - }, - function initGroups(callback) { - userGroup.getGroupsForUser(tempAuthInfo.userId, (err, groups) => { - if (!err) { - tempAuthInfo.groups = groups; + + if ( + authInfo.pubKey.key.algo != pubKeyActual.type || + !crypto.timingSafeEqual( + authInfo.pubKey.key.data, + pubKeyActual.getPublicSSH() + ) + ) { + return callback(Errors.AccessDenied('Invalid public key')); } - return callback(err); - }); - }, - ], - err => { - if (err) { - // - // If we failed login due to something besides an inactive or disabled account, - // we need to update failure status and possibly lock the account. - // - // If locked already, update the lock timestamp -- ie, extend the lockout period. - // - if ( - ![ErrorReasons.Disabled, ErrorReasons.Inactive].includes( - err.reasonCode - ) && - tempAuthInfo.userId - ) { - self.processFailedLogin(tempAuthInfo.userId, persistErr => { - if (persistErr) { - Log.warn( - { error: persistErr.message }, - 'Failed to persist failed login information' - ); - } - return cb(err); // pass along original error - }); - } else { - return cb(err); - } - } else { - // everything checks out - load up info - self.userId = tempAuthInfo.userId; - self.username = tempAuthInfo.username; - self.properties = tempAuthInfo.properties; - self.groups = tempAuthInfo.groups; - self.authFactor = User.AuthFactors.Factor1; - - // - // If 2FA/OTP is required, this user is not quite authenticated yet. - // - self.authenticated = !(self.getProperty(UserProps.AuthFactor2OTP) - ? true - : false); - - self.removeProperty(UserProps.FailedLoginAttempts); - - // - // We need to *revert* any locked status back to - // the user's previous status & clean up props. - // - self.unlockAccount(unlockErr => { - if (unlockErr) { - Log.warn( - { error: unlockErr.message }, - 'Failed to unlock account' - ); + return callback(null); + }; + + async.waterfall( + [ + function fetchUserId(callback) { + // get user ID + User.getUserIdAndName(username, (err, uid, un) => { + tempAuthInfo.userId = uid; + tempAuthInfo.username = un; + + return callback(err); + }); + }, + function getRequiredAuthProperties(callback) { + // fetch properties required for authentication + User.loadProperties( + tempAuthInfo.userId, + { names: User.StandardPropertyGroups.auth }, + (err, props) => { + return callback(err, props); + } + ); + }, + function validatePassOrPubKey(props, callback) { + if (User.AuthFactor1Types.SSHPubKey === authInfo.type) { + return validatePubKey(props, callback); + } + return validatePassword(props, callback); + }, + function initProps(callback) { + User.loadProperties(tempAuthInfo.userId, (err, allProps) => { + if (!err) { + tempAuthInfo.properties = allProps; + } + + return callback(err); + }); + }, + function checkAccountStatus(callback) { + const accountStatus = parseInt( + tempAuthInfo.properties[UserProps.AccountStatus], + 10 + ); + if (User.AccountStatus.disabled === accountStatus) { + return callback( + Errors.AccessDenied('Account disabled', ErrorReasons.Disabled) + ); + } + if (User.AccountStatus.inactive === accountStatus) { + return callback( + Errors.AccessDenied('Account inactive', ErrorReasons.Inactive) + ); + } + + if (User.AccountStatus.locked === accountStatus) { + const autoUnlockMinutes = _.get( + Config(), + 'users.failedLogin.autoUnlockMinutes' + ); + const lockedTs = moment( + tempAuthInfo.properties[UserProps.AccountLockedTs] + ); + if (autoUnlockMinutes && lockedTs.isValid()) { + const minutesSinceLocked = moment().diff(lockedTs, 'minutes'); + if (minutesSinceLocked >= autoUnlockMinutes) { + // allow the login - we will clear any lock there + Log.info( + { + username, + userId: tempAuthInfo.userId, + lockedAt: lockedTs.format(), + }, + 'Locked account will now be unlocked due to auto-unlock minutes policy' + ); + return callback(null); + } + } + return callback( + Errors.AccessDenied('Account is locked', ErrorReasons.Locked) + ); + } + + // anything else besides active is still not allowed + if (User.AccountStatus.active !== accountStatus) { + return callback(Errors.AccessDenied('Account is not active')); + } + + return callback(null); + }, + function initGroups(callback) { + userGroup.getGroupsForUser(tempAuthInfo.userId, (err, groups) => { + if (!err) { + tempAuthInfo.groups = groups; + } + + return callback(err); + }); + }, + ], + err => { + if (err) { + // + // If we failed login due to something besides an inactive or disabled account, + // we need to update failure status and possibly lock the account. + // + // If locked already, update the lock timestamp -- ie, extend the lockout period. + // + if ( + ![ErrorReasons.Disabled, ErrorReasons.Inactive].includes( + err.reasonCode + ) && + tempAuthInfo.userId + ) { + self.processFailedLogin(tempAuthInfo.userId, persistErr => { + if (persistErr) { + Log.warn( + { error: persistErr.message }, + 'Failed to persist failed login information' + ); + } + return cb(err); // pass along original error + }); + } else { + return cb(err); + } + } else { + // everything checks out - load up info + self.userId = tempAuthInfo.userId; + self.username = tempAuthInfo.username; + self.properties = tempAuthInfo.properties; + self.groups = tempAuthInfo.groups; + self.authFactor = User.AuthFactors.Factor1; + + // + // If 2FA/OTP is required, this user is not quite authenticated yet. + // + self.authenticated = !(self.getProperty(UserProps.AuthFactor2OTP) + ? true + : false); + + self.removeProperty(UserProps.FailedLoginAttempts); + + // + // We need to *revert* any locked status back to + // the user's previous status & clean up props. + // + self.unlockAccount(unlockErr => { + if (unlockErr) { + Log.warn( + { error: unlockErr.message }, + 'Failed to unlock account' + ); + } + return cb(null); + }); + } } - return cb(null); - }); + ); + } + + create(createUserInfo, cb) { + assert(0 === this.userId); + const config = Config(); + + if ( + this.username.length < config.users.usernameMin || + this.username.length > config.users.usernameMax + ) { + return cb(Errors.Invalid('Invalid username length')); } - } - ); - } - - create(createUserInfo, cb) { - assert(0 === this.userId); - const config = Config(); - - if ( - this.username.length < config.users.usernameMin || - this.username.length > config.users.usernameMax - ) { - return cb(Errors.Invalid('Invalid username length')); + + const self = this; + + // :TODO: set various defaults, e.g. default activation status, etc. + self.properties[UserProps.AccountStatus] = config.users.requireActivation + ? User.AccountStatus.inactive + : User.AccountStatus.active; + + async.waterfall( + [ + function beginTransaction(callback) { + return userDb.beginTransaction(callback); + }, + function createUserRec(trans, callback) { + trans.run( + `INSERT INTO user (user_name) + VALUES (?);`, + [self.username], + function inserted(err) { + // use classic function for |this| + if (err) { + return callback(err); + } + + self.userId = this.lastID; + + // Do not require activation for userId 1 (root/admin) + if (User.RootUserID === self.userId) { + self.properties[UserProps.AccountStatus] = + User.AccountStatus.active; + } + + return callback(null, trans); + } + ); + }, + function genAuthCredentials(trans, callback) { + User.generatePasswordDerivedKeyAndSalt( + createUserInfo.password, + (err, info) => { + if (err) { + return callback(err); + } + + self.properties[UserProps.PassPbkdf2Salt] = info.salt; + self.properties[UserProps.PassPbkdf2Dk] = info.dk; + return callback(null, trans); + } + ); + }, + function setInitialGroupMembership(trans, callback) { + // Assign initial groups. Must perform a clone: #235 - All users are sysops (and I can't un-sysop them) + self.groups = [...config.users.defaultGroups]; + + if (User.RootUserID === self.userId) { + // root/SysOp? + self.groups.push('sysops'); + } + + return callback(null, trans); + }, + function saveAll(trans, callback) { + self.persistWithTransaction(trans, err => { + return callback(err, trans); + }); + }, + function sendEvent(trans, callback) { + Events.emit(Events.getSystemEvents().NewUser, { + user: Object.assign({}, self, { + sessionId: createUserInfo.sessionId, + }), + }); + return callback(null, trans); + }, + ], + (err, trans) => { + if (trans) { + trans[err ? 'rollback' : 'commit'](transErr => { + return cb(err ? err : transErr); + }); + } else { + return cb(err); + } + } + ); } - const self = this; - - // :TODO: set various defaults, e.g. default activation status, etc. - self.properties[UserProps.AccountStatus] = config.users.requireActivation - ? User.AccountStatus.inactive - : User.AccountStatus.active; - - async.waterfall( - [ - function beginTransaction(callback) { - return userDb.beginTransaction(callback); - }, - function createUserRec(trans, callback) { - trans.run( - `INSERT INTO user (user_name) - VALUES (?);`, - [self.username], - function inserted(err) { - // use classic function for |this| - if (err) { - return callback(err); - } - - self.userId = this.lastID; - - // Do not require activation for userId 1 (root/admin) - if (User.RootUserID === self.userId) { - self.properties[UserProps.AccountStatus] = - User.AccountStatus.active; - } - - return callback(null, trans); + persistWithTransaction(trans, cb) { + assert(this.userId > 0); + + const self = this; + + async.series( + [ + function setKeyPair(callback) { + self.generateMainKeyPair(err => { + return callback(err); + }); + }, + function saveProps(callback) { + self.persistProperties(self.properties, trans, err => { + return callback(err); + }); + }, + function saveGroups(callback) { + userGroup.addUserToGroups(self.userId, self.groups, trans, err => { + return callback(err); + }); + }, + ], + err => { + return cb(err); } - ); - }, - function genAuthCredentials(trans, callback) { - User.generatePasswordDerivedKeyAndSalt( - createUserInfo.password, - (err, info) => { - if (err) { - return callback(err); - } - - self.properties[UserProps.PassPbkdf2Salt] = info.salt; - self.properties[UserProps.PassPbkdf2Dk] = info.dk; - return callback(null, trans); + ); + } + + static persistPropertyByUserId(userId, propName, propValue, cb) { + userDb.run( + `REPLACE INTO user_property (user_id, prop_name, prop_value) + VALUES (?, ?, ?);`, + [userId, propName, propValue], + err => { + if (cb) { + return cb(err, propValue); + } } - ); - }, - function setInitialGroupMembership(trans, callback) { - // Assign initial groups. Must perform a clone: #235 - All users are sysops (and I can't un-sysop them) - self.groups = [...config.users.defaultGroups]; - - if (User.RootUserID === self.userId) { - // root/SysOp? - self.groups.push('sysops'); - } - - return callback(null, trans); - }, - function saveAll(trans, callback) { - self.persistWithTransaction(trans, err => { - return callback(err, trans); - }); - }, - function sendEvent(trans, callback) { - Events.emit(Events.getSystemEvents().NewUser, { - user: Object.assign({}, self, { - sessionId: createUserInfo.sessionId, - }), - }); - return callback(null, trans); - }, - ], - (err, trans) => { - if (trans) { - trans[err ? 'rollback' : 'commit'](transErr => { - return cb(err ? err : transErr); - }); + ); + } + + setProperty(propName, propValue) { + this.properties[propName] = propValue; + } + + incrementProperty(propName, incrementBy) { + incrementBy = incrementBy || 1; + let newValue = parseInt(this.getProperty(propName)); + if (newValue) { + newValue += incrementBy; } else { - return cb(err); + newValue = incrementBy; } - } - ); - } - - persistWithTransaction(trans, cb) { - assert(this.userId > 0); - - const self = this; - - async.series( - [ - function setKeyPair(callback) { - self.generateMainKeyPair(err => { - return callback(err); - }); - }, - function saveProps(callback) { - self.persistProperties(self.properties, trans, err => { - return callback(err); - }); - }, - function saveGroups(callback) { - userGroup.addUserToGroups(self.userId, self.groups, trans, err => { - return callback(err); - }); - }, - ], - err => { - return cb(err); - } - ); - } - - static persistPropertyByUserId(userId, propName, propValue, cb) { - userDb.run( - `REPLACE INTO user_property (user_id, prop_name, prop_value) - VALUES (?, ?, ?);`, - [userId, propName, propValue], - err => { - if (cb) { - return cb(err, propValue); - } - } - ); - } - - setProperty(propName, propValue) { - this.properties[propName] = propValue; - } - - incrementProperty(propName, incrementBy) { - incrementBy = incrementBy || 1; - let newValue = parseInt(this.getProperty(propName)); - if (newValue) { - newValue += incrementBy; - } else { - newValue = incrementBy; + this.setProperty(propName, newValue); + return newValue; } - this.setProperty(propName, newValue); - return newValue; - } - - getProperty(propName) { - return this.properties[propName]; - } - - getPropertyAsNumber(propName) { - return parseInt(this.getProperty(propName), 10); - } - - persistProperty(propName, propValue, cb) { - // update live props - this.properties[propName] = propValue; - - return User.persistPropertyByUserId(this.userId, propName, propValue, cb); - } - - removeProperty(propName, cb) { - // update live - delete this.properties[propName]; - - userDb.run( - `DELETE FROM user_property - WHERE user_id = ? AND prop_name = ?;`, - [this.userId, propName], - err => { - if (cb) { - return cb(err); - } - } - ); - } - - removeProperties(propNames, cb) { - async.each( - propNames, - (name, next) => { - return this.removeProperty(name, next); - }, - err => { - if (cb) { - return cb(err); - } - } - ); - } - - generateMainKeyPair(cb) { - crypto.generateKeyPair('rsa', { - modulusLength: 4096, - publicKeyEncoding: { - type: 'spki', - format: 'pem' - }, - privateKeyEncoding: { - type: 'pkcs8', - format: 'pem' - } - }, (err, publicKey, privateKey) => { - if (!err) { - this.setProperty(UserProps.PrivateKeyMain, privateKey); - this.setProperty(UserProps.PublicKeyMain, publicKey); - } - return cb(err); - }); - } - - persistProperties(properties, transOrDb, cb) { - if (!_.isFunction(cb) && _.isFunction(transOrDb)) { - cb = transOrDb; - transOrDb = userDb; + + getProperty(propName) { + return this.properties[propName]; } - const self = this; + getPropertyAsNumber(propName) { + return parseInt(this.getProperty(propName), 10); + } - // update live props - _.merge(this.properties, properties); + persistProperty(propName, propValue, cb) { + // update live props + this.properties[propName] = propValue; - const stmt = transOrDb.prepare( - `REPLACE INTO user_property (user_id, prop_name, prop_value) - VALUES (?, ?, ?);` - ); + return User.persistPropertyByUserId(this.userId, propName, propValue, cb); + } - async.each( - Object.keys(properties), - (propName, nextProp) => { - stmt.run(self.userId, propName, properties[propName], err => { - return nextProp(err); - }); - }, - err => { - if (err) { - return cb(err); - } + removeProperty(propName, cb) { + // update live + delete this.properties[propName]; + + userDb.run( + `DELETE FROM user_property + WHERE user_id = ? AND prop_name = ?;`, + [this.userId, propName], + err => { + if (cb) { + return cb(err); + } + } + ); + } - stmt.finalize(() => { - return cb(null); - }); - } - ); - } - - setNewAuthCredentials(password, cb) { - User.generatePasswordDerivedKeyAndSalt(password, (err, info) => { - if (err) { - return cb(err); - } - - const newProperties = { - [UserProps.PassPbkdf2Salt]: info.salt, - [UserProps.PassPbkdf2Dk]: info.dk, - }; - - this.persistProperties(newProperties, err => { - return cb(err); - }); - }); - } - - getAge() { - const birthdate = this.getProperty(UserProps.Birthdate); - if (birthdate) { - return moment().diff(birthdate, 'years'); + removeProperties(propNames, cb) { + async.each( + propNames, + (name, next) => { + return this.removeProperty(name, next); + }, + err => { + if (cb) { + return cb(err); + } + } + ); } - } - - static getUser(userId, cb) { - async.waterfall( - [ - function fetchUserId(callback) { - User.getUserName(userId, (err, userName) => { - return callback(null, userName); - }); - }, - function initProps(userName, callback) { - User.loadProperties(userId, (err, properties) => { - return callback(err, userName, properties); - }); - }, - function initGroups(userName, properties, callback) { - userGroup.getGroupsForUser(userId, (err, groups) => { - return callback(null, userName, properties, groups); - }); - }, - ], - (err, userName, properties, groups) => { - const user = new User(); - user.userId = userId; - user.username = userName; - user.properties = properties; - user.groups = groups; - - // explicitly NOT an authenticated user! - user.authenticated = false; - user.authFactor = User.AuthFactors.None; - - return cb(err, user); - } - ); - } - - static getUserInfo(userId, propsList, cb) { - if (!cb && _.isFunction(propsList)) { - cb = propsList; - propsList = [ - UserProps.RealName, - UserProps.Sex, - UserProps.EmailAddress, - UserProps.Location, - UserProps.Affiliations, - ]; + + generateMainKeyPair(cb) { + crypto.generateKeyPair( + 'rsa', + { + modulusLength: 4096, + publicKeyEncoding: { + type: 'spki', + format: 'pem', + }, + privateKeyEncoding: { + type: 'pkcs8', + format: 'pem', + }, + }, + (err, publicKey, privateKey) => { + if (!err) { + this.setProperty(UserProps.PrivateKeyMain, privateKey); + this.setProperty(UserProps.PublicKeyMain, publicKey); + } + return cb(err); + } + ); } - async.waterfall( - [ - callback => { - return User.getUserName(userId, callback); - }, - (userName, callback) => { - User.loadProperties(userId, { names: propsList }, (err, props) => { - return callback( - err, - Object.assign({}, props, { user_name: userName }) - ); - }); - }, - ], - (err, userProps) => { - if (err) { - return cb(err); + persistProperties(properties, transOrDb, cb) { + if (!_.isFunction(cb) && _.isFunction(transOrDb)) { + cb = transOrDb; + transOrDb = userDb; } - const userInfo = {}; - Object.keys(userProps).forEach(key => { - userInfo[_.camelCase(key)] = userProps[key] || 'N/A'; + const self = this; + + // update live props + _.merge(this.properties, properties); + + const stmt = transOrDb.prepare( + `REPLACE INTO user_property (user_id, prop_name, prop_value) + VALUES (?, ?, ?);` + ); + + async.each( + Object.keys(properties), + (propName, nextProp) => { + stmt.run(self.userId, propName, properties[propName], err => { + return nextProp(err); + }); + }, + err => { + if (err) { + return cb(err); + } + + stmt.finalize(() => { + return cb(null); + }); + } + ); + } + + setNewAuthCredentials(password, cb) { + User.generatePasswordDerivedKeyAndSalt(password, (err, info) => { + if (err) { + return cb(err); + } + + const newProperties = { + [UserProps.PassPbkdf2Salt]: info.salt, + [UserProps.PassPbkdf2Dk]: info.dk, + }; + + this.persistProperties(newProperties, err => { + return cb(err); + }); }); + } - return cb(null, userInfo); - } - ); - } - - static isRootUserId(userId) { - return User.RootUserID === userId; - } - - static getUserIdAndName(username, cb) { - userDb.get( - `SELECT id, user_name - FROM user - WHERE user_name LIKE ?;`, - [username], - (err, row) => { - if (err) { - return cb(err); + getAge() { + const birthdate = this.getProperty(UserProps.Birthdate); + if (birthdate) { + return moment().diff(birthdate, 'years'); } + } - if (row) { - return cb(null, row.id, row.user_name); - } + static getUser(userId, cb) { + async.waterfall( + [ + function fetchUserId(callback) { + User.getUserName(userId, (err, userName) => { + return callback(null, userName); + }); + }, + function initProps(userName, callback) { + User.loadProperties(userId, (err, properties) => { + return callback(err, userName, properties); + }); + }, + function initGroups(userName, properties, callback) { + userGroup.getGroupsForUser(userId, (err, groups) => { + return callback(null, userName, properties, groups); + }); + }, + ], + (err, userName, properties, groups) => { + const user = new User(); + user.userId = userId; + user.username = userName; + user.properties = properties; + user.groups = groups; + + // explicitly NOT an authenticated user! + user.authenticated = false; + user.authFactor = User.AuthFactors.None; + + return cb(err, user); + } + ); + } - return cb(Errors.DoesNotExist('No matching username')); - } - ); - } - - static getUserIdAndNameByRealName(realName, cb) { - userDb.get( - `SELECT id, user_name - FROM user - WHERE id = ( - SELECT user_id - FROM user_property - WHERE prop_name='${UserProps.RealName}' AND prop_value LIKE ? - );`, - [realName], - (err, row) => { - if (err) { - return cb(err); + static getUserInfo(userId, propsList, cb) { + if (!cb && _.isFunction(propsList)) { + cb = propsList; + propsList = [ + UserProps.RealName, + UserProps.Sex, + UserProps.EmailAddress, + UserProps.Location, + UserProps.Affiliations, + ]; } - if (row) { - return cb(null, row.id, row.user_name); - } + async.waterfall( + [ + callback => { + return User.getUserName(userId, callback); + }, + (userName, callback) => { + User.loadProperties(userId, { names: propsList }, (err, props) => { + return callback( + err, + Object.assign({}, props, { user_name: userName }) + ); + }); + }, + ], + (err, userProps) => { + if (err) { + return cb(err); + } + + const userInfo = {}; + Object.keys(userProps).forEach(key => { + userInfo[_.camelCase(key)] = userProps[key] || 'N/A'; + }); + + return cb(null, userInfo); + } + ); + } + + static isRootUserId(userId) { + return User.RootUserID === userId; + } + + static getUserIdAndName(username, cb) { + userDb.get( + `SELECT id, user_name + FROM user + WHERE user_name LIKE ?;`, + [username], + (err, row) => { + if (err) { + return cb(err); + } + + if (row) { + return cb(null, row.id, row.user_name); + } + + return cb(Errors.DoesNotExist('No matching username')); + } + ); + } - return cb(Errors.DoesNotExist('No matching real name')); - } - ); - } + static getUserIdAndNameByRealName(realName, cb) { + userDb.get( + `SELECT id, user_name + FROM user + WHERE id = ( + SELECT user_id + FROM user_property + WHERE prop_name='${UserProps.RealName}' AND prop_value LIKE ? + );`, + [realName], + (err, row) => { + if (err) { + return cb(err); + } + + if (row) { + return cb(null, row.id, row.user_name); + } + + return cb(Errors.DoesNotExist('No matching real name')); + } + ); + } - static getUserIdAndNameByLookup(lookup, cb) { - User.getUserIdAndName(lookup, (err, userId, userName) => { - if (err) { - User.getUserIdAndNameByRealName(lookup, (err, userId, userName) => { - return cb(err, userId, userName); + static getUserIdAndNameByLookup(lookup, cb) { + User.getUserIdAndName(lookup, (err, userId, userName) => { + if (err) { + User.getUserIdAndNameByRealName(lookup, (err, userId, userName) => { + return cb(err, userId, userName); + }); + } else { + return cb(null, userId, userName); + } }); - } else { - return cb(null, userId, userName); - } - }); - } - - static getUserName(userId, cb) { - userDb.get( - `SELECT user_name - FROM user - WHERE id = ?;`, - [userId], - (err, row) => { - if (err) { - return cb(err); - } + } + + static getUserName(userId, cb) { + userDb.get( + `SELECT user_name + FROM user + WHERE id = ?;`, + [userId], + (err, row) => { + if (err) { + return cb(err); + } + + if (row) { + return cb(null, row.user_name); + } + + return cb(Errors.DoesNotExist('No matching user ID')); + } + ); + } - if (row) { - return cb(null, row.user_name); + static loadProperties(userId, options, cb) { + if (!cb && _.isFunction(options)) { + cb = options; + options = {}; } - return cb(Errors.DoesNotExist('No matching user ID')); - } - ); - } + let sql = `SELECT prop_name, prop_value + FROM user_property + WHERE user_id = ?`; - static loadProperties(userId, options, cb) { - if (!cb && _.isFunction(options)) { - cb = options; - options = {}; + if (options.names) { + sql += ` AND prop_name IN("${options.names.join('","')}");`; + } else { + sql += ';'; + } + + let properties = {}; + userDb.each( + sql, + [userId], + (err, row) => { + if (err) { + return cb(err); + } + properties[row.prop_name] = row.prop_value; + }, + err => { + return cb(err, err ? null : properties); + } + ); } - let sql = `SELECT prop_name, prop_value - FROM user_property - WHERE user_id = ?`; + // :TODO: make this much more flexible - propValue should allow for case-insensitive compare, etc. + static getUserIdsWithProperty(propName, propValue, cb) { + let userIds = []; + + userDb.each( + `SELECT user_id + FROM user_property + WHERE prop_name = ? AND prop_value = ?;`, + [propName, propValue], + (err, row) => { + if (row) { + userIds.push(row.user_id); + } + }, + () => { + return cb(null, userIds); + } + ); + } - if (options.names) { - sql += ` AND prop_name IN("${options.names.join('","')}");`; - } else { - sql += ';'; + static getUserCount(cb) { + userDb.get( + `SELECT count() AS user_count + FROM user;`, + (err, row) => { + if (err) { + return cb(err); + } + return cb(null, row.user_count); + } + ); } - let properties = {}; - userDb.each( - sql, - [userId], - (err, row) => { - if (err) { - return cb(err); - } - properties[row.prop_name] = row.prop_value; - }, - err => { - return cb(err, err ? null : properties); - } - ); - } - - // :TODO: make this much more flexible - propValue should allow for case-insensitive compare, etc. - static getUserIdsWithProperty(propName, propValue, cb) { - let userIds = []; - - userDb.each( - `SELECT user_id - FROM user_property - WHERE prop_name = ? AND prop_value = ?;`, - [propName, propValue], - (err, row) => { - if (row) { - userIds.push(row.user_id); - } - }, - () => { - return cb(null, userIds); - } - ); - } - - static getUserCount(cb) { - userDb.get( - `SELECT count() AS user_count - FROM user;`, - (err, row) => { - if (err) { - return cb(err); + static getUserList(options, cb) { + const userList = []; + + options.properties = options.properties || [UserProps.RealName]; + + const asList = []; + const joinList = []; + for (let i = 0; i < options.properties.length; ++i) { + const dbProp = options.properties[i]; + const propName = options.propsCamelCase ? _.camelCase(dbProp) : dbProp; + asList.push(`p${i}.prop_value AS ${propName}`); + joinList.push( + `LEFT OUTER JOIN user_property p${i} ON p${i}.user_id = u.id AND p${i}.prop_name = '${dbProp}'` + ); } - return cb(null, row.user_count); - } - ); - } - - static getUserList(options, cb) { - const userList = []; - - options.properties = options.properties || [UserProps.RealName]; - - const asList = []; - const joinList = []; - for (let i = 0; i < options.properties.length; ++i) { - const dbProp = options.properties[i]; - const propName = options.propsCamelCase ? _.camelCase(dbProp) : dbProp; - asList.push(`p${i}.prop_value AS ${propName}`); - joinList.push( - `LEFT OUTER JOIN user_property p${i} ON p${i}.user_id = u.id AND p${i}.prop_name = '${dbProp}'` - ); + + userDb.each( + `SELECT u.id as userId, u.user_name as userName, ${asList.join(', ')} + FROM user u ${joinList.join(' ')} + ORDER BY u.user_name;`, + (err, row) => { + if (err) { + return cb(err); + } + userList.push(row); + }, + err => { + return cb(err, userList); + } + ); } - userDb.each( - `SELECT u.id as userId, u.user_name as userName, ${asList.join(', ')} - FROM user u ${joinList.join(' ')} - ORDER BY u.user_name;`, - (err, row) => { - if (err) { - return cb(err); - } - userList.push(row); - }, - err => { - return cb(err, userList); - } - ); - } - - static generatePasswordDerivedKeyAndSalt(password, cb) { - async.waterfall( - [ - function getSalt(callback) { - User.generatePasswordDerivedKeySalt((err, salt) => { - return callback(err, salt); - }); - }, - function getDk(salt, callback) { - User.generatePasswordDerivedKey(password, salt, (err, dk) => { - return callback(err, salt, dk); - }); - }, - ], - (err, salt, dk) => { - return cb(err, { salt: salt, dk: dk }); - } - ); - } - - static generatePasswordDerivedKeySalt(cb) { - crypto.randomBytes(User.PBKDF2.saltLen, (err, salt) => { - if (err) { - return cb(err); - } - return cb(null, salt.toString('hex')); - }); - } - - static generatePasswordDerivedKey(password, salt, cb) { - password = Buffer.from(password).toString('hex'); - - crypto.pbkdf2( - password, - salt, - User.PBKDF2.iterations, - User.PBKDF2.keyLen, - 'sha1', - (err, dk) => { - if (err) { - return cb(err); - } + static generatePasswordDerivedKeyAndSalt(password, cb) { + async.waterfall( + [ + function getSalt(callback) { + User.generatePasswordDerivedKeySalt((err, salt) => { + return callback(err, salt); + }); + }, + function getDk(salt, callback) { + User.generatePasswordDerivedKey(password, salt, (err, dk) => { + return callback(err, salt, dk); + }); + }, + ], + (err, salt, dk) => { + return cb(err, { salt: salt, dk: dk }); + } + ); + } + + static generatePasswordDerivedKeySalt(cb) { + crypto.randomBytes(User.PBKDF2.saltLen, (err, salt) => { + if (err) { + return cb(err); + } + return cb(null, salt.toString('hex')); + }); + } - return cb(null, dk.toString('hex')); - } - ); - } + static generatePasswordDerivedKey(password, salt, cb) { + password = Buffer.from(password).toString('hex'); + + crypto.pbkdf2( + password, + salt, + User.PBKDF2.iterations, + User.PBKDF2.keyLen, + 'sha1', + (err, dk) => { + if (err) { + return cb(err); + } + + return cb(null, dk.toString('hex')); + } + ); + } }; From 7380ef571a31717a42fd4f1c516f9d8a4e170744 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 6 Jan 2023 13:52:33 -0700 Subject: [PATCH 032/233] Hopefully formatted correctly --- core/user.js | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/core/user.js b/core/user.js index 8d6b16538..c1bb379f0 100644 --- a/core/user.js +++ b/core/user.js @@ -572,7 +572,7 @@ module.exports = class User { static persistPropertyByUserId(userId, propName, propValue, cb) { userDb.run( `REPLACE INTO user_property (user_id, prop_name, prop_value) - VALUES (?, ?, ?);`, + VALUES (?, ?, ?);`, [userId, propName, propValue], err => { if (cb) { @@ -619,7 +619,7 @@ module.exports = class User { userDb.run( `DELETE FROM user_property - WHERE user_id = ? AND prop_name = ?;`, + WHERE user_id = ? AND prop_name = ?;`, [this.userId, propName], err => { if (cb) { @@ -680,7 +680,7 @@ module.exports = class User { const stmt = transOrDb.prepare( `REPLACE INTO user_property (user_id, prop_name, prop_value) - VALUES (?, ?, ?);` + VALUES (?, ?, ?);` ); async.each( @@ -809,8 +809,8 @@ module.exports = class User { static getUserIdAndName(username, cb) { userDb.get( `SELECT id, user_name - FROM user - WHERE user_name LIKE ?;`, + FROM user + WHERE user_name LIKE ?;`, [username], (err, row) => { if (err) { @@ -829,12 +829,12 @@ module.exports = class User { static getUserIdAndNameByRealName(realName, cb) { userDb.get( `SELECT id, user_name - FROM user - WHERE id = ( - SELECT user_id - FROM user_property - WHERE prop_name='${UserProps.RealName}' AND prop_value LIKE ? - );`, + FROM user + WHERE id = ( + SELECT user_id + FROM user_property + WHERE prop_name='${UserProps.RealName}' AND prop_value LIKE ? + );`, [realName], (err, row) => { if (err) { @@ -865,8 +865,8 @@ module.exports = class User { static getUserName(userId, cb) { userDb.get( `SELECT user_name - FROM user - WHERE id = ?;`, + FROM user + WHERE id = ?;`, [userId], (err, row) => { if (err) { @@ -889,8 +889,8 @@ module.exports = class User { } let sql = `SELECT prop_name, prop_value - FROM user_property - WHERE user_id = ?`; + FROM user_property + WHERE user_id = ?`; if (options.names) { sql += ` AND prop_name IN("${options.names.join('","')}");`; @@ -920,8 +920,8 @@ module.exports = class User { userDb.each( `SELECT user_id - FROM user_property - WHERE prop_name = ? AND prop_value = ?;`, + FROM user_property + WHERE prop_name = ? AND prop_value = ?;`, [propName, propValue], (err, row) => { if (row) { @@ -937,7 +937,7 @@ module.exports = class User { static getUserCount(cb) { userDb.get( `SELECT count() AS user_count - FROM user;`, + FROM user;`, (err, row) => { if (err) { return cb(err); @@ -965,8 +965,8 @@ module.exports = class User { userDb.each( `SELECT u.id as userId, u.user_name as userName, ${asList.join(', ')} - FROM user u ${joinList.join(' ')} - ORDER BY u.user_name;`, + FROM user u ${joinList.join(' ')} + ORDER BY u.user_name;`, (err, row) => { if (err) { return cb(err); From 41867c73d5ef6b349606621043b712cb492af7e5 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 6 Jan 2023 14:17:16 -0700 Subject: [PATCH 033/233] Tidy --- core/logger.js | 7 ++++--- core/user.js | 14 +++++++------- core/user_property.js | 5 +++-- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/core/logger.js b/core/logger.js index eb4cbb2c1..a78066838 100644 --- a/core/logger.js +++ b/core/logger.js @@ -65,9 +65,10 @@ module.exports = class Log { // return JSON.parse( JSON.stringify(obj).replace( - /"(password|passwordConfirm|key|authCode|private_key_main)"\s?:\s?"([^"]+)"/, - (match, valueName) => { - return `"${valueName}":"********"`; + // note that we match against key names here + /"(password|passwordConfirm|key|authCode)"\s?:\s?"([^"]+)"/, + (match, keyName) => { + return `"${keyName}":"********"`; } ) ); diff --git a/core/user.js b/core/user.js index c1bb379f0..6a69eca42 100644 --- a/core/user.js +++ b/core/user.js @@ -469,7 +469,7 @@ module.exports = class User { function createUserRec(trans, callback) { trans.run( `INSERT INTO user (user_name) - VALUES (?);`, + VALUES (?);`, [self.username], function inserted(err) { // use classic function for |this| @@ -503,6 +503,11 @@ module.exports = class User { } ); }, + function setKeyPair(trans, callback) { + self.updateMainKeyPairProperties(err => { + return callback(err, trans); + }); + }, function setInitialGroupMembership(trans, callback) { // Assign initial groups. Must perform a clone: #235 - All users are sysops (and I can't un-sysop them) self.groups = [...config.users.defaultGroups]; @@ -547,11 +552,6 @@ module.exports = class User { async.series( [ - function setKeyPair(callback) { - self.generateMainKeyPair(err => { - return callback(err); - }); - }, function saveProps(callback) { self.persistProperties(self.properties, trans, err => { return callback(err); @@ -643,7 +643,7 @@ module.exports = class User { ); } - generateMainKeyPair(cb) { + updateMainKeyPairProperties(cb) { crypto.generateKeyPair( 'rsa', { diff --git a/core/user_property.js b/core/user_property.js index 9f00aedb1..d32d0adf6 100644 --- a/core/user_property.js +++ b/core/user_property.js @@ -66,6 +66,7 @@ module.exports = { AuthFactor2OTP: 'auth_factor2_otp', // If present, OTP type for 2FA. See OTPTypes AuthFactor2OTPSecret: 'auth_factor2_otp_secret', // Secret used in conjunction with OTP 2FA AuthFactor2OTPBackupCodes: 'auth_factor2_otp_backup', // JSON array of backup codes - PublicKeyMain: 'public_key_main', // RSA public key for user - PrivateKeyMain: 'private_key_main', // RSA private key (corresponding to PublicKeyMain) + + PublicKeyMain: 'public_key_main_rsa_2048', // RSA public key for user + PrivateKeyMain: 'private_key_main_rsa_2048', // RSA private key (corresponding to PublicKeyMain) }; From d278307a8132cbd1d51df5e4630e48558c7da685 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 6 Jan 2023 14:19:14 -0700 Subject: [PATCH 034/233] Durp. --- core/user_property.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/user_property.js b/core/user_property.js index d32d0adf6..d173b0a48 100644 --- a/core/user_property.js +++ b/core/user_property.js @@ -67,6 +67,6 @@ module.exports = { AuthFactor2OTPSecret: 'auth_factor2_otp_secret', // Secret used in conjunction with OTP 2FA AuthFactor2OTPBackupCodes: 'auth_factor2_otp_backup', // JSON array of backup codes - PublicKeyMain: 'public_key_main_rsa_2048', // RSA public key for user - PrivateKeyMain: 'private_key_main_rsa_2048', // RSA private key (corresponding to PublicKeyMain) + PublicKeyMain: 'public_key_main_rsa_pem', // RSA public key for user + PrivateKeyMain: 'private_key_main_rsa_pem', // RSA private key (corresponding to PublicKeyMain) }; From b252f69f0573ee41588cb3e84a87050403201fef Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Fri, 6 Jan 2023 16:09:08 -0600 Subject: [PATCH 035/233] Changes to work with Mastodon. Also fixed variable rename issue --- core/activitypub_util.js | 6 +++++- core/servers/content/web_handlers/activitypub.js | 9 +++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/core/activitypub_util.js b/core/activitypub_util.js index ba8f23c5a..5e3259e04 100644 --- a/core/activitypub_util.js +++ b/core/activitypub_util.js @@ -45,6 +45,10 @@ function selfUrl(webServer, user) { } function userFromAccount(accountName, cb) { + if (accountName.startsWith('@')) { + accountName = accountName.slice(1); + } + User.getUserIdAndName(accountName, (err, userId) => { if (err) { return cb(err); @@ -58,7 +62,7 @@ function userFromAccount(accountName, cb) { const accountStatus = user.getPropertyAsNumber(UserProps.AccountStatus); if ( User.AccountStatus.disabled == accountStatus || - User.AccountStatus.inactive == accountStatus + User.AccountStatus.inactive == accountStatus ) { return cb(Errors.AccessDenied('Account disabled', ErrorReasons.Disabled)); } diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 7c3ffa0dd..7fec6644f 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -66,7 +66,8 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } const accept = req.headers['accept'] || '*/*'; - if (accept === 'application/activity+json') { + const headerValues = ['application/activity+json', 'application/ld+json', 'application/json']; + if (headerValues.some(mime => accept.includes(mime))) { sendActor = true; } @@ -81,14 +82,14 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _selfAsActorHandler(user, req, resp) { - const selfUrl = selfUrl(this.webServer, user); + const sUrl = selfUrl(this.webServer, user); const bodyJson = { '@context': [ 'https://www.w3.org/ns/activitystreams', 'https://w3id.org/security/v1', ], - id: selfUrl, + id: sUrl, type: 'Person', preferredUsername: user.username, name: user.getSanitizedName('real'), @@ -108,7 +109,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { const publicKeyPem = user.getProperty(UserProps.PublicKeyMain); if (!_.isEmpty(publicKeyPem)) { bodyJson['publicKey'] = { - id: selfUrl + '#main-key', + id: sUrl + '#main-key', owner: sUrl, publicKeyPem: user.getProperty(UserProps.PublicKeyMain), }; From 60238de0173ceff10a2f2e21b6122a8c3be22b94 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 6 Jan 2023 18:05:11 -0700 Subject: [PATCH 036/233] Some tidy and log cleanup --- core/activitypub_util.js | 2 +- .../content/web_handlers/activitypub.js | 51 ++++++++++++------- 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/core/activitypub_util.js b/core/activitypub_util.js index 5e3259e04..d8e26ad0f 100644 --- a/core/activitypub_util.js +++ b/core/activitypub_util.js @@ -62,7 +62,7 @@ function userFromAccount(accountName, cb) { const accountStatus = user.getPropertyAsNumber(UserProps.AccountStatus); if ( User.AccountStatus.disabled == accountStatus || - User.AccountStatus.inactive == accountStatus + User.AccountStatus.inactive == accountStatus ) { return cb(Errors.AccessDenied('Account disabled', ErrorReasons.Disabled)); } diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 7fec6644f..cb92f0277 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -10,10 +10,10 @@ const { const UserProps = require('../../../user_property'); const { Errors } = require('../../../enig_error'); const Config = require('../../../config').get; -const Log = require('../../../logger').log; // deps const _ = require('lodash'); +const { trim } = require('lodash'); exports.moduleInfo = { name: 'ActivityPub', @@ -25,6 +25,8 @@ exports.moduleInfo = { exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { constructor() { super(); + + this.log = require('../../../logger').log.child({ webHandler: 'ActivityPub' }); } init(cb) { @@ -32,7 +34,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { if (!this.webServer) { return cb(Errors.UnexpectedState('Cannot access web server!')); } - Log.debug('Adding route for ActivityPub'); this.webServer.addRoute({ method: 'GET', @@ -44,7 +45,8 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _selfUrlRequestHandler(req, resp) { - Log.debug({ url: req.url }, 'Received request for self url'); + this.log.debug({ url: req.url }, 'Received request for "self" URL'); + const url = new URL(req.url, `https://${req.headers.host}`); let accountName = url.pathname.substring(url.pathname.lastIndexOf('/') + 1); let sendActor = false; @@ -54,24 +56,24 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { sendActor = true; accountName = accountName.slice(0, -5); } - Log.debug({ accountName: accountName }, 'Retrieving self url for account.'); userFromAccount(accountName, (err, user) => { if (err) { - Log.info( + this.log.info( { accountName: accountName }, 'Unable to find user from account retrieving self url.' ); return this._notFound(resp); } - const accept = req.headers['accept'] || '*/*'; - const headerValues = ['application/activity+json', 'application/ld+json', 'application/json']; - if (headerValues.some(mime => accept.includes(mime))) { - sendActor = true; - } - - Log.debug({ sendActor: sendActor }, 'Sending actor JSON'); + // Additionally, serve activity JSON if the proper 'Accept' header was sent + const accept = req.headers['accept'].split(',').map(v => v.trim()) || ['*/*']; + const headerValues = [ + 'application/activity+json', + 'application/ld+json', + 'application/json', + ]; + sendActor = accept.some(v => headerValues.includes(v)); if (sendActor) { return this._selfAsActorHandler(user, req, resp); @@ -82,14 +84,19 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _selfAsActorHandler(user, req, resp) { - const sUrl = selfUrl(this.webServer, user); + this.log.trace( + { username: user.username }, + `Serving ActivityPub Actor for ${user.username}` + ); + + const userSelfUrl = selfUrl(this.webServer, user); const bodyJson = { '@context': [ 'https://www.w3.org/ns/activitystreams', 'https://w3id.org/security/v1', ], - id: sUrl, + id: userSelfUrl, type: 'Person', preferredUsername: user.username, name: user.getSanitizedName('real'), @@ -104,17 +111,27 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { url: webFingerProfileUrl(this.webServer, user), // :TODO: we can start to define BBS related stuff with the community perhaps + attachment: [ + { + name: 'SomeNetwork Address', + type: 'PropertyValue', + value: 'Mateo@21:1/121', + }, + ], }; const publicKeyPem = user.getProperty(UserProps.PublicKeyMain); if (!_.isEmpty(publicKeyPem)) { bodyJson['publicKey'] = { - id: sUrl + '#main-key', - owner: sUrl, + id: userSelfUrl + '#main-key', + owner: userSelfUrl, publicKeyPem: user.getProperty(UserProps.PublicKeyMain), }; } else { - Log.debug({ username: user.username }, 'User does not have a publickey.'); + this.log.debug( + { username: user.username }, + 'User does not have a publickey.' + ); } const body = JSON.stringify(bodyJson); From a1e54dee6d2a18fe59375b272dce10328d35b596 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 6 Jan 2023 18:55:24 -0700 Subject: [PATCH 037/233] Log cleanup --- .../content/web_handlers/activitypub.js | 28 +++++++++---------- .../servers/content/web_handlers/webfinger.js | 13 +++++++-- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index cb92f0277..0125cc4e4 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -45,7 +45,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _selfUrlRequestHandler(req, resp) { - this.log.debug({ url: req.url }, 'Received request for "self" URL'); + this.log.trace({ url: req.url }, 'Request for "self"'); const url = new URL(req.url, `https://${req.headers.host}`); let accountName = url.pathname.substring(url.pathname.lastIndexOf('/') + 1); @@ -60,8 +60,8 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { userFromAccount(accountName, (err, user) => { if (err) { this.log.info( - { accountName: accountName }, - 'Unable to find user from account retrieving self url.' + { reason: error.message, accountName: accountName }, + `No user "${accountName}" for "self"` ); return this._notFound(resp); } @@ -86,7 +86,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { _selfAsActorHandler(user, req, resp) { this.log.trace( { username: user.username }, - `Serving ActivityPub Actor for ${user.username}` + `Serving ActivityPub Actor for "${user.username}"` ); const userSelfUrl = selfUrl(this.webServer, user); @@ -111,13 +111,13 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { url: webFingerProfileUrl(this.webServer, user), // :TODO: we can start to define BBS related stuff with the community perhaps - attachment: [ - { - name: 'SomeNetwork Address', - type: 'PropertyValue', - value: 'Mateo@21:1/121', - }, - ], + // attachment: [ + // { + // name: 'SomeNetwork Address', + // type: 'PropertyValue', + // value: 'Mateo@21:1/121', + // }, + // ], }; const publicKeyPem = user.getProperty(UserProps.PublicKeyMain); @@ -125,12 +125,12 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { bodyJson['publicKey'] = { id: userSelfUrl + '#main-key', owner: userSelfUrl, - publicKeyPem: user.getProperty(UserProps.PublicKeyMain), + publicKeyPem, }; } else { - this.log.debug( + this.log.warn( { username: user.username }, - 'User does not have a publickey.' + `No public key (${UserProps.PublicKeyMain}) for user "${user.username}"` ); } diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index 7e7f9f1eb..27f280c56 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -11,7 +11,6 @@ const { } = require('../../../activitypub_util'); const _ = require('lodash'); -const Log = require('../../../logger').log; exports.moduleInfo = { name: 'WebFinger', @@ -26,6 +25,8 @@ exports.moduleInfo = { exports.getModule = class WebFingerWebHandler extends WebHandlerModule { constructor() { super(); + + this.log = require('../../../logger').log.child({ webHandler: 'WebFinger' }); } init(cb) { @@ -98,7 +99,10 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { userFromAccount(accountName, (err, user) => { if (err) { - Log.warn({ error: err.message }, `Profile request failed: ${req.url}`); + this.log.warn( + { url: req.url, error: err.message, type: 'Profile' }, + `No profile for "${accountName}" could be retrieved` + ); return this._notFound(resp); } @@ -155,7 +159,10 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { userFromAccount(accountName, (err, user) => { if (err) { - Log.warn({ error: err.message }, `WebFinger failed: ${req.url}`); + this.log.warn( + { url: req.url, error: err.message, type: 'WebFinger' }, + `No account for "${accountName}" could be retrieved` + ); return this._notFound(resp); } From 23f753e4b39454833a8cd4ff978d1f5b0bff2032 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 7 Jan 2023 09:50:16 -0700 Subject: [PATCH 038/233] Web Handlers are now given the parent Web Server directly --- core/servers/content/web.js | 29 +++++++++++++------ .../content/web_handlers/activitypub.js | 13 ++++----- .../servers/content/web_handlers/webfinger.js | 13 ++++----- core/web_handler_module.js | 3 +- .../servers/contentservers/web-handlers.md | 4 +++ 5 files changed, 38 insertions(+), 24 deletions(-) diff --git a/core/servers/content/web.js b/core/servers/content/web.js index 463c07675..3fb3e3700 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -42,7 +42,7 @@ class Route { try { this.pathRegExp = new RegExp(this.path); } catch (e) { - Log.debug({ route: route }, 'Invalid regular expression for route path'); + this.log.error({ route: route }, 'Invalid regular expression for route path'); } } @@ -77,6 +77,8 @@ exports.getModule = class WebServerModule extends ServerModule { constructor() { super(); + this.log = Log.child({ server: 'Web' }); + const config = Config(); this.enableHttp = config.contentServers.web.http.enabled || false; this.enableHttps = config.contentServers.web.https.enabled || false; @@ -84,6 +86,10 @@ exports.getModule = class WebServerModule extends ServerModule { this.routes = {}; } + logger() { + return this.log; + } + getDomain() { const config = Config(); const overridePrefix = _.get(config.contentServers.web.overrideUrlPrefix); @@ -168,23 +174,26 @@ exports.getModule = class WebServerModule extends ServerModule { try { const normalizedName = _.camelCase(module.moduleInfo.name); if (!WebHandlerModule.isEnabled(normalizedName)) { - Log.info( + this.log.info( { moduleName: normalizedName }, - 'Skipping web handler module - not enabled.' + 'Web handler module not enabled' ); return nextModule(null); } Log.info( { moduleName: normalizedName }, - 'Initializing web handler module.' + 'Initializing web handler module' ); - moduleInst.init(err => { + moduleInst.init(this, err => { return nextModule(err); }); } catch (e) { - Log.error(e, 'Exception caught web handler!'); + this.log.error( + { error: e.message }, + 'Exception caught loading web handler' + ); return nextModule(e); } }, @@ -203,7 +212,7 @@ exports.getModule = class WebServerModule extends ServerModule { if (this[name]) { const port = parseInt(config.contentServers.web[service].port); if (isNaN(port)) { - Log.warn( + this.log.error( { port: config.contentServers.web[service].port, server: ModuleInfo.name, @@ -238,7 +247,7 @@ exports.getModule = class WebServerModule extends ServerModule { route = new Route(route); if (!route.isValid()) { - Log.warn( + this.log.error( { route: route }, 'Cannot add route: missing or invalid required members' ); @@ -247,7 +256,7 @@ exports.getModule = class WebServerModule extends ServerModule { const routeKey = route.getRouteKey(); if (routeKey in this.routes) { - Log.warn( + this.log.warn( { route: route, routeKey: routeKey }, 'Cannot add route: duplicate method/path combination exists' ); @@ -259,6 +268,8 @@ exports.getModule = class WebServerModule extends ServerModule { } routeRequest(req, resp) { + this.log.trace({ url: req.url, method: req.method }, 'Request'); + let route = _.find(this.routes, r => r.matchesRequest(req)); if (route) { diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 0125cc4e4..57a16b140 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -14,6 +14,7 @@ const Config = require('../../../config').get; // deps const _ = require('lodash'); const { trim } = require('lodash'); +const enigma_assert = require('../../../enigma_assert'); exports.moduleInfo = { name: 'ActivityPub', @@ -25,15 +26,13 @@ exports.moduleInfo = { exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { constructor() { super(); - - this.log = require('../../../logger').log.child({ webHandler: 'ActivityPub' }); } - init(cb) { - this.webServer = WebHandlerModule.getWebServer(); - if (!this.webServer) { - return cb(Errors.UnexpectedState('Cannot access web server!')); - } + init(webServer, cb) { + this.webServer = webServer; + enigma_assert(webServer, 'ActivityPub Web Handler init without webServer'); + + this.log = webServer.logger().child({ webHandler: 'ActivityPub' }); this.webServer.addRoute({ method: 'GET', diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index 27f280c56..a7cf6e82f 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -11,6 +11,7 @@ const { } = require('../../../activitypub_util'); const _ = require('lodash'); +const enigma_assert = require('../../../enigma_assert'); exports.moduleInfo = { name: 'WebFinger', @@ -25,18 +26,16 @@ exports.moduleInfo = { exports.getModule = class WebFingerWebHandler extends WebHandlerModule { constructor() { super(); - - this.log = require('../../../logger').log.child({ webHandler: 'WebFinger' }); } - init(cb) { + init(webServer, cb) { const config = Config(); // we rely on the web server - this.webServer = WebHandlerModule.getWebServer(); - if (!this.webServer) { - return cb(Errors.UnexpectedState('Cannot access web server!')); - } + this.webServer = webServer; + enigma_assert(webServer, 'WebFinger Web Handler init without webServer'); + + this.log = webServer.logger().child({ webHandler: 'WebFinger' }); const domain = this.webServer.getDomain(); if (!domain) { diff --git a/core/web_handler_module.js b/core/web_handler_module.js index b666c9338..bd9a86445 100644 --- a/core/web_handler_module.js +++ b/core/web_handler_module.js @@ -6,8 +6,9 @@ module.exports = class WebHandlerModule extends PluginModule { super(options); } - init(cb) { + init(webServer, cb) { // to be implemented! + this.webServer = webHandler; return cb(null); } diff --git a/docs/_docs/servers/contentservers/web-handlers.md b/docs/_docs/servers/contentservers/web-handlers.md index 8064c5ae7..ba11a0651 100644 --- a/docs/_docs/servers/contentservers/web-handlers.md +++ b/docs/_docs/servers/contentservers/web-handlers.md @@ -7,3 +7,7 @@ Web handlers provide a way to easily add additional _routes_ to your [Web Server # Built in Web Handler Modules * [WebFinger](./webfinger-handler.md): Provides basic [WebFinger](https://webfinger.net/) ([RFC7033](https://www.rfc-editor.org/rfc/rfc7033)) support. +## Building Your Own +Adding a Web Handler + +TODO \ No newline at end of file From 9eb3a1d37f9127df5c70c521fd76139882fb72b0 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Sat, 7 Jan 2023 13:40:52 -0600 Subject: [PATCH 039/233] eslint fixes as well as fixing a small variable typo --- .../content/web_handlers/activitypub.js | 4 +- .../servers/content/web_handlers/webfinger.js | 418 +++++++++--------- 2 files changed, 209 insertions(+), 213 deletions(-) diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 57a16b140..d81d8ccea 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -8,12 +8,10 @@ const { DefaultProfileTemplate, } = require('../../../activitypub_util'); const UserProps = require('../../../user_property'); -const { Errors } = require('../../../enig_error'); const Config = require('../../../config').get; // deps const _ = require('lodash'); -const { trim } = require('lodash'); const enigma_assert = require('../../../enigma_assert'); exports.moduleInfo = { @@ -59,7 +57,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { userFromAccount(accountName, (err, user) => { if (err) { this.log.info( - { reason: error.message, accountName: accountName }, + { reason: err.message, accountName: accountName }, `No user "${accountName}" for "self"` ); return this._notFound(resp); diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index a7cf6e82f..8b6957736 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -3,242 +3,240 @@ const Config = require('../../../config').get; const { Errors } = require('../../../enig_error'); const { WellKnownLocations } = require('../web'); const { - selfUrl, - webFingerProfileUrl, - userFromAccount, - getUserProfileTemplatedBody, - DefaultProfileTemplate, + selfUrl, + webFingerProfileUrl, + userFromAccount, + getUserProfileTemplatedBody, + DefaultProfileTemplate, } = require('../../../activitypub_util'); const _ = require('lodash'); const enigma_assert = require('../../../enigma_assert'); exports.moduleInfo = { - name: 'WebFinger', - desc: 'A simple WebFinger Handler.', - author: 'NuSkooler, CognitiveGears', - packageName: 'codes.l33t.enigma.web.handler.webfinger', + name: 'WebFinger', + desc: 'A simple WebFinger Handler.', + author: 'NuSkooler, CognitiveGears', + packageName: 'codes.l33t.enigma.web.handler.webfinger', }; // // WebFinger: https://www.rfc-editor.org/rfc/rfc7033 // exports.getModule = class WebFingerWebHandler extends WebHandlerModule { - constructor() { - super(); - } - - init(webServer, cb) { - const config = Config(); - - // we rely on the web server - this.webServer = webServer; - enigma_assert(webServer, 'WebFinger Web Handler init without webServer'); - - this.log = webServer.logger().child({ webHandler: 'WebFinger' }); - - const domain = this.webServer.getDomain(); - if (!domain) { - return cb(Errors.UnexpectedState('Web server does not have "domain" set')); - } - - this.acceptedResourceRegExps = [ - // acct:NAME@our.domain.tld - // https://www.rfc-editor.org/rfc/rfc7565 - new RegExp(`^acct:(.+)@${domain}$`), - // profile page - // https://webfinger.net/rel/profile-page/ - new RegExp( - `^${this.webServer.buildUrl(WellKnownLocations.Internal + '/wf/@')}(.+)$` - ), - // self URL - new RegExp( - `^${this.webServer.buildUrl( - WellKnownLocations.Internal + '/ap/users/' - )}(.+)$` - ), - ]; - - this.webServer.addRoute({ - method: 'GET', - // https://www.rfc-editor.org/rfc/rfc7033.html#section-10.1 - path: /^\/\.well-known\/webfinger\/?\?/, - handler: this._webFingerRequestHandler.bind(this), - }); - - this.webServer.addRoute({ - method: 'GET', - path: /^\/_enig\/wf\/@.+$/, - handler: this._profileRequestHandler.bind(this), - }); - - return cb(null); - } - - _profileRequestHandler(req, resp) { - const url = new URL(req.url, `https://${req.headers.host}`); - - const resource = url.pathname; - if (_.isEmpty(resource)) { - return this.webServer.instance.respondWithError( - resp, - 400, - 'pathname is required', - 'Missing "resource"' - ); - } - - const userPosition = resource.indexOf('@'); - if (-1 == userPosition || userPosition == resource.length - 1) { - this._notFound(resp); - return Errors.DoesNotExist('"@username" missing from path'); - } - - const accountName = resource.substring(userPosition + 1); - - userFromAccount(accountName, (err, user) => { - if (err) { - this.log.warn( - { url: req.url, error: err.message, type: 'Profile' }, - `No profile for "${accountName}" could be retrieved` - ); - return this._notFound(resp); - } - - let templateFile = _.get( - Config(), - 'contentServers.web.handlers.webFinger.profileTemplate' - ); - if (templateFile) { - templateFile = this.webServer.resolveTemplatePath(templateFile); - } - - getUserProfileTemplatedBody( - templateFile, - user, - DefaultProfileTemplate, - 'text/plain', - (err, body, contentType) => { - if (err) { - return this._notFound(resp); - } - - const headers = { - 'Content-Type': contentType, - 'Content-Length': body.length, - }; - - resp.writeHead(200, headers); - return resp.end(body); - } - ); - }); - } + constructor() { + super(); + } - _webFingerRequestHandler(req, resp) { - const url = new URL(req.url, `https://${req.headers.host}`); - - const resource = url.searchParams.get('resource'); - if (!resource) { - return this.webServer.respondWithError( - resp, - 400, - '"resource" is required', - 'Missing "resource"' - ); - } + init(webServer, cb) { + // we rely on the web server + this.webServer = webServer; + enigma_assert(webServer, 'WebFinger Web Handler init without webServer'); - const accountName = this._getAccountName(resource); - if (!accountName || accountName.length < 1) { - this._notFound(resp); - return Errors.DoesNotExist( - `Failed to parse "account name" for resource: ${resource}` - ); - } + this.log = webServer.logger().child({ webHandler: 'WebFinger' }); - userFromAccount(accountName, (err, user) => { - if (err) { - this.log.warn( - { url: req.url, error: err.message, type: 'WebFinger' }, - `No account for "${accountName}" could be retrieved` - ); - return this._notFound(resp); - } - - const domain = this.webServer.getDomain(); - - const body = JSON.stringify({ - subject: `acct:${user.username}@${domain}`, - aliases: [this._profileUrl(user), this._selfUrl(user)], - links: [ - this._profilePageLink(user), - this._selfLink(user), - this._subscribeLink(), - ], - }); - - const headers = { - 'Content-Type': 'application/jrd+json', - 'Content-Length': body.length, - }; - - resp.writeHead(200, headers); - return resp.end(body); - }); + const domain = this.webServer.getDomain(); + if (!domain) { + return cb(Errors.UnexpectedState('Web server does not have "domain" set')); } - _profileUrl(user) { - return webFingerProfileUrl(this.webServer, user); + this.acceptedResourceRegExps = [ + // acct:NAME@our.domain.tld + // https://www.rfc-editor.org/rfc/rfc7565 + new RegExp(`^acct:(.+)@${domain}$`), + // profile page + // https://webfinger.net/rel/profile-page/ + new RegExp( + `^${this.webServer.buildUrl(WellKnownLocations.Internal + '/wf/@')}(.+)$` + ), + // self URL + new RegExp( + `^${this.webServer.buildUrl( + WellKnownLocations.Internal + '/ap/users/' + )}(.+)$` + ), + ]; + + this.webServer.addRoute({ + method: 'GET', + // https://www.rfc-editor.org/rfc/rfc7033.html#section-10.1 + path: /^\/\.well-known\/webfinger\/?\?/, + handler: this._webFingerRequestHandler.bind(this), + }); + + this.webServer.addRoute({ + method: 'GET', + path: /^\/_enig\/wf\/@.+$/, + handler: this._profileRequestHandler.bind(this), + }); + + return cb(null); + } + + _profileRequestHandler(req, resp) { + const url = new URL(req.url, `https://${req.headers.host}`); + + const resource = url.pathname; + if (_.isEmpty(resource)) { + return this.webServer.instance.respondWithError( + resp, + 400, + 'pathname is required', + 'Missing "resource"' + ); } - _profilePageLink(user) { - const href = this._profileUrl(user); - return { - rel: 'http://webfinger.net/rel/profile-page', - type: 'text/plain', - href, - }; + const userPosition = resource.indexOf('@'); + if (-1 == userPosition || userPosition == resource.length - 1) { + this._notFound(resp); + return Errors.DoesNotExist('"@username" missing from path'); } - _selfUrl(user) { - return selfUrl(this.webServer, user); - } + const accountName = resource.substring(userPosition + 1); - // :TODO: only if ActivityPub is enabled - _selfLink(user) { - const href = this._selfUrl(user); - return { - rel: 'self', - type: 'application/activity+json', - href, - }; - } - - // :TODO: only if ActivityPub is enabled - _subscribeLink() { - return { - rel: 'http://ostatus.org/schema/1.0/subscribe', - template: this.webServer.buildUrl( - WellKnownLocations.Internal + '/ap/authorize_interaction?uri={uri}' - ), - }; + userFromAccount(accountName, (err, user) => { + if (err) { + this.log.warn( + { url: req.url, error: err.message, type: 'Profile' }, + `No profile for "${accountName}" could be retrieved` + ); + return this._notFound(resp); + } + + let templateFile = _.get( + Config(), + 'contentServers.web.handlers.webFinger.profileTemplate' + ); + if (templateFile) { + templateFile = this.webServer.resolveTemplatePath(templateFile); + } + + getUserProfileTemplatedBody( + templateFile, + user, + DefaultProfileTemplate, + 'text/plain', + (err, body, contentType) => { + if (err) { + return this._notFound(resp); + } + + const headers = { + 'Content-Type': contentType, + 'Content-Length': body.length, + }; + + resp.writeHead(200, headers); + return resp.end(body); + } + ); + }); + } + + _webFingerRequestHandler(req, resp) { + const url = new URL(req.url, `https://${req.headers.host}`); + + const resource = url.searchParams.get('resource'); + if (!resource) { + return this.webServer.respondWithError( + resp, + 400, + '"resource" is required', + 'Missing "resource"' + ); } - _getAccountName(resource) { - for (const re of this.acceptedResourceRegExps) { - const m = resource.match(re); - if (m && m.length === 2) { - return m[1]; - } - } + const accountName = this._getAccountName(resource); + if (!accountName || accountName.length < 1) { + this._notFound(resp); + return Errors.DoesNotExist( + `Failed to parse "account name" for resource: ${resource}` + ); } - _notFound(resp) { - this.webServer.respondWithError( - resp, - 404, - 'Resource not found', - 'Resource Not Found' + userFromAccount(accountName, (err, user) => { + if (err) { + this.log.warn( + { url: req.url, error: err.message, type: 'WebFinger' }, + `No account for "${accountName}" could be retrieved` ); + return this._notFound(resp); + } + + const domain = this.webServer.getDomain(); + + const body = JSON.stringify({ + subject: `acct:${user.username}@${domain}`, + aliases: [this._profileUrl(user), this._selfUrl(user)], + links: [ + this._profilePageLink(user), + this._selfLink(user), + this._subscribeLink(), + ], + }); + + const headers = { + 'Content-Type': 'application/jrd+json', + 'Content-Length': body.length, + }; + + resp.writeHead(200, headers); + return resp.end(body); + }); + } + + _profileUrl(user) { + return webFingerProfileUrl(this.webServer, user); + } + + _profilePageLink(user) { + const href = this._profileUrl(user); + return { + rel: 'http://webfinger.net/rel/profile-page', + type: 'text/plain', + href, + }; + } + + _selfUrl(user) { + return selfUrl(this.webServer, user); + } + + // :TODO: only if ActivityPub is enabled + _selfLink(user) { + const href = this._selfUrl(user); + return { + rel: 'self', + type: 'application/activity+json', + href, + }; + } + + // :TODO: only if ActivityPub is enabled + _subscribeLink() { + return { + rel: 'http://ostatus.org/schema/1.0/subscribe', + template: this.webServer.buildUrl( + WellKnownLocations.Internal + '/ap/authorize_interaction?uri={uri}' + ), + }; + } + + _getAccountName(resource) { + for (const re of this.acceptedResourceRegExps) { + const m = resource.match(re); + if (m && m.length === 2) { + return m[1]; + } } + } + + _notFound(resp) { + this.webServer.respondWithError( + resp, + 404, + 'Resource not found', + 'Resource Not Found' + ); + } }; From 2c0992becb43206e07cc06c0b052880652d4abad Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Sat, 7 Jan 2023 14:48:12 -0600 Subject: [PATCH 040/233] Added stub activitypub_actor database entries --- .eslintrc.json | 3 +- core/activitypub_actor.js | 383 +++++++++++++++++++++++++++++ core/activitypub_actor_property.js | 18 ++ core/database.js | 70 ++++-- 4 files changed, 453 insertions(+), 21 deletions(-) create mode 100644 core/activitypub_actor.js create mode 100644 core/activitypub_actor_property.js diff --git a/.eslintrc.json b/.eslintrc.json index e19846d8e..b22b711c8 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -16,7 +16,8 @@ "quotes": ["error", "single"], "semi": ["error", "always"], "comma-dangle": 0, - "no-trailing-spaces": "error" + "no-trailing-spaces": "error", + "no-control-regex": 0 }, "parserOptions": { "ecmaVersion": 2020 diff --git a/core/activitypub_actor.js b/core/activitypub_actor.js new file mode 100644 index 000000000..9ab8f01bc --- /dev/null +++ b/core/activitypub_actor.js @@ -0,0 +1,383 @@ +/* jslint node: true */ +'use strict'; + +// ENiGMA½ +const actorDb = require('./database.js').dbs.actor; +const { Errors } = require('./enig_error.js'); +const Events = require('./events.js'); +const ActorProps = require('./activitypub_actor_property.js'); + +// deps +const assert = require('assert'); +const async = require('async'); +const _ = require('lodash'); + +module.exports = class Actor { + constructor() { + this.actorId = 0; + this.actorUrl = ''; + this.properties = {}; // name:value + this.groups = []; // group membership(s) + } + + + create(cb) { + assert(0 === this.actorId); + + if ( + _.isEmpty(this.actorUrl) + ) { + return cb(Errors.Invalid('Blank actor url')); + } + + const self = this; + + async.waterfall( + [ + function beginTransaction(callback) { + return actorDb.beginTransaction(callback); + }, + function createActorRec(trans, callback) { + trans.run( + `INSERT INTO actor (actor_url) + VALUES (?);`, + [self.actorUrl], + function inserted(err) { + // use classic function for |this| + if (err) { + return callback(err); + } + + self.actorId = this.lastID; + + return callback(null, trans); + } + ); + }, + function saveAll(trans, callback) { + self.persistWithTransaction(trans, err => { + return callback(err, trans); + }); + }, + function sendEvent(trans, callback) { + Events.emit(Events.getSystemEvents().NewActor, { + actor: Object.assign({}, self, {}), + }); + return callback(null, trans); + }, + ], + (err, trans) => { + if (trans) { + trans[err ? 'rollback' : 'commit'](transErr => { + return cb(err ? err : transErr); + }); + } else { + return cb(err); + } + } + ); + } + + persistWithTransaction(trans, cb) { + assert(this.actorId > 0); + + const self = this; + + async.series( + [ + function saveProps(callback) { + self.persistProperties(self.properties, trans, err => { + return callback(err); + }); + }, + ], + err => { + return cb(err); + } + ); + } + + static persistPropertyByActorId(actorId, propName, propValue, cb) { + actorDb.run( + `REPLACE INTO activitypub_actor_property (actor_id, prop_name, prop_value) + VALUES (?, ?, ?);`, + [actorId, propName, propValue], + err => { + if (cb) { + return cb(err, propValue); + } + } + ); + } + + setProperty(propName, propValue) { + this.properties[propName] = propValue; + } + + incrementProperty(propName, incrementBy) { + incrementBy = incrementBy || 1; + let newValue = parseInt(this.getProperty(propName)); + if (newValue) { + newValue += incrementBy; + } else { + newValue = incrementBy; + } + this.setProperty(propName, newValue); + return newValue; + } + + getProperty(propName) { + return this.properties[propName]; + } + + getPropertyAsNumber(propName) { + return parseInt(this.getProperty(propName), 10); + } + + persistProperty(propName, propValue, cb) { + // update live props + this.properties[propName] = propValue; + + return Actor.persistPropertyByActorId(this.actorId, propName, propValue, cb); + } + + removeProperty(propName, cb) { + // update live + delete this.properties[propName]; + + actorDb.run( + `DELETE FROM activitypub_actor_property + WHERE activity_id = ? AND prop_name = ?;`, + [this.actorId, propName], + err => { + if (cb) { + return cb(err); + } + } + ); + } + + removeProperties(propNames, cb) { + async.each( + propNames, + (name, next) => { + return this.removeProperty(name, next); + }, + err => { + if (cb) { + return cb(err); + } + } + ); + } + + persistProperties(properties, transOrDb, cb) { + if (!_.isFunction(cb) && _.isFunction(transOrDb)) { + cb = transOrDb; + transOrDb = actorDb; + } + + const self = this; + + // update live props + _.merge(this.properties, properties); + + const stmt = transOrDb.prepare( + `REPLACE INTO activitypub_actor_property (actor_id, prop_name, prop_value) + VALUES (?, ?, ?);` + ); + + async.each( + Object.keys(properties), + (propName, nextProp) => { + stmt.run(self.actorId, propName, properties[propName], err => { + return nextProp(err); + }); + }, + err => { + if (err) { + return cb(err); + } + + stmt.finalize(() => { + return cb(null); + }); + } + ); + } + + + static getActor(actorId, cb) { + async.waterfall( + [ + function fetchActorId(callback) { + Actor.getActorUrl(actorId, (err, actorUrl) => { + return callback(null, actorUrl); + }); + }, + function initProps(actorUrl, callback) { + Actor.loadProperties(actorId, (err, properties) => { + return callback(err, actorUrl, properties); + }); + }, + ], + (err, actorUrl, properties) => { + const actor = new Actor(); + actor.actorId = actorId; + actor.actorUrl = actorUrl; + actor.properties = properties; + + return cb(err, actor); + } + ); + } + + // FIXME + static getActorInfo(actorId, propsList, cb) { + if (!cb && _.isFunction(propsList)) { + cb = propsList; + propsList = [ + ActorProps.Type, + ActorProps.PreferredUsername, + ActorProps.Name, + ActorProps.Summary, + ActorProps.IconUrl, + ActorProps.BannerUrl, + ActorProps.PublicKeyMain + ]; + } + + async.waterfall( + [ + callback => { + return Actor.getActorUrl(actorId, callback); + }, + (actorUrl, callback) => { + Actor.loadProperties(actorId, { names: propsList }, (err, props) => { + return callback( + err, + Object.assign({}, props, { actor_url: actorUrl }) + ); + }); + }, + ], + (err, actorProps) => { + if (err) { + return cb(err); + } + + const actorInfo = {}; + Object.keys(actorProps).forEach(key => { + actorInfo[_.camelCase(key)] = actorProps[key] || 'N/A'; + }); + + return cb(null, actorInfo); + } + ); + } + + static getActorIdAndUrl(actorUrl, cb) { + actorDb.get( + `SELECT id, actor_url + FROM activitypub_actor + WHERE actor_url LIKE ?;`, + [actorUrl], + (err, row) => { + if (err) { + return cb(err); + } + + if (row) { + return cb(null, row.id, row.actor_url); + } + + return cb(Errors.DoesNotExist('No matching actorUrl')); + } + ); + } + + static getActorUrl(actorId, cb) { + actorDb.get( + `SELECT actor_url + FROM activitypub_actor + WHERE id = ?;`, + [actorId], + (err, row) => { + if (err) { + return cb(err); + } + + if (row) { + return cb(null, row.actor_url); + } + + return cb(Errors.DoesNotExist('No matching actor ID')); + } + ); + } + + static loadProperties(actorId, options, cb) { + if (!cb && _.isFunction(options)) { + cb = options; + options = {}; + } + + let sql = `SELECT prop_name, prop_value + FROM activitypub_actor_property + WHERE actor_id = ?`; + + if (options.names) { + sql += ` AND prop_name IN("${options.names.join('","')}");`; + } else { + sql += ';'; + } + + let properties = {}; + actorDb.each( + sql, + [actorId], + (err, row) => { + if (err) { + return cb(err); + } + properties[row.prop_name] = row.prop_value; + }, + err => { + return cb(err, err ? null : properties); + } + ); + } + + // :TODO: make this much more flexible - propValue should allow for case-insensitive compare, etc. + static getActorIdsWithProperty(propName, propValue, cb) { + let actorIds = []; + + actorDb.each( + `SELECT actor_id + FROM activitypub_actor_property + WHERE prop_name = ? AND prop_value = ?;`, + [propName, propValue], + (err, row) => { + if (row) { + actorIds.push(row.actor_id); + } + }, + () => { + return cb(null, actorIds); + } + ); + } + + static getActorCount(cb) { + actorDb.get( + `SELECT count() AS actor_count + FROM activitypub_actor;`, + (err, row) => { + if (err) { + return cb(err); + } + return cb(null, row.actor_count); + } + ); + } +}; diff --git a/core/activitypub_actor_property.js b/core/activitypub_actor_property.js new file mode 100644 index 000000000..8727b830b --- /dev/null +++ b/core/activitypub_actor_property.js @@ -0,0 +1,18 @@ +/* jslint node: true */ +'use strict'; + +// +// Common Activitypub actor properties used throughout the system. +// +// This IS NOT a full list. For example, custom modules +// can utilize their own properties as well! +// +module.exports = { + Type: 'type', + PreferredUsername: 'preferred_user_name', + Name: 'name', + Summary: 'summary', + IconUrl: 'icon_url', + BannerUrl: 'banner_url', + PublicKeyMain: 'public_key_main_rsa_pem', // RSA public key for user +}; diff --git a/core/database.js b/core/database.js index 9266001d7..8c579507b 100644 --- a/core/database.js +++ b/core/database.js @@ -41,7 +41,7 @@ function getModDatabasePath(moduleInfo, suffix) { // filename. An optional suffix may be supplied as well. // const HOST_RE = - /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$/; + /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$/; assert(_.isObject(moduleInfo)); assert(_.isString(moduleInfo.packageName), 'moduleInfo must define "packageName"!'); @@ -81,7 +81,7 @@ function getISOTimestampString(ts) { function sanitizeString(s) { return s.replace(/[\0\x08\x09\x1a\n\r"'\\%]/g, c => { - // eslint-disable-line no-control-regex + // eslint-disable-line no-control-regex switch (c) { case '\0': return '\\0'; @@ -97,7 +97,7 @@ function sanitizeString(s) { return '\\r'; case '"': - case "'": + case '\'': return `${c}${c}`; case '\\': @@ -109,7 +109,7 @@ function sanitizeString(s) { function initializeDatabases(cb) { async.eachSeries( - ['system', 'user', 'message', 'file'], + ['system', 'user', 'actor', 'message', 'file'], (dbName, next) => { dbs[dbName] = sqlite3Trans.wrap( new sqlite3.Database(getDatabasePath(dbName), err => { @@ -242,6 +242,36 @@ const DB_INIT_TABLE = { return cb(null); }, + actor: cb => { + enableForeignKeys(dbs.actor); + + dbs.actor.run( + `CREATE TABLE IF NOT EXISTS activitypub_actor ( + id INTEGER PRIMARY KEY, + actor_url VARCHAR NOT NULL, + UNIQUE(actor_url) + );` + ); + + // :TODO: create FK on delete/etc. + + dbs.actor.run( + `CREATE TABLE IF NOT EXISTS activitypub_actor_property ( + actor_id INTEGER NOT NULL, + prop_name VARCHAR NOT NULL, + prop_value VARCHAR, + UNIQUE(actor_id, prop_name), + FOREIGN KEY(actor_id) REFERENCES actor(id) ON DELETE CASCADE + );` + ); + + dbs.actor.run( + `CREATE INDEX IF NOT EXISTS activitypub_actor_property_id_and_name_index0 + ON activitypub_actor_property (actor_id, prop_name);` + ); + + return cb(null); + }, message: cb => { enableForeignKeys(dbs.message); @@ -312,22 +342,22 @@ const DB_INIT_TABLE = { // :TODO: need SQL to ensure cleaned up if delete from message? /* - dbs.message.run( - `CREATE TABLE IF NOT EXISTS hash_tag ( - hash_tag_id INTEGER PRIMARY KEY, - hash_tag_name VARCHAR NOT NULL, - UNIQUE(hash_tag_name) - );` - ); - - // :TODO: need SQL to ensure cleaned up if delete from message? - dbs.message.run( - `CREATE TABLE IF NOT EXISTS message_hash_tag ( - hash_tag_id INTEGER NOT NULL, - message_id INTEGER NOT NULL, - );` - ); - */ +dbs.message.run( + `CREATE TABLE IF NOT EXISTS hash_tag ( + hash_tag_id INTEGER PRIMARY KEY, + hash_tag_name VARCHAR NOT NULL, + UNIQUE(hash_tag_name) + );` +); + +// :TODO: need SQL to ensure cleaned up if delete from message? +dbs.message.run( + `CREATE TABLE IF NOT EXISTS message_hash_tag ( + hash_tag_id INTEGER NOT NULL, + message_id INTEGER NOT NULL, + );` +); +*/ dbs.message.run( `CREATE TABLE IF NOT EXISTS user_message_area_last_read ( From 55b210e4e702f151e9cb4dccf72d232e09ae5522 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 8 Jan 2023 01:22:02 -0700 Subject: [PATCH 041/233] Steps to allow follow requests --- core/activitypub_util.js | 6 + core/servers/content/web.js | 22 ++ .../content/web_handlers/activitypub.js | 226 ++++++++++++++++-- .../servers/content/web_handlers/webfinger.js | 21 +- 4 files changed, 246 insertions(+), 29 deletions(-) diff --git a/core/activitypub_util.js b/core/activitypub_util.js index d8e26ad0f..3eedd7d9c 100644 --- a/core/activitypub_util.js +++ b/core/activitypub_util.js @@ -15,6 +15,7 @@ exports.makeUserUrl = makeUserUrl; exports.webFingerProfileUrl = webFingerProfileUrl; exports.selfUrl = selfUrl; exports.userFromAccount = userFromAccount; +exports.accountFromSelfUrl = accountFromSelfUrl; exports.getUserProfileTemplatedBody = getUserProfileTemplatedBody; // :TODO: more info in default @@ -44,6 +45,11 @@ function selfUrl(webServer, user) { return makeUserUrl(webServer, user, '/ap/users/'); } +function accountFromSelfUrl(url) { + // https://some.l33t.enigma.board/_enig/ap/users/Masto -> Masto + return url.substring(url.lastIndexOf('/') + 1); +} + function userFromAccount(accountName, cb) { if (accountName.startsWith('@')) { accountName = accountName.slice(1); diff --git a/core/servers/content/web.js b/core/servers/content/web.js index 3fb3e3700..509385abb 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -316,6 +316,10 @@ exports.getModule = class WebServerModule extends ServerModule { }); } + badRequest(resp) { + return this.respondWithError(resp, 400, 'Bad request.', 'Bad Request'); + } + accessDenied(resp) { return this.respondWithError(resp, 401, 'Access denied.', 'Access Denied'); } @@ -324,6 +328,24 @@ exports.getModule = class WebServerModule extends ServerModule { return this.respondWithError(resp, 404, 'File not found.', 'File Not Found'); } + resourceNotFound(resp) { + return this.respondWithError( + resp, + 404, + 'Resource not found.', + 'Resource Not Found' + ); + } + + internalServerError(resp) { + return this.respondWithError( + resp, + 500, + 'Internal server error.', + 'Internal Server Error' + ); + } + tryRouteIndex(req, resp, cb) { const tryFiles = Config().contentServers.web.tryFiles || [ 'index.html', diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 57a16b140..7816d2623 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -6,15 +6,17 @@ const { userFromAccount, getUserProfileTemplatedBody, DefaultProfileTemplate, + accountFromSelfUrl, } = require('../../../activitypub_util'); const UserProps = require('../../../user_property'); -const { Errors } = require('../../../enig_error'); const Config = require('../../../config').get; // deps const _ = require('lodash'); -const { trim } = require('lodash'); const enigma_assert = require('../../../enigma_assert'); +const httpSignature = require('http-signature'); +const https = require('https'); +const { Errors } = require('../../../enig_error'); exports.moduleInfo = { name: 'ActivityPub', @@ -40,6 +42,20 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { handler: this._selfUrlRequestHandler.bind(this), }); + this.webServer.addRoute({ + method: 'POST', + //inbox: makeUserUrl(this.webServer, user, '/ap/users/') + '/inbox', + path: /^\/_enig\/ap\/users\/.+\/inbox$/, + handler: this._inboxPostHandler.bind(this), + }); + + // :TODO: NYI + // this.webServer.addRoute({ + // method: 'GET', + // path: /^\/_enig\/authorize_interaction\?uri=(.+)$/, + // handler: this._authorizeInteractionHandler.bind(this), + // }); + return cb(null); } @@ -59,10 +75,10 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { userFromAccount(accountName, (err, user) => { if (err) { this.log.info( - { reason: error.message, accountName: accountName }, + { reason: err.message, accountName: accountName }, `No user "${accountName}" for "self"` ); - return this._notFound(resp); + return this.webServer.resourceNotFound(resp); } // Additionally, serve activity JSON if the proper 'Accept' header was sent @@ -82,6 +98,196 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } + _inboxPostHandler(req, resp) { + // the request must be signed, and the signature must be valid + const signature = this._parseSignature(req); + if (!signature) { + return this.webServer.resourceNotFound(resp); + } + + const keyId = signature.keyId; + if (!this._validateKeyId(keyId)) { + return this.webServer.resourceNotFound(resp); + } + + let body = ''; + req.on('data', data => { + body += data; + }); + + req.on('end', () => { + try { + const activity = JSON.parse(body); + switch (activity.type) { + case 'Follow': + return this._inboxFollowRequestHandler( + keyId, + signature, + activity, + req, + resp + ); + + default: + this.log.debug( + { type: activity.type }, + `Unsupported Activity type "${activity.type}"` + ); + return this.webServer.resourceNotFound(resp); + } + } catch (e) { + this.log.error( + { error: e.message, url: req.url, method: req.method }, + 'Failed to parse Activity' + ); + } + }); + } + + _parseSignature(req) { + try { + // :TODO: validate options passed to parseRequest() + return httpSignature.parseRequest(req); + } catch (e) { + this.log.warn( + { error: e.message, url: req.url, method: req.method }, + 'Failed to parse HTTP signature' + ); + } + } + + _inboxFollowRequestHandler(keyId, signature, activity, req, resp) { + if ( + activity['@context'] !== 'https://www.w3.org/ns/activitystreams' || + !_.isString(activity.actor) || + !_.isString(activity.object) + ) { + return this.webServerbadRequest(resp); + } + + const accountName = accountFromSelfUrl(activity.object); + if (!accountName) { + return this.webServer.badRequest(resp); + } + + userFromAccount(accountName, (err, user) => { + if (err) { + return this.webServer.resourceNotFound(resp); + } + + this._fetchActor(activity.actor, (err, actor) => { + if (err) { + // :TODO: log, and probably should be inspecting |err| + return this.webServer.internalServerError(resp); + } + + const pubKey = actor.publicKey; + if (!_.isObject(pubKey)) { + // Log me + return this.webServer.accessDenied(); + } + + if (keyId !== pubKey.id) { + // :TODO: Log me + return this.webServer.accessDenied(resp); + } + + if (!httpSignature.verifySignature(signature, pubKey.publicKeyPem)) { + this.log.warn( + { + actor: activity.actor, + keyId, + signature: req.headers['signature'] || '', + }, + 'Invalid signature supplied for Follow request' + ); + return this.webServer.accessDenied(resp); + } + + // :TODO: return OK and kick off a async job of persisting and sending and 'Accepted' + + resp.writeHead(200, { 'Content-Type': 'text/html' }); + return resp.end(''); + }); + }); + } + + // :TODO: replace me with a fetch-and-cache in Actor, wrapped in e.g. Actor.fetch(url, options, cb) + _fetchActor(actorUrl, cb) { + const headers = { + Accept: 'application/activity+json', + }; + https + .get(actorUrl, { headers }, res => { + if (res.statusCode !== 200) { + return cb(Errors.Invalid(`Bad HTTP status code: ${req.statusCode}`)); + } + + const contentType = res.headers['content-type']; + if ( + !_.isString(contentType) || + !contentType.startsWith('application/activity+json') + ) { + return cb(Errors.Invalid(`Invalid Content-Type: ${contentType}`)); + } + + res.setEncoding('utf8'); + let body = ''; + res.on('data', data => { + body += data; + }); + + res.on('end', () => { + try { + const actor = JSON.parse(body); + if ( + !Array.isArray(actor['@context']) || + actor['@context'][0] !== + 'https://www.w3.org/ns/activitystreams' + ) { + return cb( + Errors.Invalid('Invalid or missing Actor "@context"') + ); + } + return cb(null, actor); + } catch (e) { + return cb(e); + } + }); + }) + .on('error', err => { + return cb(err); + }); + } + + _validateKeyId(keyId) { + if (!keyId) { + return false; + } + + // we only accept main-key currently + return keyId.endsWith('#main-key'); + } + + _authorizeInteractionHandler(req, resp) { + console.log(req); + } + + // _populateKeyIdInfo(keyId, info) { + // if (!_.isString(keyId)) { + // return false; + // } + + // const m = /^https?:\/\/.+\/(.+)#(main-key)$/.exec(keyId); + // if (!m || !m.length === 3) { + // return false; + // } + + // info.accountName = m[1]; + // info.keyType = m[2]; + // return true; + // } + _selfAsActorHandler(user, req, resp) { this.log.trace( { username: user.username }, @@ -90,6 +296,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { const userSelfUrl = selfUrl(this.webServer, user); + // :TODO: something like: Actor.makeActor(...) const bodyJson = { '@context': [ 'https://www.w3.org/ns/activitystreams', @@ -161,7 +368,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { 'text/plain', (err, body, contentType) => { if (err) { - return this._notFound(resp); + return this.webServer.resourceNotFound(resp); } const headers = { @@ -174,13 +381,4 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } ); } - - _notFound(resp) { - this.webServer.respondWithError( - resp, - 404, - 'Resource not found', - 'Resource Not Found' - ); - } }; diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index a7cf6e82f..ff345226e 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -89,8 +89,8 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { } const userPosition = resource.indexOf('@'); - if (-1 == userPosition || userPosition == resource.length - 1) { - this._notFound(resp); + if (-1 === userPosition || userPosition === resource.length - 1) { + this.webServer.resourceNotFound(resp); return Errors.DoesNotExist('"@username" missing from path'); } @@ -102,7 +102,7 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { { url: req.url, error: err.message, type: 'Profile' }, `No profile for "${accountName}" could be retrieved` ); - return this._notFound(resp); + return this.webServer.resourceNotFound(resp); } let templateFile = _.get( @@ -120,7 +120,7 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { 'text/plain', (err, body, contentType) => { if (err) { - return this._notFound(resp); + return this.webServer.resourceNotFound(resp); } const headers = { @@ -150,7 +150,7 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { const accountName = this._getAccountName(resource); if (!accountName || accountName.length < 1) { - this._notFound(resp); + this.webServer.resourceNotFound(resp); return Errors.DoesNotExist( `Failed to parse "account name" for resource: ${resource}` ); @@ -162,7 +162,7 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { { url: req.url, error: err.message, type: 'WebFinger' }, `No account for "${accountName}" could be retrieved` ); - return this._notFound(resp); + return this.webServer.resourceNotFound(resp); } const domain = this.webServer.getDomain(); @@ -232,13 +232,4 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { } } } - - _notFound(resp) { - this.webServer.respondWithError( - resp, - 404, - 'Resource not found', - 'Resource Not Found' - ); - } }; From 416f86a0cc0dfe6eef0a80d6a049af5267144c86 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 8 Jan 2023 13:18:40 -0700 Subject: [PATCH 042/233] Additional notes for devs --- CONTRIBUTING.md | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ec10cff14..9195c00e9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,6 +2,30 @@ ## Style & Formatting * In general, [Prettier](https://prettier.io) is used. See the [Prettier installation and basic instructions](https://prettier.io/docs/en/install.html) for more information. -* Though you'll see a lot of older style callback code, please utilize modern JavaScript. ES6 classes, arrow functions, and builtins. +* Though you'll see a lot of older style callback code, please utilize modern JavaScript. ES6 classes, [Arrow Functions](#arrow-functions), and builtins. * There is almost never a reason to use `var`. Prefer `const` where you can and and `let` otherwise. * Save with UNIX line feeds, UTF-8 without BOM, and tabs set to 4 spaces. +* Do not include the `.js` suffix when [Importing (require)](#import-require) + +### Arrow Functions +Prefer anonymous arrow functions with access to `this` for callbacks. +```js +// Good! +someApi(foo, bar, (err, result) => { + // ... +}); + +// Bad :( +someApi(foo, bar, function callback(err, result) { + // ... +}); +``` + +### Import (require) +```javascript +// Good! +const foo = require('foo'); + +// Bad :( +const foo = require('foo.js'); +``` \ No newline at end of file From f86d9338a1200c657a60e238ad5e17c71085f097 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 8 Jan 2023 13:18:50 -0700 Subject: [PATCH 043/233] Start work on Activity and Actor objects, validation, fetching, etc. --- core/activitypub_activity.js | 44 ++++++++ core/activitypub_actor.js | 100 ++++++++++++++++-- core/activitypub_actor_property.js | 4 +- core/activitypub_util.js | 5 + core/database.js | 6 +- .../content/web_handlers/activitypub.js | 60 ++++++----- 6 files changed, 177 insertions(+), 42 deletions(-) create mode 100644 core/activitypub_activity.js diff --git a/core/activitypub_activity.js b/core/activitypub_activity.js new file mode 100644 index 000000000..f2f2d25bf --- /dev/null +++ b/core/activitypub_activity.js @@ -0,0 +1,44 @@ +const { isString, isObject } = require('lodash'); + +module.exports = class Activity { + constructor(obj) { + Object.assign(this, obj); + } + + static get ActivityTypes() { + return [ + 'Create', + 'Update', + 'Delete', + 'Follow', + 'Accept', + 'Reject', + 'Add', + 'Remove', + 'Like', + 'Announce', + 'Undo', + ]; + } + + static fromJson(json) { + const parsed = JSON.parse(json); + return new Activity(parsed); + } + + isValid() { + if ( + this['@context'] !== 'https://www.w3.org/ns/activitystreams' || + !isString(this.id) || + !isString(this.actor) || + (!isString(this.object) && !isObject(this.object)) || + !Activity.ActivityTypes.includes(this.type) + ) { + return false; + } + + // :TODO: we could validate the particular types + + return true; + } +}; diff --git a/core/activitypub_actor.js b/core/activitypub_actor.js index 9ab8f01bc..bd62f3974 100644 --- a/core/activitypub_actor.js +++ b/core/activitypub_actor.js @@ -5,28 +5,111 @@ const actorDb = require('./database.js').dbs.actor; const { Errors } = require('./enig_error.js'); const Events = require('./events.js'); -const ActorProps = require('./activitypub_actor_property.js'); +const { ActorProps } = require('./activitypub_actor_property'); +const { isValidLink } = require('./activitypub_util'); // deps const assert = require('assert'); const async = require('async'); const _ = require('lodash'); +const https = require('https'); +const isString = require('lodash/isString'); + +// https://www.w3.org/TR/activitypub/#actor-objects module.exports = class Actor { - constructor() { + constructor(obj) { + if (obj) { + Object.assign(this, obj); + } else { + this['@context'] = ['https://www.w3.org/ns/activitystreams']; + this.id = ''; + this.type = ''; + this.inbox = ''; + this.outbox = ''; + this.following = ''; + this.followers = ''; + this.liked = ''; + } + this.actorId = 0; this.actorUrl = ''; this.properties = {}; // name:value this.groups = []; // group membership(s) } + isValid() { + if ( + !Array.isArray(this['@context']) || + this['@context'][0] !== 'https://www.w3.org/ns/activitystreams' + ) { + return false; + } + + if (!isString(this.type) || this.type.length < 1) { + return false; + } + + const linksValid = ['inbox', 'outbox', 'following', 'followers'].every(p => { + return isValidLink(this[p]); + }); + if (!linksValid) { + return false; + } + + return true; + } + + static getRemoteActor(url, cb) { + const headers = { + Accept: 'application/activity+json', + }; + + https.get(url, { headers }, res => { + if (res.statusCode !== 200) { + return cb(Errors.Invalid(`Bad HTTP status code: ${req.statusCode}`)); + } + + const contentType = res.headers['content-type']; + if ( + !_.isString(contentType) || + !contentType.startsWith('application/activity+json') + ) { + return cb(Errors.Invalid(`Invalid Content-Type: ${contentType}`)); + } + + res.setEncoding('utf8'); + let body = ''; + res.on('data', data => { + body += data; + }); + + res.on('end', () => { + let actor; + try { + actor = Actor.fromJson(body); + } catch (e) { + return cb(e); + } + + if (!actor.isValid()) { + return cb(Errors.Invalid('Invalid Actor')); + } + + return cb(null, actor); + }); + }); + } + + static fromJson(json) { + const parsed = JSON.parse(json); + return new Actor(parsed); + } create(cb) { assert(0 === this.actorId); - if ( - _.isEmpty(this.actorUrl) - ) { + if (_.isEmpty(this.actorUrl)) { return cb(Errors.Invalid('Blank actor url')); } @@ -135,14 +218,14 @@ module.exports = class Actor { } persistProperty(propName, propValue, cb) { - // update live props + // update live props this.properties[propName] = propValue; return Actor.persistPropertyByActorId(this.actorId, propName, propValue, cb); } removeProperty(propName, cb) { - // update live + // update live delete this.properties[propName]; actorDb.run( @@ -206,7 +289,6 @@ module.exports = class Actor { ); } - static getActor(actorId, cb) { async.waterfall( [ @@ -243,7 +325,7 @@ module.exports = class Actor { ActorProps.Summary, ActorProps.IconUrl, ActorProps.BannerUrl, - ActorProps.PublicKeyMain + ActorProps.PublicKeyMain, ]; } diff --git a/core/activitypub_actor_property.js b/core/activitypub_actor_property.js index 8727b830b..91df8a292 100644 --- a/core/activitypub_actor_property.js +++ b/core/activitypub_actor_property.js @@ -7,7 +7,7 @@ // This IS NOT a full list. For example, custom modules // can utilize their own properties as well! // -module.exports = { +exports.ActorProps = { Type: 'type', PreferredUsername: 'preferred_user_name', Name: 'name', @@ -16,3 +16,5 @@ module.exports = { BannerUrl: 'banner_url', PublicKeyMain: 'public_key_main_rsa_pem', // RSA public key for user }; + +exports.AllActorProperties = Object.values(exports.ActorProps); diff --git a/core/activitypub_util.js b/core/activitypub_util.js index 3eedd7d9c..339464c66 100644 --- a/core/activitypub_util.js +++ b/core/activitypub_util.js @@ -11,6 +11,7 @@ const fs = require('graceful-fs'); const paths = require('path'); const moment = require('moment'); +exports.isValidLink = isValidLink; exports.makeUserUrl = makeUserUrl; exports.webFingerProfileUrl = webFingerProfileUrl; exports.selfUrl = selfUrl; @@ -31,6 +32,10 @@ Affiliations: %AFFILIATIONS% Achievement Points: %ACHIEVEMENT_POINTS% `; +function isValidLink(l) { + return /^https?:\/\/.+$/.test(l); +} + function makeUserUrl(webServer, user, relPrefix) { return webServer.buildUrl( WellKnownLocations.Internal + `${relPrefix}${user.username}` diff --git a/core/database.js b/core/database.js index 8c579507b..4e8809354 100644 --- a/core/database.js +++ b/core/database.js @@ -41,7 +41,7 @@ function getModDatabasePath(moduleInfo, suffix) { // filename. An optional suffix may be supplied as well. // const HOST_RE = - /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$/; + /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$/; assert(_.isObject(moduleInfo)); assert(_.isString(moduleInfo.packageName), 'moduleInfo must define "packageName"!'); @@ -81,7 +81,7 @@ function getISOTimestampString(ts) { function sanitizeString(s) { return s.replace(/[\0\x08\x09\x1a\n\r"'\\%]/g, c => { - // eslint-disable-line no-control-regex + // eslint-disable-line no-control-regex switch (c) { case '\0': return '\\0'; @@ -97,7 +97,7 @@ function sanitizeString(s) { return '\\r'; case '"': - case '\'': + case "'": return `${c}${c}`; case '\\': diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 7816d2623..1ad907418 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -10,6 +10,7 @@ const { } = require('../../../activitypub_util'); const UserProps = require('../../../user_property'); const Config = require('../../../config').get; +const Activity = require('../../../activitypub_activity'); // deps const _ = require('lodash'); @@ -17,6 +18,7 @@ const enigma_assert = require('../../../enigma_assert'); const httpSignature = require('http-signature'); const https = require('https'); const { Errors } = require('../../../enig_error'); +const Actor = require('../../../activitypub_actor'); exports.moduleInfo = { name: 'ActivityPub', @@ -105,6 +107,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.resourceNotFound(resp); } + // quick check up front const keyId = signature.keyId; if (!this._validateKeyId(keyId)) { return this.webServer.resourceNotFound(resp); @@ -116,30 +119,37 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); req.on('end', () => { + let activity; try { - const activity = JSON.parse(body); - switch (activity.type) { - case 'Follow': - return this._inboxFollowRequestHandler( - keyId, - signature, - activity, - req, - resp - ); - - default: - this.log.debug( - { type: activity.type }, - `Unsupported Activity type "${activity.type}"` - ); - return this.webServer.resourceNotFound(resp); - } + activity = Activity.fromJson(body); } catch (e) { this.log.error( { error: e.message, url: req.url, method: req.method }, 'Failed to parse Activity' ); + return this.webServer.resourceNotFound(resp); + } + + if (!activity.isValid()) { + // :TODO: Log me + return this.webServer.webServer.badRequest(resp); + } + + switch (activity.type) { + case 'Follow': + return this._inboxFollowRequestHandler( + signature, + activity, + req, + resp + ); + + default: + this.log.debug( + { type: activity.type }, + `Unsupported Activity type "${activity.type}"` + ); + return this.webServer.resourceNotFound(resp); } }); } @@ -156,15 +166,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } } - _inboxFollowRequestHandler(keyId, signature, activity, req, resp) { - if ( - activity['@context'] !== 'https://www.w3.org/ns/activitystreams' || - !_.isString(activity.actor) || - !_.isString(activity.object) - ) { - return this.webServerbadRequest(resp); - } - + _inboxFollowRequestHandler(signature, activity, req, resp) { const accountName = accountFromSelfUrl(activity.object); if (!accountName) { return this.webServer.badRequest(resp); @@ -175,7 +177,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.resourceNotFound(resp); } - this._fetchActor(activity.actor, (err, actor) => { + Actor.getRemoteActor(activity.actor, (err, actor) => { if (err) { // :TODO: log, and probably should be inspecting |err| return this.webServer.internalServerError(resp); @@ -187,7 +189,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.accessDenied(); } - if (keyId !== pubKey.id) { + if (signature.keyId !== pubKey.id) { // :TODO: Log me return this.webServer.accessDenied(resp); } From 2370185bcc2f8b42ff02c1d33a36b70afcad9216 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 8 Jan 2023 13:26:52 -0700 Subject: [PATCH 044/233] Tidy --- core/activitypub_actor.js | 724 +++++++++--------- .../content/web_handlers/activitypub.js | 2 +- 2 files changed, 362 insertions(+), 364 deletions(-) diff --git a/core/activitypub_actor.js b/core/activitypub_actor.js index bd62f3974..dd91525e1 100644 --- a/core/activitypub_actor.js +++ b/core/activitypub_actor.js @@ -29,13 +29,7 @@ module.exports = class Actor { this.outbox = ''; this.following = ''; this.followers = ''; - this.liked = ''; } - - this.actorId = 0; - this.actorUrl = ''; - this.properties = {}; // name:value - this.groups = []; // group membership(s) } isValid() { @@ -60,7 +54,10 @@ module.exports = class Actor { return true; } - static getRemoteActor(url, cb) { + // :TODO: create an Actor object from a local user + static fromLocalUser(userId, cb) {} + + static fromRemoteUrl(url, cb) { const headers = { Accept: 'application/activity+json', }; @@ -106,360 +103,361 @@ module.exports = class Actor { return new Actor(parsed); } - create(cb) { - assert(0 === this.actorId); - - if (_.isEmpty(this.actorUrl)) { - return cb(Errors.Invalid('Blank actor url')); - } - - const self = this; - - async.waterfall( - [ - function beginTransaction(callback) { - return actorDb.beginTransaction(callback); - }, - function createActorRec(trans, callback) { - trans.run( - `INSERT INTO actor (actor_url) - VALUES (?);`, - [self.actorUrl], - function inserted(err) { - // use classic function for |this| - if (err) { - return callback(err); - } - - self.actorId = this.lastID; - - return callback(null, trans); - } - ); - }, - function saveAll(trans, callback) { - self.persistWithTransaction(trans, err => { - return callback(err, trans); - }); - }, - function sendEvent(trans, callback) { - Events.emit(Events.getSystemEvents().NewActor, { - actor: Object.assign({}, self, {}), - }); - return callback(null, trans); - }, - ], - (err, trans) => { - if (trans) { - trans[err ? 'rollback' : 'commit'](transErr => { - return cb(err ? err : transErr); - }); - } else { - return cb(err); - } - } - ); - } - - persistWithTransaction(trans, cb) { - assert(this.actorId > 0); - - const self = this; - - async.series( - [ - function saveProps(callback) { - self.persistProperties(self.properties, trans, err => { - return callback(err); - }); - }, - ], - err => { - return cb(err); - } - ); - } - - static persistPropertyByActorId(actorId, propName, propValue, cb) { - actorDb.run( - `REPLACE INTO activitypub_actor_property (actor_id, prop_name, prop_value) - VALUES (?, ?, ?);`, - [actorId, propName, propValue], - err => { - if (cb) { - return cb(err, propValue); - } - } - ); - } - - setProperty(propName, propValue) { - this.properties[propName] = propValue; - } - - incrementProperty(propName, incrementBy) { - incrementBy = incrementBy || 1; - let newValue = parseInt(this.getProperty(propName)); - if (newValue) { - newValue += incrementBy; - } else { - newValue = incrementBy; - } - this.setProperty(propName, newValue); - return newValue; - } - - getProperty(propName) { - return this.properties[propName]; - } - - getPropertyAsNumber(propName) { - return parseInt(this.getProperty(propName), 10); - } - - persistProperty(propName, propValue, cb) { - // update live props - this.properties[propName] = propValue; - - return Actor.persistPropertyByActorId(this.actorId, propName, propValue, cb); - } - - removeProperty(propName, cb) { - // update live - delete this.properties[propName]; - - actorDb.run( - `DELETE FROM activitypub_actor_property - WHERE activity_id = ? AND prop_name = ?;`, - [this.actorId, propName], - err => { - if (cb) { - return cb(err); - } - } - ); - } - - removeProperties(propNames, cb) { - async.each( - propNames, - (name, next) => { - return this.removeProperty(name, next); - }, - err => { - if (cb) { - return cb(err); - } - } - ); - } - - persistProperties(properties, transOrDb, cb) { - if (!_.isFunction(cb) && _.isFunction(transOrDb)) { - cb = transOrDb; - transOrDb = actorDb; - } - - const self = this; - - // update live props - _.merge(this.properties, properties); - - const stmt = transOrDb.prepare( - `REPLACE INTO activitypub_actor_property (actor_id, prop_name, prop_value) - VALUES (?, ?, ?);` - ); - - async.each( - Object.keys(properties), - (propName, nextProp) => { - stmt.run(self.actorId, propName, properties[propName], err => { - return nextProp(err); - }); - }, - err => { - if (err) { - return cb(err); - } - - stmt.finalize(() => { - return cb(null); - }); - } - ); - } - - static getActor(actorId, cb) { - async.waterfall( - [ - function fetchActorId(callback) { - Actor.getActorUrl(actorId, (err, actorUrl) => { - return callback(null, actorUrl); - }); - }, - function initProps(actorUrl, callback) { - Actor.loadProperties(actorId, (err, properties) => { - return callback(err, actorUrl, properties); - }); - }, - ], - (err, actorUrl, properties) => { - const actor = new Actor(); - actor.actorId = actorId; - actor.actorUrl = actorUrl; - actor.properties = properties; - - return cb(err, actor); - } - ); - } - - // FIXME - static getActorInfo(actorId, propsList, cb) { - if (!cb && _.isFunction(propsList)) { - cb = propsList; - propsList = [ - ActorProps.Type, - ActorProps.PreferredUsername, - ActorProps.Name, - ActorProps.Summary, - ActorProps.IconUrl, - ActorProps.BannerUrl, - ActorProps.PublicKeyMain, - ]; - } - - async.waterfall( - [ - callback => { - return Actor.getActorUrl(actorId, callback); - }, - (actorUrl, callback) => { - Actor.loadProperties(actorId, { names: propsList }, (err, props) => { - return callback( - err, - Object.assign({}, props, { actor_url: actorUrl }) - ); - }); - }, - ], - (err, actorProps) => { - if (err) { - return cb(err); - } - - const actorInfo = {}; - Object.keys(actorProps).forEach(key => { - actorInfo[_.camelCase(key)] = actorProps[key] || 'N/A'; - }); - - return cb(null, actorInfo); - } - ); - } - - static getActorIdAndUrl(actorUrl, cb) { - actorDb.get( - `SELECT id, actor_url - FROM activitypub_actor - WHERE actor_url LIKE ?;`, - [actorUrl], - (err, row) => { - if (err) { - return cb(err); - } - - if (row) { - return cb(null, row.id, row.actor_url); - } - - return cb(Errors.DoesNotExist('No matching actorUrl')); - } - ); - } - - static getActorUrl(actorId, cb) { - actorDb.get( - `SELECT actor_url - FROM activitypub_actor - WHERE id = ?;`, - [actorId], - (err, row) => { - if (err) { - return cb(err); - } - - if (row) { - return cb(null, row.actor_url); - } - - return cb(Errors.DoesNotExist('No matching actor ID')); - } - ); - } - - static loadProperties(actorId, options, cb) { - if (!cb && _.isFunction(options)) { - cb = options; - options = {}; - } - - let sql = `SELECT prop_name, prop_value - FROM activitypub_actor_property - WHERE actor_id = ?`; - - if (options.names) { - sql += ` AND prop_name IN("${options.names.join('","')}");`; - } else { - sql += ';'; - } - - let properties = {}; - actorDb.each( - sql, - [actorId], - (err, row) => { - if (err) { - return cb(err); - } - properties[row.prop_name] = row.prop_value; - }, - err => { - return cb(err, err ? null : properties); - } - ); - } - - // :TODO: make this much more flexible - propValue should allow for case-insensitive compare, etc. - static getActorIdsWithProperty(propName, propValue, cb) { - let actorIds = []; - - actorDb.each( - `SELECT actor_id - FROM activitypub_actor_property - WHERE prop_name = ? AND prop_value = ?;`, - [propName, propValue], - (err, row) => { - if (row) { - actorIds.push(row.actor_id); - } - }, - () => { - return cb(null, actorIds); - } - ); - } - - static getActorCount(cb) { - actorDb.get( - `SELECT count() AS actor_count - FROM activitypub_actor;`, - (err, row) => { - if (err) { - return cb(err); - } - return cb(null, row.actor_count); - } - ); - } + // :TODO: persist()? + // create(cb) { + // assert(0 === this.actorId); + + // if (_.isEmpty(this.actorUrl)) { + // return cb(Errors.Invalid('Blank actor url')); + // } + + // const self = this; + + // async.waterfall( + // [ + // function beginTransaction(callback) { + // return actorDb.beginTransaction(callback); + // }, + // function createActorRec(trans, callback) { + // trans.run( + // `INSERT INTO actor (actor_url) + // VALUES (?);`, + // [self.actorUrl], + // function inserted(err) { + // // use classic function for |this| + // if (err) { + // return callback(err); + // } + + // self.actorId = this.lastID; + + // return callback(null, trans); + // } + // ); + // }, + // function saveAll(trans, callback) { + // self.persistWithTransaction(trans, err => { + // return callback(err, trans); + // }); + // }, + // function sendEvent(trans, callback) { + // Events.emit(Events.getSystemEvents().NewActor, { + // actor: Object.assign({}, self, {}), + // }); + // return callback(null, trans); + // }, + // ], + // (err, trans) => { + // if (trans) { + // trans[err ? 'rollback' : 'commit'](transErr => { + // return cb(err ? err : transErr); + // }); + // } else { + // return cb(err); + // } + // } + // ); + // } + + // persistWithTransaction(trans, cb) { + // assert(this.actorId > 0); + + // const self = this; + + // async.series( + // [ + // function saveProps(callback) { + // self.persistProperties(self.properties, trans, err => { + // return callback(err); + // }); + // }, + // ], + // err => { + // return cb(err); + // } + // ); + // } + + // static persistPropertyByActorId(actorId, propName, propValue, cb) { + // actorDb.run( + // `REPLACE INTO activitypub_actor_property (actor_id, prop_name, prop_value) + // VALUES (?, ?, ?);`, + // [actorId, propName, propValue], + // err => { + // if (cb) { + // return cb(err, propValue); + // } + // } + // ); + // } + + // setProperty(propName, propValue) { + // this.properties[propName] = propValue; + // } + + // incrementProperty(propName, incrementBy) { + // incrementBy = incrementBy || 1; + // let newValue = parseInt(this.getProperty(propName)); + // if (newValue) { + // newValue += incrementBy; + // } else { + // newValue = incrementBy; + // } + // this.setProperty(propName, newValue); + // return newValue; + // } + + // getProperty(propName) { + // return this.properties[propName]; + // } + + // getPropertyAsNumber(propName) { + // return parseInt(this.getProperty(propName), 10); + // } + + // persistProperty(propName, propValue, cb) { + // // update live props + // this.properties[propName] = propValue; + + // return Actor.persistPropertyByActorId(this.actorId, propName, propValue, cb); + // } + + // removeProperty(propName, cb) { + // // update live + // delete this.properties[propName]; + + // actorDb.run( + // `DELETE FROM activitypub_actor_property + // WHERE activity_id = ? AND prop_name = ?;`, + // [this.actorId, propName], + // err => { + // if (cb) { + // return cb(err); + // } + // } + // ); + // } + + // removeProperties(propNames, cb) { + // async.each( + // propNames, + // (name, next) => { + // return this.removeProperty(name, next); + // }, + // err => { + // if (cb) { + // return cb(err); + // } + // } + // ); + // } + + // persistProperties(properties, transOrDb, cb) { + // if (!_.isFunction(cb) && _.isFunction(transOrDb)) { + // cb = transOrDb; + // transOrDb = actorDb; + // } + + // const self = this; + + // // update live props + // _.merge(this.properties, properties); + + // const stmt = transOrDb.prepare( + // `REPLACE INTO activitypub_actor_property (actor_id, prop_name, prop_value) + // VALUES (?, ?, ?);` + // ); + + // async.each( + // Object.keys(properties), + // (propName, nextProp) => { + // stmt.run(self.actorId, propName, properties[propName], err => { + // return nextProp(err); + // }); + // }, + // err => { + // if (err) { + // return cb(err); + // } + + // stmt.finalize(() => { + // return cb(null); + // }); + // } + // ); + // } + + // static getActor(actorId, cb) { + // async.waterfall( + // [ + // function fetchActorId(callback) { + // Actor.getActorUrl(actorId, (err, actorUrl) => { + // return callback(null, actorUrl); + // }); + // }, + // function initProps(actorUrl, callback) { + // Actor.loadProperties(actorId, (err, properties) => { + // return callback(err, actorUrl, properties); + // }); + // }, + // ], + // (err, actorUrl, properties) => { + // const actor = new Actor(); + // actor.actorId = actorId; + // actor.actorUrl = actorUrl; + // actor.properties = properties; + + // return cb(err, actor); + // } + // ); + // } + + // // FIXME + // static getActorInfo(actorId, propsList, cb) { + // if (!cb && _.isFunction(propsList)) { + // cb = propsList; + // propsList = [ + // ActorProps.Type, + // ActorProps.PreferredUsername, + // ActorProps.Name, + // ActorProps.Summary, + // ActorProps.IconUrl, + // ActorProps.BannerUrl, + // ActorProps.PublicKeyMain, + // ]; + // } + + // async.waterfall( + // [ + // callback => { + // return Actor.getActorUrl(actorId, callback); + // }, + // (actorUrl, callback) => { + // Actor.loadProperties(actorId, { names: propsList }, (err, props) => { + // return callback( + // err, + // Object.assign({}, props, { actor_url: actorUrl }) + // ); + // }); + // }, + // ], + // (err, actorProps) => { + // if (err) { + // return cb(err); + // } + + // const actorInfo = {}; + // Object.keys(actorProps).forEach(key => { + // actorInfo[_.camelCase(key)] = actorProps[key] || 'N/A'; + // }); + + // return cb(null, actorInfo); + // } + // ); + // } + + // static getActorIdAndUrl(actorUrl, cb) { + // actorDb.get( + // `SELECT id, actor_url + // FROM activitypub_actor + // WHERE actor_url LIKE ?;`, + // [actorUrl], + // (err, row) => { + // if (err) { + // return cb(err); + // } + + // if (row) { + // return cb(null, row.id, row.actor_url); + // } + + // return cb(Errors.DoesNotExist('No matching actorUrl')); + // } + // ); + // } + + // static getActorUrl(actorId, cb) { + // actorDb.get( + // `SELECT actor_url + // FROM activitypub_actor + // WHERE id = ?;`, + // [actorId], + // (err, row) => { + // if (err) { + // return cb(err); + // } + + // if (row) { + // return cb(null, row.actor_url); + // } + + // return cb(Errors.DoesNotExist('No matching actor ID')); + // } + // ); + // } + + // static loadProperties(actorId, options, cb) { + // if (!cb && _.isFunction(options)) { + // cb = options; + // options = {}; + // } + + // let sql = `SELECT prop_name, prop_value + // FROM activitypub_actor_property + // WHERE actor_id = ?`; + + // if (options.names) { + // sql += ` AND prop_name IN("${options.names.join('","')}");`; + // } else { + // sql += ';'; + // } + + // let properties = {}; + // actorDb.each( + // sql, + // [actorId], + // (err, row) => { + // if (err) { + // return cb(err); + // } + // properties[row.prop_name] = row.prop_value; + // }, + // err => { + // return cb(err, err ? null : properties); + // } + // ); + // } + + // // :TODO: make this much more flexible - propValue should allow for case-insensitive compare, etc. + // static getActorIdsWithProperty(propName, propValue, cb) { + // let actorIds = []; + + // actorDb.each( + // `SELECT actor_id + // FROM activitypub_actor_property + // WHERE prop_name = ? AND prop_value = ?;`, + // [propName, propValue], + // (err, row) => { + // if (row) { + // actorIds.push(row.actor_id); + // } + // }, + // () => { + // return cb(null, actorIds); + // } + // ); + // } + + // static getActorCount(cb) { + // actorDb.get( + // `SELECT count() AS actor_count + // FROM activitypub_actor;`, + // (err, row) => { + // if (err) { + // return cb(err); + // } + // return cb(null, row.actor_count); + // } + // ); + // } }; diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 1ad907418..f017e6832 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -177,7 +177,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.resourceNotFound(resp); } - Actor.getRemoteActor(activity.actor, (err, actor) => { + Actor.fromRemoteUrl(activity.actor, (err, actor) => { if (err) { // :TODO: log, and probably should be inspecting |err| return this.webServer.internalServerError(resp); From e5b2beffcf1c3b3eda5ed3323895967073d5f6cf Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 8 Jan 2023 13:42:52 -0700 Subject: [PATCH 045/233] Actor.fromLocalUser() --- core/activitypub_actor.js | 61 ++++++++- .../content/web_handlers/activitypub.js | 128 ++---------------- 2 files changed, 70 insertions(+), 119 deletions(-) diff --git a/core/activitypub_actor.js b/core/activitypub_actor.js index dd91525e1..fa7a65fd8 100644 --- a/core/activitypub_actor.js +++ b/core/activitypub_actor.js @@ -4,9 +4,15 @@ // ENiGMA½ const actorDb = require('./database.js').dbs.actor; const { Errors } = require('./enig_error.js'); -const Events = require('./events.js'); const { ActorProps } = require('./activitypub_actor_property'); -const { isValidLink } = require('./activitypub_util'); +const UserProps = require('./user_property'); +const { + webFingerProfileUrl, + makeUserUrl, + selfUrl, + isValidLink, +} = require('./activitypub_util'); +const Log = require('./logger').log; // deps const assert = require('assert'); @@ -54,8 +60,55 @@ module.exports = class Actor { return true; } - // :TODO: create an Actor object from a local user - static fromLocalUser(userId, cb) {} + // :TODO: from a User object + static fromLocalUser(user, webServer, cb) { + const userSelfUrl = selfUrl(webServer, user); + + const obj = { + '@context': [ + 'https://www.w3.org/ns/activitystreams', + 'https://w3id.org/security/v1', // :TODO: add support + ], + id: userSelfUrl, + type: 'Person', + preferredUsername: user.username, + name: user.getSanitizedName('real'), + endpoints: { + sharedInbox: 'TODO', + }, + inbox: makeUserUrl(webServer, user, '/ap/users/') + '/inbox', + outbox: makeUserUrl(webServer, user, '/ap/users/') + '/outbox', + followers: makeUserUrl(webServer, user, '/ap/users/') + '/followers', + following: makeUserUrl(webServer, user, '/ap/users/') + '/following', + summary: user.getProperty(UserProps.AutoSignature) || '', + url: webFingerProfileUrl(webServer, user), + + // :TODO: we can start to define BBS related stuff with the community perhaps + // attachment: [ + // { + // name: 'SomeNetwork Address', + // type: 'PropertyValue', + // value: 'Mateo@21:1/121', + // }, + // ], + }; + + const publicKeyPem = user.getProperty(UserProps.PublicKeyMain); + if (!_.isEmpty(publicKeyPem)) { + obj.publicKey = { + id: userSelfUrl + '#main-key', + owner: userSelfUrl, + publicKeyPem, + }; + } else { + Log.warn( + { username: user.username }, + `No public key (${UserProps.PublicKeyMain}) for user "${user.username}"` + ); + } + + return cb(null, new Actor(obj)); + } static fromRemoteUrl(url, cb) { const headers = { diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index f017e6832..968d36787 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -214,54 +214,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } - // :TODO: replace me with a fetch-and-cache in Actor, wrapped in e.g. Actor.fetch(url, options, cb) - _fetchActor(actorUrl, cb) { - const headers = { - Accept: 'application/activity+json', - }; - https - .get(actorUrl, { headers }, res => { - if (res.statusCode !== 200) { - return cb(Errors.Invalid(`Bad HTTP status code: ${req.statusCode}`)); - } - - const contentType = res.headers['content-type']; - if ( - !_.isString(contentType) || - !contentType.startsWith('application/activity+json') - ) { - return cb(Errors.Invalid(`Invalid Content-Type: ${contentType}`)); - } - - res.setEncoding('utf8'); - let body = ''; - res.on('data', data => { - body += data; - }); - - res.on('end', () => { - try { - const actor = JSON.parse(body); - if ( - !Array.isArray(actor['@context']) || - actor['@context'][0] !== - 'https://www.w3.org/ns/activitystreams' - ) { - return cb( - Errors.Invalid('Invalid or missing Actor "@context"') - ); - } - return cb(null, actor); - } catch (e) { - return cb(e); - } - }); - }) - .on('error', err => { - return cb(err); - }); - } - _validateKeyId(keyId) { if (!keyId) { return false; @@ -275,82 +227,28 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { console.log(req); } - // _populateKeyIdInfo(keyId, info) { - // if (!_.isString(keyId)) { - // return false; - // } - - // const m = /^https?:\/\/.+\/(.+)#(main-key)$/.exec(keyId); - // if (!m || !m.length === 3) { - // return false; - // } - - // info.accountName = m[1]; - // info.keyType = m[2]; - // return true; - // } - _selfAsActorHandler(user, req, resp) { this.log.trace( { username: user.username }, `Serving ActivityPub Actor for "${user.username}"` ); - const userSelfUrl = selfUrl(this.webServer, user); - - // :TODO: something like: Actor.makeActor(...) - const bodyJson = { - '@context': [ - 'https://www.w3.org/ns/activitystreams', - 'https://w3id.org/security/v1', - ], - id: userSelfUrl, - type: 'Person', - preferredUsername: user.username, - name: user.getSanitizedName('real'), - endpoints: { - sharedInbox: 'TODO', - }, - inbox: makeUserUrl(this.webServer, user, '/ap/users/') + '/inbox', - outbox: makeUserUrl(this.webServer, user, '/ap/users/') + '/outbox', - followers: makeUserUrl(this.webServer, user, '/ap/users/') + '/followers', - following: makeUserUrl(this.webServer, user, '/ap/users/') + '/following', - summary: user.getProperty(UserProps.AutoSignature) || '', - url: webFingerProfileUrl(this.webServer, user), - - // :TODO: we can start to define BBS related stuff with the community perhaps - // attachment: [ - // { - // name: 'SomeNetwork Address', - // type: 'PropertyValue', - // value: 'Mateo@21:1/121', - // }, - // ], - }; - - const publicKeyPem = user.getProperty(UserProps.PublicKeyMain); - if (!_.isEmpty(publicKeyPem)) { - bodyJson['publicKey'] = { - id: userSelfUrl + '#main-key', - owner: userSelfUrl, - publicKeyPem, - }; - } else { - this.log.warn( - { username: user.username }, - `No public key (${UserProps.PublicKeyMain}) for user "${user.username}"` - ); - } + Actor.fromLocalUser(user, this.webServer, (err, actor) => { + if (err) { + // :TODO: Log me + return this.webServer.internalServerError(resp); + } - const body = JSON.stringify(bodyJson); + const body = JSON.stringify(actor); - const headers = { - 'Content-Type': 'application/activity+json', - 'Content-Length': body.length, - }; + const headers = { + 'Content-Type': 'application/activity+json', + 'Content-Length': body.length, + }; - resp.writeHead(200, headers); - return resp.end(body); + resp.writeHead(200, headers); + return resp.end(body); + }); } _standardSelfHandler(user, req, resp) { From 3a70cc6939a88d9863723eb7c2adae4a50ee3665 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 8 Jan 2023 17:11:49 -0700 Subject: [PATCH 046/233] Abilitiy to respond with 'Accept' Activity and ActivityPubSettings user props --- core/activitypub_activity.js | 20 ++++++++- core/activitypub_actor.js | 8 ++-- core/activitypub_settings.js | 42 +++++++++++++++++++ core/activitypub_util.js | 8 ++++ .../content/web_handlers/activitypub.js | 31 +++++++++++--- core/user_property.js | 2 + 6 files changed, 102 insertions(+), 9 deletions(-) create mode 100644 core/activitypub_settings.js diff --git a/core/activitypub_activity.js b/core/activitypub_activity.js index f2f2d25bf..5aa07167f 100644 --- a/core/activitypub_activity.js +++ b/core/activitypub_activity.js @@ -1,7 +1,10 @@ const { isString, isObject } = require('lodash'); +const { v4: UUIDv4 } = require('uuid'); +const { ActivityStreamsContext } = require('./activitypub_util'); module.exports = class Activity { constructor(obj) { + this['@context'] = ActivityStreamsContext; Object.assign(this, obj); } @@ -28,7 +31,7 @@ module.exports = class Activity { isValid() { if ( - this['@context'] !== 'https://www.w3.org/ns/activitystreams' || + this['@context'] !== ActivityStreamsContext || !isString(this.id) || !isString(this.actor) || (!isString(this.object) && !isObject(this.object)) || @@ -41,4 +44,19 @@ module.exports = class Activity { return true; } + + // https://www.w3.org/TR/activitypub/#accept-activity-inbox + static makeAccept(webServer, localActor, followRequest, id = null) { + id = id || webServer.buildUrl(`/${UUIDv4()}`); + + return new Activity({ + type: 'Accept', + actor: localActor, + object: followRequest, // previous request Activity + }); + } + + sendTo(actorUrl, cb) { + // :TODO: https send |this| to actorUrl + } }; diff --git a/core/activitypub_actor.js b/core/activitypub_actor.js index fa7a65fd8..c9dacf853 100644 --- a/core/activitypub_actor.js +++ b/core/activitypub_actor.js @@ -11,6 +11,7 @@ const { makeUserUrl, selfUrl, isValidLink, + ActivityStreamsContext, } = require('./activitypub_util'); const Log = require('./logger').log; @@ -25,10 +26,11 @@ const isString = require('lodash/isString'); // https://www.w3.org/TR/activitypub/#actor-objects module.exports = class Actor { constructor(obj) { + this['@context'] = [ActivityStreamsContext]; + if (obj) { Object.assign(this, obj); } else { - this['@context'] = ['https://www.w3.org/ns/activitystreams']; this.id = ''; this.type = ''; this.inbox = ''; @@ -41,7 +43,7 @@ module.exports = class Actor { isValid() { if ( !Array.isArray(this['@context']) || - this['@context'][0] !== 'https://www.w3.org/ns/activitystreams' + this['@context'][0] !== ActivityStreamsContext ) { return false; } @@ -66,7 +68,7 @@ module.exports = class Actor { const obj = { '@context': [ - 'https://www.w3.org/ns/activitystreams', + ActivityStreamsContext, 'https://w3id.org/security/v1', // :TODO: add support ], id: userSelfUrl, diff --git a/core/activitypub_settings.js b/core/activitypub_settings.js new file mode 100644 index 000000000..f98ca6502 --- /dev/null +++ b/core/activitypub_settings.js @@ -0,0 +1,42 @@ +const { selfUrl } = require('./activitypub_util'); +const UserProps = require('./user_property'); + +module.exports = class ActivityPubSettings { + constructor(obj) { + this.enabled = true; // :TODO: fetch from +op config default + this.manuallyApproveFollowers = false; + this.hideSocialGraph = false; // followers, following + this.showRealName = false; + this.imageUrl = ''; + this.iconUrl = ''; + + if (obj) { + Object.assign(this, obj); + } + } + + static fromUser(user) { + if (!user.activityPubSettings) { + const settingsProp = user.getProperty(UserProps.ActivityPubSettings); + let settings; + try { + const parsed = JSON.parse(settingsProp); + settings = new ActivityPubSettings(parsed); + } catch (e) { + settings = new ActivityPubSettings(); + } + + user.activityPubSettings = settings; + } + + return user.activityPubSettings; + } + + persistToUserProperties(user, cb = null) { + return user.persistProperty( + UserProps.ActivityPubSettings, + JSON.stringify(this), + cb + ); + } +}; diff --git a/core/activitypub_util.js b/core/activitypub_util.js index 339464c66..667390c4f 100644 --- a/core/activitypub_util.js +++ b/core/activitypub_util.js @@ -2,6 +2,7 @@ const { WellKnownLocations } = require('./servers/content/web'); const User = require('./user'); const { Errors, ErrorReasons } = require('./enig_error'); const UserProps = require('./user_property'); +const ActivityPubSettings = require('./activitypub_settings'); // deps const _ = require('lodash'); @@ -11,6 +12,7 @@ const fs = require('graceful-fs'); const paths = require('path'); const moment = require('moment'); +exports.ActivityStreamsContext = 'https://www.w3.org/ns/activitystreams'; exports.isValidLink = isValidLink; exports.makeUserUrl = makeUserUrl; exports.webFingerProfileUrl = webFingerProfileUrl; @@ -52,6 +54,7 @@ function selfUrl(webServer, user) { function accountFromSelfUrl(url) { // https://some.l33t.enigma.board/_enig/ap/users/Masto -> Masto + // :TODO: take webServer, and just take path-to-users.length +1 return url.substring(url.lastIndexOf('/') + 1); } @@ -78,6 +81,11 @@ function userFromAccount(accountName, cb) { return cb(Errors.AccessDenied('Account disabled', ErrorReasons.Disabled)); } + const activityPubSettings = ActivityPubSettings.fromUser(user); + if (!activityPubSettings.enabled) { + return cb(Errors.AccessDenied('ActivityPub is not enabled for user')); + } + return cb(null, user); }); }); diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 968d36787..06cbb9f48 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -1,16 +1,13 @@ const WebHandlerModule = require('../../../web_handler_module'); const { - makeUserUrl, - webFingerProfileUrl, - selfUrl, userFromAccount, getUserProfileTemplatedBody, DefaultProfileTemplate, accountFromSelfUrl, } = require('../../../activitypub_util'); -const UserProps = require('../../../user_property'); const Config = require('../../../config').get; const Activity = require('../../../activitypub_activity'); +const ActivityPubSettings = require('../../../activitypub_settings'); // deps const _ = require('lodash'); @@ -46,7 +43,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { this.webServer.addRoute({ method: 'POST', - //inbox: makeUserUrl(this.webServer, user, '/ap/users/') + '/inbox', path: /^\/_enig\/ap\/users\/.+\/inbox$/, handler: this._inboxPostHandler.bind(this), }); @@ -208,6 +204,31 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { // :TODO: return OK and kick off a async job of persisting and sending and 'Accepted' + // + // If the user blindly accepts Followers, we can persist + // and send an 'Accept' now. Otherwise, we need to queue this + // request for the user to review and decide what to do with + // at a later time. + // + const activityPubSettings = ActivityPubSettings.fromUser(user); + if (!activityPubSettings.manuallyApproveFollowers) { + // + // :TODO: Implement the queue + Actor.fromLocalUser(user, this.webServer, (err, localActor) => { + if (err) { + // :TODO: + return; + } + + const accept = Activity.makeAccept( + this.webServer, + localActor, + activity + ); + console.log(accept); + }); + } + resp.writeHead(200, { 'Content-Type': 'text/html' }); return resp.end(''); }); diff --git a/core/user_property.js b/core/user_property.js index d173b0a48..f52c8b7be 100644 --- a/core/user_property.js +++ b/core/user_property.js @@ -69,4 +69,6 @@ module.exports = { PublicKeyMain: 'public_key_main_rsa_pem', // RSA public key for user PrivateKeyMain: 'private_key_main_rsa_pem', // RSA private key (corresponding to PublicKeyMain) + + ActivityPubSettings: 'activity_pub_settings', // JSON object (above); see ActivityPubSettings in activitypub_settings.js }; From 44c67f5327c2927be1265156dc8bd70249b3e0d0 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 8 Jan 2023 20:34:30 -0700 Subject: [PATCH 047/233] Added HTTP util: postJson(), post Accept Activity to server with signing --- core/activitypub_settings.js | 1 - core/enig_error.js | 5 +- core/http_util.js | 72 +++++++++++++++++++ .../content/web_handlers/activitypub.js | 63 +++++++++++++++- 4 files changed, 136 insertions(+), 5 deletions(-) create mode 100644 core/http_util.js diff --git a/core/activitypub_settings.js b/core/activitypub_settings.js index f98ca6502..87d9123cf 100644 --- a/core/activitypub_settings.js +++ b/core/activitypub_settings.js @@ -1,4 +1,3 @@ -const { selfUrl } = require('./activitypub_util'); const UserProps = require('./user_property'); module.exports = class ActivityPubSettings { diff --git a/core/enig_error.js b/core/enig_error.js index 1470dcedc..c9d16a541 100644 --- a/core/enig_error.js +++ b/core/enig_error.js @@ -42,7 +42,7 @@ exports.Errors = { UnexpectedState: (reason, reasonCode) => new EnigError('Unexpected state', -32007, reason, reasonCode), MissingParam: (reason, reasonCode) => - new EnigError('Missing paramter(s)', -32008, reason, reasonCode), + new EnigError('Missing parameter(s)', -32008, reason, reasonCode), MissingMci: (reason, reasonCode) => new EnigError('Missing required MCI code(s)', -32009, reason, reasonCode), BadLogin: (reason, reasonCode) => @@ -51,6 +51,9 @@ exports.Errors = { new EnigError('User interrupted', -32011, reason, reasonCode), NothingToDo: (reason, reasonCode) => new EnigError('Nothing to do', -32012, reason, reasonCode), + HttpError: (reason, reasonCode) => + new EnigError('HTTP error', -32013, reason, reasonCode), + Timeout: (reason, reasonCode) => new EnigError('Timeout', -32014, reason, reasonCode), }; exports.ErrorReasons = { diff --git a/core/http_util.js b/core/http_util.js new file mode 100644 index 000000000..7fd8cf71c --- /dev/null +++ b/core/http_util.js @@ -0,0 +1,72 @@ +const { Errors } = require('./enig_error.js'); + +// deps +const { isString, isObject } = require('lodash'); +const https = require('https'); +const httpSignature = require('http-signature'); +const crypto = require('crypto'); + +exports.postJson = postJson; + +function postJson(url, json, options, cb) { + if (!isString(json)) { + json = JSON.stringify(json); + } + + const defaultOptions = { + method: 'POST', + body: json, + headers: { + 'Content-Type': 'application/json', + }, + }; + + options = Object.assign({}, defaultOptions, options); + + if (options?.sign?.headers?.includes('digest')) { + options.headers['Digest'] = `SHA-256=${crypto + .createHash('sha256') + .update(json) + .digest('base64')}`; + } + + options.headers['Content-Length'] = json.length; + + const req = https.request(url, options, res => { + let body = []; + res.on('data', d => { + body.push(d); + }); + + res.on('end', () => { + body = Buffer.concat(body).toString(); + + if (res.statusCode < 200 || res.statusCode > 299) { + return cb(Errors.HttpError(`HTTP error ${res.statusCode}: ${body}`)); + } + + return cb(null, body, res); + }); + }); + + if (isObject(options.sign)) { + try { + httpSignature.sign(req, options.sign); + } catch (e) { + req.destroy(); + return cb(Errors.Invalid(`Invalid signing material: ${e}`)); + } + } + + req.on('error', err => { + return cb(err); + }); + + req.on('timeout', () => { + req.destroy(); + return cb(Errors.Timeout('Timeout making HTTP request')); + }); + + req.write(json); + req.end(); +} diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 06cbb9f48..79fd28d5c 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -4,18 +4,20 @@ const { getUserProfileTemplatedBody, DefaultProfileTemplate, accountFromSelfUrl, + selfUrl, } = require('../../../activitypub_util'); const Config = require('../../../config').get; const Activity = require('../../../activitypub_activity'); const ActivityPubSettings = require('../../../activitypub_settings'); +const Actor = require('../../../activitypub_actor'); +const { postJson } = require('../../../http_util'); +const UserProps = require('../../../user_property'); // deps const _ = require('lodash'); const enigma_assert = require('../../../enigma_assert'); const httpSignature = require('http-signature'); const https = require('https'); -const { Errors } = require('../../../enig_error'); -const Actor = require('../../../activitypub_actor'); exports.moduleInfo = { name: 'ActivityPub', @@ -220,12 +222,67 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return; } + // user must have a Private Key + const privateKey = user.getProperty(UserProps.PrivateKeyMain); + if (_.isEmpty(privateKey)) { + // :TODO: Log me + return; + } + const accept = Activity.makeAccept( this.webServer, localActor, activity ); - console.log(accept); + + const keyId = selfUrl(this.webServer, user) + '#main-key'; + + const reqOpts = { + headers: { + 'Content-Type': 'application/activity+json', + }, + sign: { + // :TODO: Make a helper for this + key: privateKey, + keyId, + authorizationHeaderName: 'Signature', + headers: [ + '(request-target)', + 'host', + 'date', + 'digest', + 'content-type', + ], + }, + }; + + postJson( + actor.inbox, + JSON.stringify(accept), + reqOpts, + (err, respBody, res) => { + if (err) { + return this.log.warn( + { + inbox: actor.inbox, + statusCode: res.statusCode, + error: err.message, + }, + 'Failed POSTing "Accept" to inbox' + ); + } + + if (res.statusCode != 202) { + return this.log.warn( + { + inbox: actor.inbox, + statusCode: res.statusCode, + }, + 'Unexpected status code' + ); + } + } + ); }); } From 01cd91b0453f2707853d414f518d3ed4e0958e24 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 8 Jan 2023 20:43:16 -0700 Subject: [PATCH 048/233] Fix route --- core/servers/content/web_handlers/activitypub.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 79fd28d5c..de149707c 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -39,7 +39,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { this.webServer.addRoute({ method: 'GET', - path: /^\/_enig\/ap\/users\/.+$/, + path: /^\/_enig\/ap\/users\/[^\/]+$/, handler: this._selfUrlRequestHandler.bind(this), }); From ef118325bafb183380a7b81f82e088ff93dfc261 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 11 Jan 2023 09:47:07 -0700 Subject: [PATCH 049/233] Add intiial 'flavor' for ActivityPub messages --- core/mail_util.js | 15 +++++++++++++++ core/message.js | 1 + core/servers/content/web_handlers/activitypub.js | 6 ++++++ 3 files changed, 22 insertions(+) diff --git a/core/mail_util.js b/core/mail_util.js index 9b4bfefe7..15a467ff1 100644 --- a/core/mail_util.js +++ b/core/mail_util.js @@ -21,6 +21,7 @@ const EMAIL_REGEX = 43:20/100.2 { flavor : 'ftn', remote : '43:20/100.2' } foo@host.com { name : 'foo', flavor : 'email', remote : 'foo@host.com' } Bar { name : 'Bar', flavor : 'email', remote : 'baz@foobar.com' } + @JoeUser@some.host.com { name : 'Joe User', flavor : 'activitypub', remote 'JoeUser@some.host.com' } */ function getAddressedToInfo(input) { input = input.trim(); @@ -55,6 +56,20 @@ function getAddressedToInfo(input) { return { name: input, flavor: Message.AddressFlavor.Local }; } + if (firstAtPos === 0) { + const secondAtPos = input.indexOf('@', 1); + if (secondAtPos > 0) { + const m = input.slice(1).match(EMAIL_REGEX); + if (m) { + return { + name: input.slice(1, secondAtPos), + flavor: Message.AddressFlavor.ActivityPub, + remote: input.slice(firstAtPos), + }; + } + } + } + const lessThanPos = input.indexOf('<'); const greaterThanPos = input.indexOf('>'); if (lessThanPos > 0 && greaterThanPos > lessThanPos) { diff --git a/core/message.js b/core/message.js index 6a0638024..47c168215 100644 --- a/core/message.js +++ b/core/message.js @@ -56,6 +56,7 @@ const ADDRESS_FLAVOR = { Email: 'email', // From email QWK: 'qwk', // QWK packet NNTP: 'nntp', // NNTP article POST; often a email address + ActivityPub: 'activitypub', // ActivityPub, Mastodon, etc. }; const STATE_FLAGS0 = { diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index de149707c..45a57b073 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -229,6 +229,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return; } + // :TODO: This stuff should probably be lifted out so it can be called ad-hoc from the queue const accept = Activity.makeAccept( this.webServer, localActor, @@ -281,6 +282,11 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { 'Unexpected status code' ); } + + this.log.trace( + { inbox: actor.inbox }, + 'Remote server received our "Accept" successfully' + ); } ); }); From 64848b467595cd71ac2d279962a19bbef5062656 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 11 Jan 2023 22:37:09 -0700 Subject: [PATCH 050/233] Initial 'Note' support for ActivitiyPub/Mastodon, reconition of @User@domain ActivityPub addresses, skeleton for ActivityPub scan/toss --- core/activitypub_activity.js | 146 +++++++++++++++++- core/activitypub_actor.js | 40 ++++- core/activitypub_util.js | 10 ++ core/enig_error.js | 2 + core/fse.js | 31 ++-- core/http_util.js | 84 +++++++++- core/mail_util.js | 59 +++++-- core/message.js | 17 ++ core/scanner_tossers/activitypub.js | 87 +++++++++++ .../content/web_handlers/activitypub.js | 44 +----- core/system_view_validate.js | 4 +- core/webfinger.js | 49 ++++++ 12 files changed, 495 insertions(+), 78 deletions(-) create mode 100644 core/scanner_tossers/activitypub.js create mode 100644 core/webfinger.js diff --git a/core/activitypub_activity.js b/core/activitypub_activity.js index 5aa07167f..3eca0c581 100644 --- a/core/activitypub_activity.js +++ b/core/activitypub_activity.js @@ -1,6 +1,20 @@ const { isString, isObject } = require('lodash'); const { v4: UUIDv4 } = require('uuid'); -const { ActivityStreamsContext } = require('./activitypub_util'); +const { + ActivityStreamsContext, + messageBodyToHtml, + selfUrl, +} = require('./activitypub_util'); +const { Errors } = require('./enig_error'); +const User = require('./user'); +const Actor = require('./activitypub_actor'); +const { getISOTimestampString } = require('./database'); +const UserProps = require('./user_property'); +const { postJson } = require('./http_util'); + +// deps +const async = require('async'); +const _ = require('lodash'); module.exports = class Activity { constructor(obj) { @@ -47,7 +61,7 @@ module.exports = class Activity { // https://www.w3.org/TR/activitypub/#accept-activity-inbox static makeAccept(webServer, localActor, followRequest, id = null) { - id = id || webServer.buildUrl(`/${UUIDv4()}`); + id = id || Activity._makeId(webServer, '/accept'); return new Activity({ type: 'Accept', @@ -56,7 +70,131 @@ module.exports = class Activity { }); } - sendTo(actorUrl, cb) { - // :TODO: https send |this| to actorUrl + static noteFromLocalMessage(webServer, message, cb) { + const localUserId = message.getLocalFromUserId(); + if (!localUserId) { + return cb(Errors.UnexpectedState('Invalid user ID for local user!')); + } + + async.waterfall( + [ + callback => { + return User.getUser(localUserId, callback); + }, + (localUser, callback) => { + const remoteActorAccount = message.getRemoteToUser(); + if (!remoteActorAccount) { + return callback( + Errors.UnexpectedState( + 'Message does not contain a remote address' + ) + ); + } + + const opts = {}; + Actor.fromAccountName( + remoteActorAccount, + opts, + (err, remoteActor) => { + return callback(err, localUser, remoteActor); + } + ); + }, + (localUser, remoteActor, callback) => { + Actor.fromLocalUser(localUser, webServer, (err, localActor) => { + return callback(err, localUser, localActor, remoteActor); + }); + }, + (localUser, localActor, remoteActor, callback) => { + // we'll need the entire |activityId| as a linked reference later + const activityId = Activity._makeId(webServer, '/create'); + + // |remoteActor| is non-null if we fetchd it + //const to = message.isPrivate() ? remoteActor ? remoteActor.id : `${ActivityStreamsContext}#Public`; + + // const obj = { + // '@context': ActivityStreamsContext, + // id: activityId, + // type: 'Create', + // to: [remoteActor.id], + // audience: ['as:Public'], + // actor: localActor.id, + // object: { + // id: Activity._makeId(webServer, '/note'), + // type: 'Note', + // attributedTo: localActor.id, + // to: [remoteActor.id], + // audience: ['as:Public'], + // content: messageBodyToHtml(message.message.trim()), + // }, + // }; + + const obj = { + '@context': ActivityStreamsContext, + id: activityId, + type: 'Create', + actor: localActor.id, + object: { + id: Activity._makeId(webServer, '/note'), + type: 'Note', + published: getISOTimestampString(message.modTimestamp), + attributedTo: localActor.id, + // :TODO: inReplyto if this is a reply; we need this store in message meta. + + // :TODO: we may want to turn this to a HTML fragment? + content: messageBodyToHtml(message.message.trim()), + }, + }; + + // :TODO: this probably needs to change quite a bit based on "groups" + // :TODO: verify we need both 'to' fields: https://socialhub.activitypub.rocks/t/problems-posting-to-mastodon-inbox/801/4 + if (message.isPrivate()) { + obj.to = remoteActor.id; + obj.object.to = remoteActor.id; + } else { + const publicInbox = `${ActivityStreamsContext}#Public`; + obj.to = publicInbox; + obj.object.to = publicInbox; + } + + const activity = new Activity(obj); + return callback(null, activity, localUser, remoteActor); + }, + ], + (err, activity, fromUser, remoteActor) => { + return cb(err, { activity, fromUser, remoteActor }); + } + ); + } + + sendTo(actorUrl, fromUser, webServer, cb) { + const privateKey = fromUser.getProperty(UserProps.PrivateKeyMain); + if (_.isEmpty(privateKey)) { + return cb( + Errors.MissingProperty( + `User "${fromUser.username}" is missing the '${UserProps.PrivateKeyMain}' property` + ) + ); + } + + const reqOpts = { + headers: { + 'Content-Type': 'application/activity+json', + }, + sign: { + // :TODO: Make a helper for this + key: privateKey, + keyId: selfUrl(webServer, fromUser) + '#main-key', + authorizationHeaderName: 'Signature', + headers: ['(request-target)', 'host', 'date', 'digest', 'content-type'], + }, + }; + + const activityJson = JSON.stringify(this); + return postJson(actorUrl, activityJson, reqOpts, cb); + } + + static _makeId(webServer, prefix = '') { + return webServer.buildUrl(`${prefix}/${UUIDv4()}`); } }; diff --git a/core/activitypub_actor.js b/core/activitypub_actor.js index c9dacf853..140268cfa 100644 --- a/core/activitypub_actor.js +++ b/core/activitypub_actor.js @@ -4,7 +4,6 @@ // ENiGMA½ const actorDb = require('./database.js').dbs.actor; const { Errors } = require('./enig_error.js'); -const { ActorProps } = require('./activitypub_actor_property'); const UserProps = require('./user_property'); const { webFingerProfileUrl, @@ -14,9 +13,10 @@ const { ActivityStreamsContext, } = require('./activitypub_util'); const Log = require('./logger').log; +const { queryWebFinger } = require('./webfinger'); +const EnigAssert = require('./enigma_assert'); // deps -const assert = require('assert'); const async = require('async'); const _ = require('lodash'); const https = require('https'); @@ -102,6 +102,11 @@ module.exports = class Actor { owner: userSelfUrl, publicKeyPem, }; + + EnigAssert( + !_.isEmpty(user.getProperty(UserProps.PrivateKeyMain)), + 'User has public key but no private key!' + ); } else { Log.warn( { username: user.username }, @@ -117,6 +122,8 @@ module.exports = class Actor { Accept: 'application/activity+json', }; + // :TODO: use getJson() + https.get(url, { headers }, res => { if (res.statusCode !== 200) { return cb(Errors.Invalid(`Bad HTTP status code: ${req.statusCode}`)); @@ -153,6 +160,35 @@ module.exports = class Actor { }); } + static fromAccountName(actorName, options, cb) { + // :TODO: cache first -- do we have an Actor for this account already with a OK TTL? + + queryWebFinger(actorName, (err, res) => { + if (err) { + return cb(err); + } + + // we need a link with 'application/activity+json' + const links = res.links; + if (!Array.isArray(links)) { + return cb(Errors.DoesNotExist('No "links" object in WebFinger response')); + } + + const activityLink = links.find(l => { + return l.type === 'application/activity+json' && l.href?.length > 0; + }); + + if (!activityLink) { + return cb( + Errors.DoesNotExist('No Activity link found in WebFinger response') + ); + } + + // we can now query the href value for an Actor + return Actor.fromRemoteUrl(activityLink.href, cb); + }); + } + static fromJson(json) { const parsed = JSON.parse(json); return new Actor(parsed); diff --git a/core/activitypub_util.js b/core/activitypub_util.js index 667390c4f..3c4632d48 100644 --- a/core/activitypub_util.js +++ b/core/activitypub_util.js @@ -20,6 +20,7 @@ exports.selfUrl = selfUrl; exports.userFromAccount = userFromAccount; exports.accountFromSelfUrl = accountFromSelfUrl; exports.getUserProfileTemplatedBody = getUserProfileTemplatedBody; +exports.messageBodyToHtml = messageBodyToHtml; // :TODO: more info in default // this profile template is the *default* for both WebFinger @@ -160,3 +161,12 @@ function getUserProfileTemplatedBody( } ); } + +// +// Apply very basic HTML to a message following +// Mastodon's supported tags of 'p', 'br', 'a', and 'span': +// https://blog.joinmastodon.org/2018/06/how-to-implement-a-basic-activitypub-server/ +// +function messageBodyToHtml(body) { + return `

${body.replace(/\r?\n/g, '
')}

`; +} diff --git a/core/enig_error.js b/core/enig_error.js index c9d16a541..40422a943 100644 --- a/core/enig_error.js +++ b/core/enig_error.js @@ -54,6 +54,8 @@ exports.Errors = { HttpError: (reason, reasonCode) => new EnigError('HTTP error', -32013, reason, reasonCode), Timeout: (reason, reasonCode) => new EnigError('Timeout', -32014, reason, reasonCode), + MissingProperty: (reason, reasonCode) => + new EnigError('Missing property', -32014, reason, reasonCode), }; exports.ErrorReasons = { diff --git a/core/fse.js b/core/fse.js index c54139899..fd0f6aac4 100644 --- a/core/fse.js +++ b/core/fse.js @@ -16,7 +16,11 @@ const { MessageAreaConfTempSwitcher } = require('./mod_mixins.js'); const { isAnsi, stripAnsiControlCodes, insert } = require('./string_util.js'); const { stripMciColorCodes, controlCodesToAnsi } = require('./color_codes.js'); const Config = require('./config.js').get; -const { getAddressedToInfo } = require('./mail_util.js'); +const { + getAddressedToInfo, + setExternalAddressedToInfo, + copyExternalAddressedToInfo, +} = require('./mail_util.js'); const Events = require('./events.js'); const UserProps = require('./user_property.js'); const SysProps = require('./system_property.js'); @@ -589,15 +593,9 @@ exports.FullScreenEditorModule = self.replyToMessage && self.replyToMessage.isFromRemoteUser() ) { - self.message.setRemoteToUser( - self.replyToMessage.meta.System[ - Message.SystemMetaNames.RemoteFromUser - ] - ); - self.message.setExternalFlavor( - self.replyToMessage.meta.System[ - Message.SystemMetaNames.ExternalFlavor - ] + copyExternalAddressedToInfo( + self.replyToMessage, + self.message ); return callback(null); } @@ -605,21 +603,16 @@ exports.FullScreenEditorModule = // // Detect if the user is attempting to send to a remote mail type that we support // - // :TODO: how to plug in support without tying to various types here? isSupportedExteranlType() or such const addressedToInfo = getAddressedToInfo( self.message.toUserName ); - if ( - addressedToInfo.name && - Message.AddressFlavor.FTN === addressedToInfo.flavor - ) { - self.message.setRemoteToUser(addressedToInfo.remote); - self.message.setExternalFlavor(addressedToInfo.flavor); - self.message.toUserName = addressedToInfo.name; + + if (setExternalAddressedToInfo(addressedToInfo, self.message)) { + // setExternalAddressedToInfo() did what we need return callback(null); } - // we need to look it up + // Local user -- we need to look it up User.getUserIdAndNameByLookup( self.message.toUserName, (err, toUserId) => { diff --git a/core/http_util.js b/core/http_util.js index 7fd8cf71c..e1d0733bd 100644 --- a/core/http_util.js +++ b/core/http_util.js @@ -1,18 +1,46 @@ const { Errors } = require('./enig_error.js'); // deps -const { isString, isObject } = require('lodash'); +const { isString, isObject, truncate } = require('lodash'); const https = require('https'); const httpSignature = require('http-signature'); const crypto = require('crypto'); +exports.getJson = getJson; exports.postJson = postJson; +function getJson(url, options, cb) { + const defaultOptions = { + method: 'GET', + }; + + options = Object.assign({}, defaultOptions, options); + + // :TODO: signing -- DRY this. + + _makeRequest(url, options, (err, body, res) => { + if (err) { + return cb(err); + } + + let parsed; + try { + parsed = JSON.parse(body); + } catch (e) { + return cb(e); + } + + return cb(null, parsed, res); + }); +} + function postJson(url, json, options, cb) { if (!isString(json)) { json = JSON.stringify(json); } + // :TODO: DRY this method with _makeRequest() + const defaultOptions = { method: 'POST', body: json, @@ -42,7 +70,13 @@ function postJson(url, json, options, cb) { body = Buffer.concat(body).toString(); if (res.statusCode < 200 || res.statusCode > 299) { - return cb(Errors.HttpError(`HTTP error ${res.statusCode}: ${body}`)); + return cb( + Errors.HttpError( + `HTTP error ${res.statusCode}: ${truncate(body, { length: 128 })}` + ), + body, + res + ); } return cb(null, body, res); @@ -70,3 +104,49 @@ function postJson(url, json, options, cb) { req.write(json); req.end(); } + +function _makeRequest(url, options, cb) { + if (options.body && options?.sign?.headers?.includes('digest')) { + options.headers['Digest'] = `SHA-256=${crypto + .createHash('sha256') + .update(options.body) + .digest('base64')}`; + } + + const req = https.request(url, options, res => { + let body = []; + res.on('data', d => { + body.push(d); + }); + + res.on('end', () => { + body = Buffer.concat(body).toString(); + + if (res.statusCode < 200 || res.statusCode > 299) { + return cb(Errors.HttpError(`HTTP error ${res.statusCode}: ${body}`)); + } + + return cb(null, body, res); + }); + }); + + if (isObject(options.sign)) { + try { + httpSignature.sign(req, options.sign); + } catch (e) { + req.destroy(); + return cb(Errors.Invalid(`Invalid signing material: ${e}`)); + } + } + + req.on('error', err => { + return cb(err); + }); + + req.on('timeout', () => { + req.destroy(); + return cb(Errors.Timeout('Timeout making HTTP request')); + }); + + req.end(); +} diff --git a/core/mail_util.js b/core/mail_util.js index 15a467ff1..eac3d66de 100644 --- a/core/mail_util.js +++ b/core/mail_util.js @@ -1,10 +1,14 @@ /* jslint node: true */ 'use strict'; +const EnigmaAssert = require('./enigma_assert.js'); const Address = require('./ftn_address.js'); +const { AddressFlavor } = require('./message.js'); const Message = require('./message.js'); exports.getAddressedToInfo = getAddressedToInfo; +exports.setExternalAddressedToInfo = setExternalAddressedToInfo; +exports.copyExternalAddressedToInfo = copyExternalAddressedToInfo; const EMAIL_REGEX = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; @@ -31,29 +35,29 @@ function getAddressedToInfo(input) { if (firstAtPos < 0) { let addr = Address.fromString(input); if (Address.isValidAddress(addr)) { - return { flavor: Message.AddressFlavor.FTN, remote: input }; + return { flavor: AddressFlavor.FTN, remote: input }; } const lessThanPos = input.indexOf('<'); if (lessThanPos < 0) { - return { name: input, flavor: Message.AddressFlavor.Local }; + return { name: input, flavor: AddressFlavor.Local }; } const greaterThanPos = input.indexOf('>'); if (greaterThanPos < lessThanPos) { - return { name: input, flavor: Message.AddressFlavor.Local }; + return { name: input, flavor: AddressFlavor.Local }; } addr = Address.fromString(input.slice(lessThanPos + 1, greaterThanPos)); if (Address.isValidAddress(addr)) { return { name: input.slice(0, lessThanPos).trim(), - flavor: Message.AddressFlavor.FTN, + flavor: AddressFlavor.FTN, remote: addr.toString(), }; } - return { name: input, flavor: Message.AddressFlavor.Local }; + return { name: input, flavor: AddressFlavor.Local }; } if (firstAtPos === 0) { @@ -63,7 +67,7 @@ function getAddressedToInfo(input) { if (m) { return { name: input.slice(1, secondAtPos), - flavor: Message.AddressFlavor.ActivityPub, + flavor: AddressFlavor.ActivityPub, remote: input.slice(firstAtPos), }; } @@ -78,36 +82,67 @@ function getAddressedToInfo(input) { if (m) { return { name: input.slice(0, lessThanPos).trim(), - flavor: Message.AddressFlavor.Email, + flavor: AddressFlavor.Email, remote: addr, }; } - return { name: input, flavor: Message.AddressFlavor.Local }; + return { name: input, flavor: AddressFlavor.Local }; } let m = input.match(EMAIL_REGEX); if (m) { return { name: input.slice(0, firstAtPos), - flavor: Message.AddressFlavor.Email, + flavor: AddressFlavor.Email, remote: input, }; } let addr = Address.fromString(input); // 5D? if (Address.isValidAddress(addr)) { - return { flavor: Message.AddressFlavor.FTN, remote: addr.toString() }; + return { flavor: AddressFlavor.FTN, remote: addr.toString() }; } addr = Address.fromString(input.slice(firstAtPos + 1).trim()); if (Address.isValidAddress(addr)) { return { name: input.slice(0, firstAtPos).trim(), - flavor: Message.AddressFlavor.FTN, + flavor: AddressFlavor.FTN, remote: addr.toString(), }; } - return { name: input, flavor: Message.AddressFlavor.Local }; + return { name: input, flavor: AddressFlavor.Local }; +} + +/// returns true if it's an external address +function setExternalAddressedToInfo(addressInfo, message) { + const isValidAddressInfo = () => { + return addressInfo.name.length > 1 && addressInfo.remote.length > 1; + }; + + switch (addressInfo.flavor) { + case AddressFlavor.FTN: + case AddressFlavor.Email: + case AddressFlavor.QWK: + case AddressFlavor.NNTP: + case AddressFlavor.ActivityPub: + EnigmaAssert(isValidAddressInfo()); + + message.setRemoteToUser(addressInfo.remote); + message.setExternalFlavor(addressInfo.flavor); + message.toUserName = addressInfo.name; + return true; + + default: + case AddressFlavor.Local: + return false; + } +} + +function copyExternalAddressedToInfo(fromMessage, toMessage) { + const sm = Message.SystemMetaNames; + toMessage.setRemoteToUser(fromMessage.meta.System[sm.RemoteFromUser]); + toMessage.setExternalFlavor(fromMessage.meta.System[sm.ExternalFlavor]); } diff --git a/core/message.js b/core/message.js index 47c168215..9b300ffe0 100644 --- a/core/message.js +++ b/core/message.js @@ -101,6 +101,10 @@ const QWKPropertyNames = { InReplyToNum: 'qwk_in_reply_to_num', // note that we prefer the 'InReplyToMsgId' kludge if available }; +const ActivityPubPropertyNames = { + ActivityId: 'activitypub_activity_id', // Activity ID; FK to AP table entries +}; + // :TODO: this is a ugly hack due to bad variable names - clean it up & just _.camelCase(k)! const MESSAGE_ROW_MAP = { reply_to_message_id: 'replyToMsgId', @@ -243,16 +247,29 @@ module.exports = class Message { this.meta.System[Message.SystemMetaNames.LocalFromUserID] = userId; } + getLocalFromUserId() { + let id = _.get(this, 'meta.System.local_from_user_id', 0); + return parseInt(id); + } + setRemoteToUser(remoteTo) { this.meta.System = this.meta.System || {}; this.meta.System[Message.SystemMetaNames.RemoteToUser] = remoteTo; } + getRemoteToUser() { + return _.get(this, 'meta.System.remote_to_user'); + } + setExternalFlavor(flavor) { this.meta.System = this.meta.System || {}; this.meta.System[Message.SystemMetaNames.ExternalFlavor] = flavor; } + getAddressFlavor() { + return _.get(this, 'meta.System.external_flavor', Message.AddressFlavor.Local); + } + static createMessageUUID(areaTag, modTimestamp, subject, body) { assert(_.isString(areaTag)); assert(_.isDate(modTimestamp) || moment.isMoment(modTimestamp)); diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js new file mode 100644 index 000000000..1ebaa452b --- /dev/null +++ b/core/scanner_tossers/activitypub.js @@ -0,0 +1,87 @@ +const Activity = require('../activitypub_activity'); +const Message = require('../message'); +const { MessageScanTossModule } = require('../msg_scan_toss_module'); +const { getServer } = require('../listening_server'); + +exports.moduleInfo = { + name: 'ActivityPub', + desc: 'Provides ActivityPub scanner/tosser integration', + author: 'NuSkooler', +}; + +exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule { + constructor() { + super(); + } + + startup(cb) { + return cb(null); + } + + shutdown(cb) { + return cb(null); + } + + record(message) { + if (!this._isEnabled()) { + return; + } + + Activity.noteFromLocalMessage(this._webServer(), message, (err, noteData) => { + if (err) { + // :TODO: Log me + } + + const { activity, fromUser, remoteActor } = noteData; + + // - persist Activity + // - sendTo + // - update message properties: + // * exported + // * ActivityPub ID -> activity table + activity.sendTo( + remoteActor.inbox, + fromUser, + this._webServer(), + (err, respBody, res) => { + if (err) { + } + } + ); + }); + } + + _isEnabled() { + // :TODO: check config to see if AP integration is enabled/etc. + return this._webServer(); + } + + _shouldExportMessage(message) { + // + // - Private messages: Must be ActivityPub flavor + // - Public messages: Must be in area mapped for ActivityPub import/export + // + // :TODO: Implement the mapping + if ( + Message.AddressFlavor.ActivityPub === message.getAddressFlavor() && + Message.isPrivateAreaTag() + ) { + return true; + } + + return false; + } + + _exportToActivityPub(message, cb) { + return cb(null); + } + + _webServer() { + // we have to lazy init + if (undefined === this.webServer) { + this.webServer = getServer('codes.l33t.enigma.web.server') || null; + } + + return this.webServer ? this.webServer.instance : null; + } +}; diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 45a57b073..6d4d60f11 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -212,55 +212,27 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { // request for the user to review and decide what to do with // at a later time. // + // :TODO: Implement the queue const activityPubSettings = ActivityPubSettings.fromUser(user); if (!activityPubSettings.manuallyApproveFollowers) { - // - // :TODO: Implement the queue Actor.fromLocalUser(user, this.webServer, (err, localActor) => { if (err) { - // :TODO: - return; + return this.log.warn( + { inbox: actor.inbox, error: err.message }, + 'Failed to load local Actor for "Accept"' + ); } - // user must have a Private Key - const privateKey = user.getProperty(UserProps.PrivateKeyMain); - if (_.isEmpty(privateKey)) { - // :TODO: Log me - return; - } - - // :TODO: This stuff should probably be lifted out so it can be called ad-hoc from the queue const accept = Activity.makeAccept( this.webServer, localActor, activity ); - const keyId = selfUrl(this.webServer, user) + '#main-key'; - - const reqOpts = { - headers: { - 'Content-Type': 'application/activity+json', - }, - sign: { - // :TODO: Make a helper for this - key: privateKey, - keyId, - authorizationHeaderName: 'Signature', - headers: [ - '(request-target)', - 'host', - 'date', - 'digest', - 'content-type', - ], - }, - }; - - postJson( + accept.sendTo( actor.inbox, - JSON.stringify(accept), - reqOpts, + user, + this.webServer, (err, respBody, res) => { if (err) { return this.log.warn( diff --git a/core/system_view_validate.js b/core/system_view_validate.js index 61c52a521..763e0c475 100644 --- a/core/system_view_validate.js +++ b/core/system_view_validate.js @@ -88,10 +88,8 @@ function validateGeneralMailAddressedTo(data, cb) { // - Local username or real name // - Supported remote flavors such as FTN, email, ... // - // :TODO: remove hard-coded FTN check here. We need a decent way to register global supported flavors with modules. const addressedToInfo = getAddressedToInfo(data); - - if (Message.AddressFlavor.FTN === addressedToInfo.flavor) { + if (Message.AddressFlavor.Local !== addressedToInfo.flavor) { return cb(null); } diff --git a/core/webfinger.js b/core/webfinger.js new file mode 100644 index 000000000..299035a31 --- /dev/null +++ b/core/webfinger.js @@ -0,0 +1,49 @@ +const { Errors } = require('./enig_error'); +const { getAddressedToInfo } = require('./mail_util'); +const Message = require('./message'); +const { getJson } = require('./http_util'); + +// deps +const https = require('https'); + +exports.queryWebFinger = queryWebFinger; + +function queryWebFinger(account, cb) { + // ex: @NuSkooler@toot.community -> https://toot.community/.well-known/webfinger with acct:NuSkooler resource + const addrInfo = getAddressedToInfo(account); + if ( + addrInfo.flavor !== Message.AddressFlavor.ActivityPub && + addrInfo.flavor !== Message.AddressFlavor.Email + ) { + return cb(Errors.Invalid(`Cannot WebFinger "${accountName}"; Missing domain`)); + } + + const domain = addrInfo.remote.slice(addrInfo.remote.lastIndexOf('@') + 1); + if (!domain) { + return cb(Errors.Invalid(`Cannot WebFinger "${accountName}"; Missing domain`)); + } + + const resource = encodeURIComponent(`acct:${account.slice(1)}`); // we need drop the initial '@' prefix + const webFingerUrl = `https://${domain}/.well-known/webfinger?resource=${resource}`; + getJson(webFingerUrl, {}, (err, json, res) => { + if (err) { + return cb(err); + } + + if (res.statusCode !== 200) { + // only accept 200 + return cb(Errors.DoesNotExist(`Failed to WebFinger URL ${webFingerUrl}`)); + } + + const contentType = res.headers['content-type'] || ''; + if (!contentType.startsWith('application/jrd+json')) { + return cb( + Errors.Invalid( + `Invalid Content-Type for WebFinger URL ${webFingerUrl}: ${contentType}` + ) + ); + } + + return cb(null, json); + }); +} From eaadd0a8307cef33ea43adc3162219233701c68d Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 12 Jan 2023 18:26:44 -0700 Subject: [PATCH 051/233] Persist exported/published messages to ActivityPub --- core/activitypub_activity.js | 37 ++---- core/activitypub_db.js | 17 +++ core/database.js | 87 ++++++++----- core/message.js | 22 ++++ core/scanner_tossers/activitypub.js | 117 +++++++++++++++--- .../content/web_handlers/activitypub.js | 2 +- 6 files changed, 201 insertions(+), 81 deletions(-) create mode 100644 core/activitypub_db.js diff --git a/core/activitypub_activity.js b/core/activitypub_activity.js index 3eca0c581..7f6dc8c20 100644 --- a/core/activitypub_activity.js +++ b/core/activitypub_activity.js @@ -54,14 +54,14 @@ module.exports = class Activity { return false; } - // :TODO: we could validate the particular types + // :TODO: Additional validation return true; } // https://www.w3.org/TR/activitypub/#accept-activity-inbox static makeAccept(webServer, localActor, followRequest, id = null) { - id = id || Activity._makeId(webServer, '/accept'); + id = id || Activity._makeFullId(webServer, 'accept'); return new Activity({ type: 'Accept', @@ -107,27 +107,7 @@ module.exports = class Activity { }, (localUser, localActor, remoteActor, callback) => { // we'll need the entire |activityId| as a linked reference later - const activityId = Activity._makeId(webServer, '/create'); - - // |remoteActor| is non-null if we fetchd it - //const to = message.isPrivate() ? remoteActor ? remoteActor.id : `${ActivityStreamsContext}#Public`; - - // const obj = { - // '@context': ActivityStreamsContext, - // id: activityId, - // type: 'Create', - // to: [remoteActor.id], - // audience: ['as:Public'], - // actor: localActor.id, - // object: { - // id: Activity._makeId(webServer, '/note'), - // type: 'Note', - // attributedTo: localActor.id, - // to: [remoteActor.id], - // audience: ['as:Public'], - // content: messageBodyToHtml(message.message.trim()), - // }, - // }; + const activityId = Activity._makeFullId(webServer, 'create'); const obj = { '@context': ActivityStreamsContext, @@ -135,13 +115,12 @@ module.exports = class Activity { type: 'Create', actor: localActor.id, object: { - id: Activity._makeId(webServer, '/note'), + id: Activity._makeFullId(webServer, 'note'), type: 'Note', published: getISOTimestampString(message.modTimestamp), attributedTo: localActor.id, // :TODO: inReplyto if this is a reply; we need this store in message meta. - // :TODO: we may want to turn this to a HTML fragment? content: messageBodyToHtml(message.message.trim()), }, }; @@ -149,11 +128,11 @@ module.exports = class Activity { // :TODO: this probably needs to change quite a bit based on "groups" // :TODO: verify we need both 'to' fields: https://socialhub.activitypub.rocks/t/problems-posting-to-mastodon-inbox/801/4 if (message.isPrivate()) { - obj.to = remoteActor.id; + //obj.to = remoteActor.id; obj.object.to = remoteActor.id; } else { const publicInbox = `${ActivityStreamsContext}#Public`; - obj.to = publicInbox; + //obj.to = publicInbox; obj.object.to = publicInbox; } @@ -194,7 +173,7 @@ module.exports = class Activity { return postJson(actorUrl, activityJson, reqOpts, cb); } - static _makeId(webServer, prefix = '') { - return webServer.buildUrl(`${prefix}/${UUIDv4()}`); + static _makeFullId(webServer, prefix, uuid = '') { + return webServer.buildUrl(`/${prefix}/${uuid || UUIDv4()}`); } }; diff --git a/core/activitypub_db.js b/core/activitypub_db.js new file mode 100644 index 000000000..2ba5ef36f --- /dev/null +++ b/core/activitypub_db.js @@ -0,0 +1,17 @@ +const apDb = require('./database').dbs.activitypub; + +exports.persistToOutbox = persistToOutbox; + +function persistToOutbox(activity, userId, messageId, cb) { + const activityJson = JSON.stringify(activity); + + apDb.run( + `INSERT INTO activitypub_outbox (activity_id, user_id, message_id, activity_json) + VALUES (?, ?, ?, ?);`, + [activity.id, userId, messageId, activityJson], + function res(err) { + // non-arrow for 'this' scope + return cb(err, this.lastID); + } + ); +} diff --git a/core/database.js b/core/database.js index 4e8809354..4c24a4809 100644 --- a/core/database.js +++ b/core/database.js @@ -109,7 +109,7 @@ function sanitizeString(s) { function initializeDatabases(cb) { async.eachSeries( - ['system', 'user', 'actor', 'message', 'file'], + ['system', 'user', 'message', 'file', 'activitypub'], (dbName, next) => { dbs[dbName] = sqlite3Trans.wrap( new sqlite3.Database(getDatabasePath(dbName), err => { @@ -242,36 +242,36 @@ const DB_INIT_TABLE = { return cb(null); }, - actor: cb => { - enableForeignKeys(dbs.actor); - - dbs.actor.run( - `CREATE TABLE IF NOT EXISTS activitypub_actor ( - id INTEGER PRIMARY KEY, - actor_url VARCHAR NOT NULL, - UNIQUE(actor_url) - );` - ); - - // :TODO: create FK on delete/etc. - - dbs.actor.run( - `CREATE TABLE IF NOT EXISTS activitypub_actor_property ( - actor_id INTEGER NOT NULL, - prop_name VARCHAR NOT NULL, - prop_value VARCHAR, - UNIQUE(actor_id, prop_name), - FOREIGN KEY(actor_id) REFERENCES actor(id) ON DELETE CASCADE - );` - ); - - dbs.actor.run( - `CREATE INDEX IF NOT EXISTS activitypub_actor_property_id_and_name_index0 - ON activitypub_actor_property (actor_id, prop_name);` - ); - - return cb(null); - }, + // actor: cb => { + // enableForeignKeys(dbs.actor); + + // dbs.actor.run( + // `CREATE TABLE IF NOT EXISTS activitypub_actor ( + // id INTEGER PRIMARY KEY, + // actor_url VARCHAR NOT NULL, + // UNIQUE(actor_url) + // );` + // ); + + // // :TODO: create FK on delete/etc. + + // dbs.actor.run( + // `CREATE TABLE IF NOT EXISTS activitypub_actor_property ( + // actor_id INTEGER NOT NULL, + // prop_name VARCHAR NOT NULL, + // prop_value VARCHAR, + // UNIQUE(actor_id, prop_name), + // FOREIGN KEY(actor_id) REFERENCES actor(id) ON DELETE CASCADE + // );` + // ); + + // dbs.actor.run( + // `CREATE INDEX IF NOT EXISTS activitypub_actor_property_id_and_name_index0 + // ON activitypub_actor_property (actor_id, prop_name);` + // ); + + // return cb(null); + // }, message: cb => { enableForeignKeys(dbs.message); @@ -499,6 +499,31 @@ dbs.message.run( );` ); + return cb(null); + }, + activitypub: cb => { + dbs.activitypub.run( + `CREATE TABLE IF NOT EXISTS activitypub_outbox ( + id INTEGER PRIMARY KEY, -- Local ID + activity_id VARCHAR NOT NULL, -- Fully qualified Activity ID/URL + user_id INTEGER NOT NULL, -- Local user ID + message_id INTEGER NOT NULL, -- Local message ID + activity_json VARCHAR NOT NULL, -- Activity in JSON format + + UNIQUE(message_id, activity_id) + );` + ); + + dbs.activitypub.run( + `CREATE INDEX IF NOT EXISTS activitypub_outbox_user_id_index0 + ON activitypub_outbox (user_id);` + ); + + dbs.activitypub.run( + `CREATE INDEX IF NOT EXISTS activitypub_outbox_activity_id_index0 + ON activitypub_outbox (activity_id);` + ); + return cb(null); }, }; diff --git a/core/message.js b/core/message.js index 9b300ffe0..2e11e0f06 100644 --- a/core/message.js +++ b/core/message.js @@ -39,6 +39,16 @@ const WELL_KNOWN_AREA_TAGS = { Bulletin: 'local_bulletin', }; +const WellKnownMetaCategories = { + System: 'System', + FtnProperty: 'FtnProperty', + FtnKludge: 'FtnKludge', + QwkProperty: 'QwkProperty', + QwkKludge: 'QwkKludge', + ActivityPub: 'ActivityPub', +}; + +// Category: WellKnownMetaCategories.System ("System") const SYSTEM_META_NAMES = { LocalToUserID: 'local_to_user_id', LocalFromUserID: 'local_from_user_id', @@ -66,6 +76,7 @@ const STATE_FLAGS0 = { }; // :TODO: these should really live elsewhere... +// Category: WellKnownMetaCategories.FtnProperty ("FtnProperty") const FTN_PROPERTY_NAMES = { // packet header oriented FtnOrigNode: 'ftn_orig_node', @@ -94,6 +105,7 @@ const FTN_PROPERTY_NAMES = { FtnSeenBy: 'ftn_seen_by', // http://ftsc.org/docs/fts-0004.001 }; +// Category: WellKnownMetaCategories.QwkProperty const QWKPropertyNames = { MessageNumber: 'qwk_msg_num', MessageStatus: 'qwk_msg_status', // See http://wiki.synchro.net/ref:qwk for a decent list @@ -101,8 +113,10 @@ const QWKPropertyNames = { InReplyToNum: 'qwk_in_reply_to_num', // note that we prefer the 'InReplyToMsgId' kludge if available }; +// Category: WellKnownMetaCategories.ActivityPub const ActivityPubPropertyNames = { ActivityId: 'activitypub_activity_id', // Activity ID; FK to AP table entries + InReplyTo: 'activitypub_in_reply_to', // Activity ID from 'inReplyTo' field }; // :TODO: this is a ugly hack due to bad variable names - clean it up & just _.camelCase(k)! @@ -213,6 +227,10 @@ module.exports = class Message { return (this.isPrivate() && user.userId === messageLocalUserId) || user.isSysOp(); } + static get WellKnownMetaCategories() { + return WellKnownMetaCategories; + } + static get WellKnownAreaTags() { return WELL_KNOWN_AREA_TAGS; } @@ -237,6 +255,10 @@ module.exports = class Message { return QWKPropertyNames; } + static get ActivityPubPropertyNames() { + return ActivityPubPropertyNames; + } + setLocalToUserId(userId) { this.meta.System = this.meta.System || {}; this.meta.System[Message.SystemMetaNames.LocalToUserID] = userId; diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index 1ebaa452b..3b20f173f 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -2,6 +2,12 @@ const Activity = require('../activitypub_activity'); const Message = require('../message'); const { MessageScanTossModule } = require('../msg_scan_toss_module'); const { getServer } = require('../listening_server'); +const Log = require('../logger').log; +const { persistToOutbox } = require('../activitypub_db'); + +// deps +const async = require('async'); +const _ = require('lodash'); exports.moduleInfo = { name: 'ActivityPub', @@ -12,6 +18,8 @@ exports.moduleInfo = { exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule { constructor() { super(); + + this.log = Log.child({ module: 'ActivityPubScannerTosser' }); } startup(cb) { @@ -27,28 +35,97 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule return; } - Activity.noteFromLocalMessage(this._webServer(), message, (err, noteData) => { - if (err) { - // :TODO: Log me - } + async.waterfall( + [ + callback => { + return Activity.noteFromLocalMessage( + this._webServer(), + message, + callback + ); + }, + (noteInfo, callback) => { + const { activity, fromUser, remoteActor } = noteInfo; - const { activity, fromUser, remoteActor } = noteData; - - // - persist Activity - // - sendTo - // - update message properties: - // * exported - // * ActivityPub ID -> activity table - activity.sendTo( - remoteActor.inbox, - fromUser, - this._webServer(), - (err, respBody, res) => { - if (err) { - } + persistToOutbox( + activity, + fromUser.userId, + message.messageId, + (err, localId) => { + if (!err) { + this.log.debug( + { localId, activityId: activity.id }, + 'Note Activity persisted to database' + ); + } + return callback(err, activity, fromUser, remoteActor); + } + ); + }, + (activity, fromUser, remoteActor, callback) => { + activity.sendTo( + remoteActor.inbox, + fromUser, + this._webServer(), + (err, respBody, res) => { + if (err) { + return callback(err); + } + + if (res.statusCode !== 202 && res.statusCode !== 200) { + this.log.warn( + { + inbox: remoteActor.inbox, + statusCode: res.statusCode, + body: _.truncate(respBody, 128), + }, + 'Unexpected status code' + ); + } + + // + // We sent successfully; update some properties + // in the original message to indicate export + // and updated mapping of message -> Activity record + // + return callback(null, activity); + } + ); + }, + (activity, callback) => { + // mark exported + return message.persistMetaValue( + Message.WellKnownMetaCategories.System, + Message.SystemMetaNames.StateFlags0, + Message.StateFlags0.Exported.toString(), + err => { + return callback(err, activity); + } + ); + }, + (activity, callback) => { + // message -> Activity ID relation + return message.persistMetaValue( + Message.WellKnownMetaCategories.ActivityPub, + Message.ActivityPubPropertyNames.ActivityId, + activity.id, + err => { + return callback(err, activity); + } + ); + }, + ], + (err, activity) => { + if (err) { + this.log.error( + { error: err.message, messageId: message.messageId }, + 'Failed to export message to ActivityPub' + ); + } else { + this.log.info({id: activity.id}, 'Note Activity exported (published) successfully'); } - ); - }); + } + ); } _isEnabled() { diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 6d4d60f11..ef36a6923 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -245,7 +245,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { ); } - if (res.statusCode != 202) { + if (res.statusCode !== 202 && res.statusCode !== 200) { return this.log.warn( { inbox: actor.inbox, From fc14b5d299f7ad3b8a524c10b240b3678f9c4158 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 12 Jan 2023 18:38:42 -0700 Subject: [PATCH 052/233] Persist exported/published messages to ActivityPub --- core/scanner_tossers/activitypub.js | 44 ++++++++++++++++------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index 3b20f173f..9a6e28bbf 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -31,6 +31,10 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule } record(message) { + if (!this._shouldExportMessage(message)) { + return; + } + if (!this._isEnabled()) { return; } @@ -47,22 +51,7 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule (noteInfo, callback) => { const { activity, fromUser, remoteActor } = noteInfo; - persistToOutbox( - activity, - fromUser.userId, - message.messageId, - (err, localId) => { - if (!err) { - this.log.debug( - { localId, activityId: activity.id }, - 'Note Activity persisted to database' - ); - } - return callback(err, activity, fromUser, remoteActor); - } - ); - }, - (activity, fromUser, remoteActor, callback) => { + // :TODO: Implement retry logic (connection issues, retryable HTTP status) activity.sendTo( remoteActor.inbox, fromUser, @@ -88,7 +77,24 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule // in the original message to indicate export // and updated mapping of message -> Activity record // - return callback(null, activity); + return callback(null, activity, fromUser); + } + ); + }, + (activity, fromUser, callback) => { + + persistToOutbox( + activity, + fromUser.userId, + message.messageId, + (err, localId) => { + if (!err) { + this.log.debug( + { localId, activityId: activity.id }, + 'Note Activity persisted to database' + ); + } + return callback(err, activity); } ); }, @@ -138,14 +144,14 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule // - Private messages: Must be ActivityPub flavor // - Public messages: Must be in area mapped for ActivityPub import/export // - // :TODO: Implement the mapping if ( Message.AddressFlavor.ActivityPub === message.getAddressFlavor() && - Message.isPrivateAreaTag() + message.isPrivate() ) { return true; } + // :TODO: Implement the area mapping check for public return false; } From 67652b18f2a64d7d4fa82fc756a6430dcada6335 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 12 Jan 2023 18:40:43 -0700 Subject: [PATCH 053/233] Prettier --- core/scanner_tossers/activitypub.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index 9a6e28bbf..e1e761149 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -82,7 +82,6 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule ); }, (activity, fromUser, callback) => { - persistToOutbox( activity, fromUser.userId, @@ -128,7 +127,10 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule 'Failed to export message to ActivityPub' ); } else { - this.log.info({id: activity.id}, 'Note Activity exported (published) successfully'); + this.log.info( + { id: activity.id }, + 'Note Activity exported (published) successfully' + ); } } ); From 157b90687cdcb2cb1d31d5893b321488f055ad9d Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 12 Jan 2023 18:49:13 -0700 Subject: [PATCH 054/233] Move ActivityPub stuff under activitypub/ --- .../activity.js} | 14 +++++++------- .../{activitypub_actor.js => activitypub/actor.js} | 14 ++++++-------- core/{activitypub_db.js => activitypub/db.js} | 2 +- .../settings.js} | 0 core/{activitypub_util.js => activitypub/util.js} | 2 +- core/scanner_tossers/activitypub.js | 4 ++-- core/servers/content/web_handlers/activitypub.js | 12 ++++-------- core/servers/content/web_handlers/webfinger.js | 2 +- core/user_property.js | 2 +- 9 files changed, 23 insertions(+), 29 deletions(-) rename core/{activitypub_activity.js => activitypub/activity.js} (95%) rename core/{activitypub_actor.js => activitypub/actor.js} (97%) rename core/{activitypub_db.js => activitypub/db.js} (90%) rename core/{activitypub_settings.js => activitypub/settings.js} (100%) rename core/{activitypub_util.js => activitypub/util.js} (98%) diff --git a/core/activitypub_activity.js b/core/activitypub/activity.js similarity index 95% rename from core/activitypub_activity.js rename to core/activitypub/activity.js index 7f6dc8c20..c00fc4c51 100644 --- a/core/activitypub_activity.js +++ b/core/activitypub/activity.js @@ -4,13 +4,13 @@ const { ActivityStreamsContext, messageBodyToHtml, selfUrl, -} = require('./activitypub_util'); -const { Errors } = require('./enig_error'); -const User = require('./user'); -const Actor = require('./activitypub_actor'); -const { getISOTimestampString } = require('./database'); -const UserProps = require('./user_property'); -const { postJson } = require('./http_util'); +} = require('../activitypub/util'); +const { Errors } = require('../enig_error'); +const User = require('../user'); +const Actor = require('../activitypub/actor'); +const { getISOTimestampString } = require('../database'); +const UserProps = require('../user_property'); +const { postJson } = require('../http_util'); // deps const async = require('async'); diff --git a/core/activitypub_actor.js b/core/activitypub/actor.js similarity index 97% rename from core/activitypub_actor.js rename to core/activitypub/actor.js index 140268cfa..f04ebb897 100644 --- a/core/activitypub_actor.js +++ b/core/activitypub/actor.js @@ -2,22 +2,20 @@ 'use strict'; // ENiGMA½ -const actorDb = require('./database.js').dbs.actor; -const { Errors } = require('./enig_error.js'); -const UserProps = require('./user_property'); +const { Errors } = require('../enig_error.js'); +const UserProps = require('../user_property'); const { webFingerProfileUrl, makeUserUrl, selfUrl, isValidLink, ActivityStreamsContext, -} = require('./activitypub_util'); -const Log = require('./logger').log; -const { queryWebFinger } = require('./webfinger'); -const EnigAssert = require('./enigma_assert'); +} = require('../activitypub/util'); +const Log = require('../logger').log; +const { queryWebFinger } = require('../webfinger'); +const EnigAssert = require('../enigma_assert'); // deps -const async = require('async'); const _ = require('lodash'); const https = require('https'); diff --git a/core/activitypub_db.js b/core/activitypub/db.js similarity index 90% rename from core/activitypub_db.js rename to core/activitypub/db.js index 2ba5ef36f..5a6a6dbe7 100644 --- a/core/activitypub_db.js +++ b/core/activitypub/db.js @@ -1,4 +1,4 @@ -const apDb = require('./database').dbs.activitypub; +const apDb = require('../database').dbs.activitypub; exports.persistToOutbox = persistToOutbox; diff --git a/core/activitypub_settings.js b/core/activitypub/settings.js similarity index 100% rename from core/activitypub_settings.js rename to core/activitypub/settings.js diff --git a/core/activitypub_util.js b/core/activitypub/util.js similarity index 98% rename from core/activitypub_util.js rename to core/activitypub/util.js index 3c4632d48..30b36b213 100644 --- a/core/activitypub_util.js +++ b/core/activitypub/util.js @@ -2,7 +2,7 @@ const { WellKnownLocations } = require('./servers/content/web'); const User = require('./user'); const { Errors, ErrorReasons } = require('./enig_error'); const UserProps = require('./user_property'); -const ActivityPubSettings = require('./activitypub_settings'); +const ActivityPubSettings = require('./activitypub/settings'); // deps const _ = require('lodash'); diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index e1e761149..54319a252 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -1,9 +1,9 @@ -const Activity = require('../activitypub_activity'); +const Activity = require('../activitypub/activity'); const Message = require('../message'); const { MessageScanTossModule } = require('../msg_scan_toss_module'); const { getServer } = require('../listening_server'); const Log = require('../logger').log; -const { persistToOutbox } = require('../activitypub_db'); +const { persistToOutbox } = require('../activitypub/db'); // deps const async = require('async'); diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index ef36a6923..4ee299a47 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -4,20 +4,16 @@ const { getUserProfileTemplatedBody, DefaultProfileTemplate, accountFromSelfUrl, - selfUrl, -} = require('../../../activitypub_util'); +} = require('../../../activitypub/util'); const Config = require('../../../config').get; -const Activity = require('../../../activitypub_activity'); -const ActivityPubSettings = require('../../../activitypub_settings'); -const Actor = require('../../../activitypub_actor'); -const { postJson } = require('../../../http_util'); -const UserProps = require('../../../user_property'); +const Activity = require('../../../activitypub/activity'); +const ActivityPubSettings = require('../../../activitypub/settings'); +const Actor = require('../../../activitypub/actor'); // deps const _ = require('lodash'); const enigma_assert = require('../../../enigma_assert'); const httpSignature = require('http-signature'); -const https = require('https'); exports.moduleInfo = { name: 'ActivityPub', diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index ff345226e..32d1af88d 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -8,7 +8,7 @@ const { userFromAccount, getUserProfileTemplatedBody, DefaultProfileTemplate, -} = require('../../../activitypub_util'); +} = require('../../../activitypub/util'); const _ = require('lodash'); const enigma_assert = require('../../../enigma_assert'); diff --git a/core/user_property.js b/core/user_property.js index f52c8b7be..82fa6b3bc 100644 --- a/core/user_property.js +++ b/core/user_property.js @@ -70,5 +70,5 @@ module.exports = { PublicKeyMain: 'public_key_main_rsa_pem', // RSA public key for user PrivateKeyMain: 'private_key_main_rsa_pem', // RSA private key (corresponding to PublicKeyMain) - ActivityPubSettings: 'activity_pub_settings', // JSON object (above); see ActivityPubSettings in activitypub_settings.js + ActivityPubSettings: 'activity_pub_settings', // JSON object (above); see ActivityPubSettings in activitypub/settings.js }; From 5e5c9236ec94cac15257c81eda3284ba7e29e532 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 12 Jan 2023 23:19:52 -0700 Subject: [PATCH 055/233] Return a outbox WIP --- core/activitypub/activity.js | 52 ++++++- core/activitypub/db.js | 48 +++++- core/activitypub/settings.js | 2 +- core/activitypub/util.js | 10 +- core/database.js | 27 ++-- core/scanner_tossers/activitypub.js | 21 +-- core/servers/content/web.js | 3 - .../content/web_handlers/activitypub.js | 139 ++++++++++++++---- 8 files changed, 233 insertions(+), 69 deletions(-) diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index c00fc4c51..a7a383f08 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -1,18 +1,21 @@ -const { isString, isObject } = require('lodash'); -const { v4: UUIDv4 } = require('uuid'); const { ActivityStreamsContext, messageBodyToHtml, selfUrl, -} = require('../activitypub/util'); -const { Errors } = require('../enig_error'); + makeUserUrl, +} = require('./util'); const User = require('../user'); -const Actor = require('../activitypub/actor'); +const Actor = require('./actor'); +const { Errors } = require('../enig_error'); const { getISOTimestampString } = require('../database'); const UserProps = require('../user_property'); const { postJson } = require('../http_util'); +const { getOutboxEntries } = require('./db'); +const { WellKnownLocations } = require('../servers/content/web'); // deps +const { isString, isObject } = require('lodash'); +const { v4: UUIDv4 } = require('uuid'); const async = require('async'); const _ = require('lodash'); @@ -119,6 +122,7 @@ module.exports = class Activity { type: 'Note', published: getISOTimestampString(message.modTimestamp), attributedTo: localActor.id, + audience: [message.isPrivate() ? 'as:Private' : 'as:Public'], // :TODO: inReplyto if this is a reply; we need this store in message meta. content: messageBodyToHtml(message.message.trim()), @@ -146,6 +150,37 @@ module.exports = class Activity { ); } + static fromOutboxEntries(owningUser, webServer, cb) { + // :TODO: support paging + const getOpts = { + create: true, // items marked 'Create' + }; + getOutboxEntries(owningUser, getOpts, (err, entries) => { + if (err) { + return cb(err); + } + + const obj = { + '@context': ActivityStreamsContext, + // :TODO: makeOutboxUrl() and use elsewhere also + id: makeUserUrl(webServer, owningUser, '/ap/users') + '/outbox', + type: 'OrderedCollection', + totalItems: entries.length, + orderedItems: entries.map(e => { + return { + '@context': ActivityStreamsContext, + id: e.activity.id, + type: 'Create', + actor: e.activity.actor, + object: e.activity.object, + }; + }), + }; + + return cb(null, new Activity(obj)); + }); + } + sendTo(actorUrl, fromUser, webServer, cb) { const privateKey = fromUser.getProperty(UserProps.PrivateKeyMain); if (_.isEmpty(privateKey)) { @@ -173,7 +208,10 @@ module.exports = class Activity { return postJson(actorUrl, activityJson, reqOpts, cb); } - static _makeFullId(webServer, prefix, uuid = '') { - return webServer.buildUrl(`/${prefix}/${uuid || UUIDv4()}`); + static _makeFullId(webServer, prefix) { + // e.g. http://some.host/_enig/ap/note/bf81a22e-cb3e-41c8-b114-21f375b61124 + return webServer.buildUrl( + WellKnownLocations.Internal + `/ap/${prefix}/${UUIDv4()}` + ); } }; diff --git a/core/activitypub/db.js b/core/activitypub/db.js index 5a6a6dbe7..711d2f6a7 100644 --- a/core/activitypub/db.js +++ b/core/activitypub/db.js @@ -1,17 +1,57 @@ const apDb = require('../database').dbs.activitypub; exports.persistToOutbox = persistToOutbox; +exports.getOutboxEntries = getOutboxEntries; -function persistToOutbox(activity, userId, messageId, cb) { +function persistToOutbox(activity, fromUser, message, cb) { const activityJson = JSON.stringify(activity); apDb.run( - `INSERT INTO activitypub_outbox (activity_id, user_id, message_id, activity_json) - VALUES (?, ?, ?, ?);`, - [activity.id, userId, messageId, activityJson], + `INSERT INTO outbox (activity_id, user_id, message_id, activity_json, published_timestamp) + VALUES (?, ?, ?, ?, ?);`, + [ + activity.id, + fromUser.userId, + message.messageId, + activityJson, + activity.object.published, + ], function res(err) { // non-arrow for 'this' scope return cb(err, this.lastID); } ); } + +function getOutboxEntries(owningUser, options, cb) { + apDb.all( + `SELECT id, activity_id, message_id, activity_json, published_timestamp + FROM outbox + WHERE user_id = ? AND json_extract(activity_json, '$.type') = "Create";`, + [owningUser.userId], + (err, rows) => { + if (err) { + return cb(err); + } + + const entries = rows.map(r => { + let parsed; + try { + parsed = JSON.parse(r.activity_json); + } catch (e) { + return cb(e); + } + + return { + id: r.id, + activityId: r.activity_id, + messageId: r.message_id, + activity: parsed, + published: r.published_timestamp, + }; + }); + + return cb(null, entries); + } + ); +} diff --git a/core/activitypub/settings.js b/core/activitypub/settings.js index 87d9123cf..d71a97524 100644 --- a/core/activitypub/settings.js +++ b/core/activitypub/settings.js @@ -1,4 +1,4 @@ -const UserProps = require('./user_property'); +const UserProps = require('../user_property'); module.exports = class ActivityPubSettings { constructor(obj) { diff --git a/core/activitypub/util.js b/core/activitypub/util.js index 30b36b213..be8e02823 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -1,8 +1,8 @@ -const { WellKnownLocations } = require('./servers/content/web'); -const User = require('./user'); -const { Errors, ErrorReasons } = require('./enig_error'); -const UserProps = require('./user_property'); -const ActivityPubSettings = require('./activitypub/settings'); +const { WellKnownLocations } = require('../servers/content/web'); +const User = require('../user'); +const { Errors, ErrorReasons } = require('../enig_error'); +const UserProps = require('../user_property'); +const ActivityPubSettings = require('./settings'); // deps const _ = require('lodash'); diff --git a/core/database.js b/core/database.js index 4c24a4809..6cc13f669 100644 --- a/core/database.js +++ b/core/database.js @@ -502,26 +502,33 @@ dbs.message.run( return cb(null); }, activitypub: cb => { + // private INTEGER NOT NULL, -- Is this Activity private? dbs.activitypub.run( - `CREATE TABLE IF NOT EXISTS activitypub_outbox ( - id INTEGER PRIMARY KEY, -- Local ID - activity_id VARCHAR NOT NULL, -- Fully qualified Activity ID/URL - user_id INTEGER NOT NULL, -- Local user ID - message_id INTEGER NOT NULL, -- Local message ID - activity_json VARCHAR NOT NULL, -- Activity in JSON format + `CREATE TABLE IF NOT EXISTS outbox ( + id INTEGER PRIMARY KEY, -- Local ID + activity_id VARCHAR NOT NULL, -- Fully qualified Activity ID/URL (activity.id) + user_id INTEGER NOT NULL, -- Local user ID + message_id INTEGER NOT NULL, -- Local message ID + activity_json VARCHAR NOT NULL, -- Activity in JSON format + published_timestamp DATETIME NOT NULL, -- (activity.object.published)) UNIQUE(message_id, activity_id) );` ); dbs.activitypub.run( - `CREATE INDEX IF NOT EXISTS activitypub_outbox_user_id_index0 - ON activitypub_outbox (user_id);` + `CREATE INDEX IF NOT EXISTS outbox_user_id_index0 + ON outbox (user_id);` ); dbs.activitypub.run( - `CREATE INDEX IF NOT EXISTS activitypub_outbox_activity_id_index0 - ON activitypub_outbox (activity_id);` + `CREATE INDEX IF NOT EXISTS outbox_activity_id_index0 + ON outbox (activity_id);` + ); + + dbs.activitypub.run( + `CREATE INDEX IF NOT EXISTS outbox_activity_json_type_index0 + ON outbox (json_extract(activity_json, '$.type'));` ); return cb(null); diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index 54319a252..7ef6f3d81 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -82,20 +82,15 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule ); }, (activity, fromUser, callback) => { - persistToOutbox( - activity, - fromUser.userId, - message.messageId, - (err, localId) => { - if (!err) { - this.log.debug( - { localId, activityId: activity.id }, - 'Note Activity persisted to database' - ); - } - return callback(err, activity); + persistToOutbox(activity, fromUser, message, (err, localId) => { + if (!err) { + this.log.debug( + { localId, activityId: activity.id }, + 'Note Activity persisted to database' + ); } - ); + return callback(err, activity); + }); }, (activity, callback) => { // mark exported diff --git a/core/servers/content/web.js b/core/servers/content/web.js index 509385abb..b24968d86 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -1,6 +1,3 @@ -/* jslint node: true */ -'use strict'; - // ENiGMA½ const Log = require('../../logger.js').log; const ServerModule = require('../../server_module.js').ServerModule; diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 4ee299a47..2eba9025c 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -4,11 +4,14 @@ const { getUserProfileTemplatedBody, DefaultProfileTemplate, accountFromSelfUrl, + ActivityStreamsContext, + makeUserUrl, } = require('../../../activitypub/util'); const Config = require('../../../config').get; const Activity = require('../../../activitypub/activity'); const ActivityPubSettings = require('../../../activitypub/settings'); const Actor = require('../../../activitypub/actor'); +const { getOutboxEntries } = require('../../../activitypub/db'); // deps const _ = require('lodash'); @@ -22,6 +25,8 @@ exports.moduleInfo = { packageName: 'codes.l33t.enigma.web.handler.activitypub', }; +const ActivityJsonMime = 'application/activity+json'; + exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { constructor() { super(); @@ -45,6 +50,12 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { handler: this._inboxPostHandler.bind(this), }); + this.webServer.addRoute({ + method: 'GET', + path: /^\/_enig\/ap\/users\/.+\/outbox(\?page=true)?$/, + handler: this._outboxGetHandler.bind(this), + }); + // :TODO: NYI // this.webServer.addRoute({ // method: 'GET', @@ -80,7 +91,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { // Additionally, serve activity JSON if the proper 'Accept' header was sent const accept = req.headers['accept'].split(',').map(v => v.trim()) || ['*/*']; const headerValues = [ - 'application/activity+json', + ActivityJsonMime, 'application/ld+json', 'application/json', ]; @@ -96,26 +107,20 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { _inboxPostHandler(req, resp) { // the request must be signed, and the signature must be valid - const signature = this._parseSignature(req); + const signature = this._parseAndValidateSignature(req); if (!signature) { - return this.webServer.resourceNotFound(resp); - } - - // quick check up front - const keyId = signature.keyId; - if (!this._validateKeyId(keyId)) { - return this.webServer.resourceNotFound(resp); + return this.webServer.accessDenied(resp); } - let body = ''; - req.on('data', data => { - body += data; + const body = []; + req.on('data', d => { + body.push(d); }); req.on('end', () => { let activity; try { - activity = Activity.fromJson(body); + activity = Activity.fromJson(Buffer.concat(body).toString()); } catch (e) { this.log.error( { error: e.message, url: req.url, method: req.method }, @@ -125,7 +130,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } if (!activity.isValid()) { - // :TODO: Log me + this.log.warn({ activity }, 'Invalid or unsupported Activity'); return this.webServer.webServer.badRequest(resp); } @@ -148,19 +153,110 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } - _parseSignature(req) { + // https://docs.gotosocial.org/en/latest/federation/behaviors/outbox/ + _outboxGetHandler(req, resp) { + this.log.trace({ url: req.url }, 'Request for "outbox"'); + + // the request must be signed, and the signature must be valid + const signature = this._parseAndValidateSignature(req); + if (!signature) { + return this.webServer.accessDenied(resp); + } + + // /_enig/ap/users/SomeName/outbox -> SomeName + const url = new URL(req.url, `https://${req.headers.host}`); + const m = url.pathname.match(/^\/_enig\/ap\/users\/(.+)\/outbox$/); + if (!m || !m[1]) { + return this.webServer.resourceNotFound(resp); + } + + const accountName = m[1]; + userFromAccount(accountName, (err, user) => { + if (err) { + this.log.info( + { reason: err.message, accountName: accountName }, + `No user "${accountName}" for "self"` + ); + return this.webServer.resourceNotFound(resp); + } + + // // we return a OrderedCollection response if this request + // // is not explicitly for a page of the collection + // const wantPage = url.searchParams.get('page') === 'true'; + // if (!wantPage) { + // const outboxUrl = makeUserUrl(this.webServer, user, '/ap/users/') + '/outbox'; + // const body = JSON.stringify({ + // '@context': ActivityStreamsContext, + // id: outboxUrl, + // type: 'OrderedCollection', + // first: `${outboxUrl}?page=true`, + // }); + + // const headers = { + // 'Content-Type': 'application/activity+json', + // 'Content-Length': body.length, + // }; + + // resp.writeHead(200, headers); + // return resp.end(body); + // } + + Activity.fromOutboxEntries(user, this.webServer, (err, activity) => { + if (err) { + // :TODO: LOG ME + return this.webServer.internalServerError(resp); + } + + const body = JSON.stringify(activity); + const headers = { + 'Content-Type': ActivityJsonMime, + 'Content-Length': body.length, + }; + + resp.writeHead(200, headers); + return resp.end(body); + }); + }); + } + + _parseAndValidateSignature(req) { + let signature; try { // :TODO: validate options passed to parseRequest() - return httpSignature.parseRequest(req); + signature = httpSignature.parseRequest(req); } catch (e) { this.log.warn( { error: e.message, url: req.url, method: req.method }, 'Failed to parse HTTP signature' ); + return null; + } + + // quick check up front + const keyId = signature.keyId; + if (!this._validateKeyId(keyId)) { + return null; + } + + return signature; + } + + _validateKeyId(keyId) { + if (!keyId) { + return false; } + + // we only accept main-key currently + return keyId.endsWith('#main-key'); } _inboxFollowRequestHandler(signature, activity, req, resp) { + this.log.trace( + { actor: activity.actor }, + `Follow request from ${activity.actor}` + ); + + // :TODO: trace const accountName = accountFromSelfUrl(activity.object); if (!accountName) { return this.webServer.badRequest(resp); @@ -266,15 +362,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } - _validateKeyId(keyId) { - if (!keyId) { - return false; - } - - // we only accept main-key currently - return keyId.endsWith('#main-key'); - } - _authorizeInteractionHandler(req, resp) { console.log(req); } @@ -294,7 +381,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { const body = JSON.stringify(actor); const headers = { - 'Content-Type': 'application/activity+json', + 'Content-Type': ActivityJsonMime, 'Content-Length': body.length, }; From 33ea963a1480bc3cfa11ae0bd953c498c9f1db58 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Fri, 13 Jan 2023 08:45:09 -0600 Subject: [PATCH 056/233] Removed prettier so eslint output matches NuSkooler's --- .eslintrc.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.json b/.eslintrc.json index b22b711c8..cafffef44 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -3,7 +3,7 @@ "es6": true, "node": true }, - "extends": ["eslint:recommended", "prettier"], + "extends": ["eslint:recommended"], "rules": { "indent": [ "error", From 4137e935d2a10c2b57a858e61c1064f4f75e107f Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Fri, 13 Jan 2023 09:14:00 -0600 Subject: [PATCH 057/233] Added precommit hook and staged checking of linting and formatting --- .husky/pre-commit | 4 + .lintstagedrc.json | 6 + package-lock.json | 1291 +++++++++--- package.json | 5 +- yarn.lock | 4747 +++++++++++++++++++++++--------------------- 5 files changed, 3492 insertions(+), 2561 deletions(-) create mode 100755 .husky/pre-commit create mode 100644 .lintstagedrc.json diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 000000000..d24fdfc60 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npx lint-staged diff --git a/.lintstagedrc.json b/.lintstagedrc.json new file mode 100644 index 000000000..d76d42584 --- /dev/null +++ b/.lintstagedrc.json @@ -0,0 +1,6 @@ +{ + "*.js": [ + "npx eslint --fix", + "npx prettier --write" + ] +} diff --git a/package-lock.json b/package-lock.json index 44b7810f1..8ecddc252 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,9 +55,11 @@ "oputil": "oputil.js" }, "devDependencies": { - "eslint": "8.21.0", + "eslint": "8.31.0", "eslint-config-prettier": "^8.5.0", - "prettier": "2.7.1" + "husky": "^8.0.0", + "lint-staged": "^13.1.0", + "prettier": "2.8.1" }, "engines": { "node": ">=14" @@ -87,15 +89,15 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", + "espree": "^9.4.0", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -104,6 +106,9 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@gar/promisify": { @@ -113,24 +118,27 @@ "optional": true }, "node_modules/@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "engines": { + "node": ">=12.22" + }, "funding": { "type": "github", "url": "https://github.com/sponsors/nzakas" @@ -252,9 +260,9 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -301,7 +309,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "optional": true, + "devOptional": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -327,22 +335,28 @@ } }, "node_modules/ansi-escapes": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", - "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dependencies": { - "type-fest": "^0.5.2" + "type-fest": "^0.21.3" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", - "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-regex": { @@ -403,15 +417,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", @@ -436,6 +441,15 @@ "node": ">=0.8" } }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", @@ -709,7 +723,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "optional": true, + "devOptional": true, "engines": { "node": ">=6" } @@ -736,6 +750,72 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", @@ -789,6 +869,21 @@ "color-support": "bin.js" } }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1005,18 +1100,6 @@ "node": ">=8" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -1042,6 +1125,12 @@ "node": ">=0.10" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/easy-table": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", @@ -1112,14 +1201,15 @@ } }, "node_modules/eslint": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz", - "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==", + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz", + "integrity": "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -1129,21 +1219,21 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -1154,8 +1244,7 @@ "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -1228,10 +1317,19 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/eslint/node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "dependencies": { "acorn": "^8.8.0", @@ -1357,34 +1455,6 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -1398,9 +1468,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -1520,12 +1590,6 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, "node_modules/gauge": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", @@ -1617,9 +1681,9 @@ } }, "node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.19.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -1631,26 +1695,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -1750,6 +1794,21 @@ "ms": "^2.0.0" } }, + "node_modules/husky": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -1781,18 +1840,18 @@ ] }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "dependencies": { "parent-module": "^1.0.0", @@ -1800,6 +1859,9 @@ }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/imurmurhash": { @@ -1815,7 +1877,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "optional": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -2015,6 +2077,16 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "node_modules/js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -2095,6 +2167,224 @@ "node": ">= 0.8.0" } }, + "node_modules/lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lint-staged": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.1.0.tgz", + "integrity": "sha512-pn/sR8IrcF/T0vpWLilih8jmVouMlxqXxKuAojmbiGX5n/gDnz+abdPptlj0vYnbfE0SQNl3CY/HwtM0+yfOVQ==", + "dev": true, + "dependencies": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.19", + "commander": "^9.4.1", + "debug": "^4.3.4", + "execa": "^6.1.0", + "lilconfig": "2.0.6", + "listr2": "^5.0.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.2", + "pidtree": "^0.6.0", + "string-argv": "^0.3.1", + "yaml": "^2.1.3" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "dev": true, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/lint-staged/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.6.tgz", + "integrity": "sha512-u60KxKBy1BR2uLJNTWNptzWQ1ob/gjMzIJPZffAENzpZqbMZ/5PrXXOomDcevIS/+IB7s1mmCEtSlT2qHWMqag==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.19", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.7", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -2141,6 +2431,55 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/lru-cache": { "version": "7.13.2", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", @@ -2223,15 +2562,6 @@ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -2676,6 +3006,15 @@ "node": ">=0.10.0" } }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -2784,7 +3123,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "optional": true, + "devOptional": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -2831,17 +3170,8 @@ }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "engines": { "node": ">=8" } @@ -2857,6 +3187,18 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -2894,9 +3236,9 @@ } }, "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", + "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -2937,9 +3279,9 @@ } }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz", + "integrity": "sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==", "dev": true, "engines": { "node": ">=6" @@ -3035,6 +3377,12 @@ "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -3116,9 +3464,9 @@ } }, "node_modules/rxjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", - "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", "dependencies": { "tslib": "^2.1.0" } @@ -3237,13 +3585,44 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/smart-buffer": { @@ -3383,6 +3762,15 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -3668,12 +4056,6 @@ "resolved": "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz", "integrity": "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==" }, - "node_modules/v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", - "dev": true - }, "node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -3748,6 +4130,23 @@ "node": ">=0.10.0" } }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -3778,6 +4177,15 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "node_modules/yaml": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz", + "integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/yazl": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", @@ -3815,15 +4223,15 @@ } }, "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", + "espree": "^9.4.0", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -3838,20 +4246,20 @@ "optional": true }, "@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" } }, - "@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true }, "@humanwhocodes/object-schema": { @@ -3947,9 +4355,9 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", "dev": true }, "acorn-jsx": { @@ -3982,7 +4390,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "optional": true, + "devOptional": true, "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -4001,17 +4409,17 @@ } }, "ansi-escapes": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", - "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "requires": { - "type-fest": "^0.5.2" + "type-fest": "^0.21.3" }, "dependencies": { "type-fest": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", - "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==" + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" } } }, @@ -4058,12 +4466,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, "array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", @@ -4082,6 +4484,12 @@ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, "async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", @@ -4274,7 +4682,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "optional": true + "devOptional": true }, "cli-cursor": { "version": "3.1.0", @@ -4289,6 +4697,50 @@ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" }, + "cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "requires": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, "cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", @@ -4322,6 +4774,18 @@ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" }, + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -4490,15 +4954,6 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -4517,6 +4972,12 @@ "nan": "^2.10.0" } }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "easy-table": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", @@ -4576,14 +5037,15 @@ "dev": true }, "eslint": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz", - "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==", + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz", + "integrity": "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -4593,21 +5055,21 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -4618,8 +5080,15 @@ "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" + }, + "dependencies": { + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + } } }, "eslint-config-prettier": { @@ -4663,9 +5132,9 @@ "dev": true }, "espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "requires": { "acorn": "^8.8.0", @@ -4760,30 +5229,6 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -4797,9 +5242,9 @@ "dev": true }, "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -4894,12 +5339,6 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, "gauge": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", @@ -4972,28 +5411,14 @@ } }, "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.19.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -5075,6 +5500,12 @@ "ms": "^2.0.0" } }, + "husky": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "dev": true + }, "iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -5089,15 +5520,15 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true }, "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -5114,7 +5545,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "optional": true + "devOptional": true }, "infer-owner": { "version": "1.0.4", @@ -5268,6 +5699,12 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, + "js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "dev": true + }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -5336,6 +5773,145 @@ "type-check": "~0.4.0" } }, + "lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "dev": true + }, + "lint-staged": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.1.0.tgz", + "integrity": "sha512-pn/sR8IrcF/T0vpWLilih8jmVouMlxqXxKuAojmbiGX5n/gDnz+abdPptlj0vYnbfE0SQNl3CY/HwtM0+yfOVQ==", + "dev": true, + "requires": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.19", + "commander": "^9.4.1", + "debug": "^4.3.4", + "execa": "^6.1.0", + "lilconfig": "2.0.6", + "listr2": "^5.0.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.2", + "pidtree": "^0.6.0", + "string-argv": "^0.3.1", + "yaml": "^2.1.3" + }, + "dependencies": { + "execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "dev": true + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + } + } + }, + "listr2": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.6.tgz", + "integrity": "sha512-u60KxKBy1BR2uLJNTWNptzWQ1ob/gjMzIJPZffAENzpZqbMZ/5PrXXOomDcevIS/+IB7s1mmCEtSlT2qHWMqag==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.19", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.7", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -5370,6 +5946,42 @@ "is-unicode-supported": "^0.1.0" } }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, "lru-cache": { "version": "7.13.2", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", @@ -5438,12 +6050,6 @@ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -5782,6 +6388,12 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -5863,7 +6475,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "optional": true, + "devOptional": true, "requires": { "aggregate-error": "^3.0.0" } @@ -5898,17 +6510,17 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, + "pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true + }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -5934,9 +6546,9 @@ "dev": true }, "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", + "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", "dev": true }, "promise-inflight": { @@ -5965,9 +6577,9 @@ } }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz", + "integrity": "sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==", "dev": true }, "qrcode-generator": { @@ -6024,6 +6636,12 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -6072,9 +6690,9 @@ } }, "rxjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", - "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", "requires": { "tslib": "^2.1.0" } @@ -6168,11 +6786,29 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true + } + } }, "smart-buffer": { "version": "4.2.0", @@ -6269,6 +6905,12 @@ "safe-buffer": "~5.1.0" } }, + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -6481,12 +7123,6 @@ "resolved": "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz", "integrity": "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==" }, - "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", - "dev": true - }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -6549,6 +7185,17 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -6565,6 +7212,12 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "yaml": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz", + "integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==", + "dev": true + }, "yazl": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", diff --git a/package.json b/package.json index 2804554d5..382c9f3bb 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "scripts": { "start": "node main.js", "oputil": "node ./oputil.js", - "pretty": "npx prettier --write ." + "pretty": "npx prettier --write .", + "prepare": "husky install" }, "repository": { "type": "git", @@ -72,6 +73,8 @@ "devDependencies": { "eslint": "8.31.0", "eslint-config-prettier": "^8.5.0", + "husky": "^8.0.0", + "lint-staged": "^13.1.0", "prettier": "2.8.1" }, "engines": { diff --git a/yarn.lock b/yarn.lock index ba92ffae5..a6fedae14 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,2318 +3,2583 @@ "@breejs/later@4.1.0": - version "4.1.0" - resolved "https://registry.npmjs.org/@breejs/later/-/later-4.1.0.tgz" - integrity sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA== + "integrity" "sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA==" + "resolved" "https://registry.npmjs.org/@breejs/later/-/later-4.1.0.tgz" + "version" "4.1.0" "@cnakazawa/watch@^1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz" - integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== + "integrity" "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==" + "resolved" "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz" + "version" "1.0.3" dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" + "exec-sh" "^0.3.2" + "minimist" "^1.2.0" "@eslint/eslintrc@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" - integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.4.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" + "integrity" "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==" + "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz" + "version" "1.4.1" + dependencies: + "ajv" "^6.12.4" + "debug" "^4.3.2" + "espree" "^9.4.0" + "globals" "^13.19.0" + "ignore" "^5.2.0" + "import-fresh" "^3.2.1" + "js-yaml" "^4.1.0" + "minimatch" "^3.1.2" + "strip-json-comments" "^3.1.1" "@gar/promisify@^1.0.1": - version "1.1.3" - resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + "integrity" "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + "resolved" "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" + "version" "1.1.3" "@humanwhocodes/config-array@^0.11.8": - version "0.11.8" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" - integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== + "integrity" "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz" + "version" "0.11.8" dependencies: "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.5" + "debug" "^4.1.1" + "minimatch" "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + "integrity" "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + "version" "1.0.1" "@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + "integrity" "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + "version" "1.2.1" "@mapbox/node-pre-gyp@^1.0.0": - version "1.0.9" - resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz" - integrity sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw== - dependencies: - detect-libc "^2.0.0" - https-proxy-agent "^5.0.0" - make-dir "^3.1.0" - node-fetch "^2.6.7" - nopt "^5.0.0" - npmlog "^5.0.1" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.11" + "integrity" "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==" + "resolved" "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz" + "version" "1.0.9" + dependencies: + "detect-libc" "^2.0.0" + "https-proxy-agent" "^5.0.0" + "make-dir" "^3.1.0" + "node-fetch" "^2.6.7" + "nopt" "^5.0.0" + "npmlog" "^5.0.1" + "rimraf" "^3.0.2" + "semver" "^7.3.5" + "tar" "^6.1.11" "@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + "version" "2.1.5" dependencies: "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" + "run-parallel" "^1.1.9" "@nodelib/fs.stat@2.0.5": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + "version" "2.0.5" "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + "version" "1.2.8" dependencies: "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" + "fastq" "^1.6.0" "@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + "integrity" "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==" + "resolved" "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" + "version" "1.1.1" dependencies: "@gar/promisify" "^1.0.1" - semver "^7.3.5" + "semver" "^7.3.5" "@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + "integrity" "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==" + "resolved" "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" + "version" "1.1.2" dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" + "mkdirp" "^1.0.4" + "rimraf" "^3.0.2" "@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + "integrity" "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" + "version" "1.1.2" "@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== - -abbrev@1: - version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^8.8.0: - version "8.8.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" - integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agentkeepalive@^4.1.3: - version "4.2.1" - resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" - integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== - dependencies: - debug "^4.1.0" - depd "^1.1.2" - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-escapes@^4.2.1: - version "4.2.1" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz" - integrity sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q== - dependencies: - type-fest "^0.5.2" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + "integrity" "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + "resolved" "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz" + "version" "1.1.1" + +"abbrev@1": + "integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + "version" "1.1.1" + +"acorn-jsx@^5.3.2": + "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" + "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + "version" "5.3.2" + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8.8.0": + "integrity" "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" + "version" "8.8.1" + +"agent-base@^6.0.2", "agent-base@6": + "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==" + "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "debug" "4" + +"agentkeepalive@^4.1.3": + "integrity" "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==" + "resolved" "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "debug" "^4.1.0" + "depd" "^1.1.2" + "humanize-ms" "^1.2.1" + +"aggregate-error@^3.0.0": + "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" + "resolved" "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "clean-stack" "^2.0.0" + "indent-string" "^4.0.0" + +"ajv@^6.10.0", "ajv@^6.12.4": + "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + "version" "6.12.6" + dependencies: + "fast-deep-equal" "^3.1.1" + "fast-json-stable-stringify" "^2.0.0" + "json-schema-traverse" "^0.4.1" + "uri-js" "^4.2.2" + +"ansi-escapes@^4.2.1", "ansi-escapes@^4.3.0": + "integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==" + "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + "version" "4.3.2" + dependencies: + "type-fest" "^0.21.3" + +"ansi-regex@^5.0.1": + "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + "version" "5.0.1" + +"ansi-regex@^6.0.1": + "integrity" "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" + "version" "6.0.1" + +"ansi-styles@^4.0.0", "ansi-styles@^4.1.0": + "integrity" "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz" + "version" "4.2.1" dependencies: "@types/color-name" "^1.1.1" - color-convert "^2.0.1" + "color-convert" "^2.0.1" -anymatch@^3.1.1: - version "3.1.2" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== +"ansi-styles@^6.0.0": + "integrity" "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + "version" "6.2.1" + +"anymatch@^3.1.1": + "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + "version" "3.1.2" dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" + "normalize-path" "^3.0.0" + "picomatch" "^2.0.4" "aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-we-there-yet@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" - integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" - integrity "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==" - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" - integrity "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" - -asn1@^0.2.4, asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - -async@3.2.4: - version "3.2.4" - resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" - integrity "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" - integrity "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==" - dependencies: - tweetnacl "^0.14.3" - -binary-parser@1.6.2: - version "1.6.2" - resolved "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz" - integrity sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ== - -binary-parser@2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz" - integrity sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ== - -bl@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + "integrity" "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + "resolved" "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + "version" "2.0.0" + +"are-we-there-yet@^2.0.0": + "integrity" "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==" + "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "delegates" "^1.0.0" + "readable-stream" "^3.6.0" + +"are-we-there-yet@^3.0.0": + "integrity" "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==" + "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "delegates" "^1.0.0" + "readable-stream" "^3.6.0" + +"argparse@^2.0.1": + "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + "version" "2.0.1" + +"array-union@^1.0.1": + "integrity" "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "array-uniq" "^1.0.1" + +"array-uniq@^1.0.1": + "integrity" "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" + "resolved" "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + "version" "1.0.3" + +"asn1@^0.2.4", "asn1@~0.2.3": + "integrity" "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==" + "resolved" "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" + "version" "0.2.6" + dependencies: + "safer-buffer" "~2.1.0" + +"assert-plus@^1.0.0", "assert-plus@1.0.0": + "integrity" "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" + "resolved" "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + "version" "1.0.0" + +"astral-regex@^2.0.0": + "integrity" "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + "version" "2.0.0" + +"async@3.2.4": + "integrity" "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + "resolved" "https://registry.npmjs.org/async/-/async-3.2.4.tgz" + "version" "3.2.4" + +"balanced-match@^1.0.0": + "integrity" "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + "version" "1.0.0" + +"base64-js@^1.3.1": + "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + "version" "1.5.1" + +"bcrypt-pbkdf@^1.0.0", "bcrypt-pbkdf@^1.0.2": + "integrity" "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==" + "resolved" "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "tweetnacl" "^0.14.3" + +"binary-parser@1.6.2": + "integrity" "sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ==" + "resolved" "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz" + "version" "1.6.2" + +"binary-parser@2.1.0": + "integrity" "sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ==" + "resolved" "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz" + "version" "2.1.0" + +"bl@^4.1.0": + "integrity" "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==" + "resolved" "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "buffer" "^5.5.0" + "inherits" "^2.0.4" + "readable-stream" "^3.4.0" + +"brace-expansion@^1.1.7": + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" + dependencies: + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" + +"brace-expansion@^2.0.1": + "integrity" "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + "version" "2.0.1" dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + "balanced-match" "^1.0.0" + +"braces@^3.0.2": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" dependencies: - fill-range "^7.0.1" + "fill-range" "^7.0.1" -bser@2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" +"bser@2.1.1": + "integrity" "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==" + "resolved" "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "node-int64" "^0.4.0" -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" - integrity "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" +"buffer-crc32@~0.2.3": + "integrity" "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + "resolved" "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" + "version" "0.2.13" -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" +"buffer@^5.5.0": + "integrity" "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" + "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + "version" "5.7.1" + dependencies: + "base64-js" "^1.3.1" + "ieee754" "^1.1.13" "buffers@github:NuSkooler/node-buffers": - version "0.1.1" - resolved "git+ssh://git@github.com/NuSkooler/node-buffers.git#cd0855598f7048b02f0a51c90e22573973e9e2c2" - -buildcheck@0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz" - integrity sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA== - -bunyan@1.8.15: - version "1.8.15" - resolved "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz" - integrity sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig== + "resolved" "git+ssh://git@github.com/NuSkooler/node-buffers.git#cd0855598f7048b02f0a51c90e22573973e9e2c2" + "version" "0.1.1" + +"buildcheck@0.0.3": + "integrity" "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==" + "resolved" "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz" + "version" "0.0.3" + +"bunyan@1.8.15": + "integrity" "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==" + "resolved" "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz" + "version" "1.8.15" optionalDependencies: - dtrace-provider "~0.8" - moment "^2.19.3" - mv "~2" - safe-json-stringify "~1" + "dtrace-provider" "~0.8" + "moment" "^2.19.3" + "mv" "~2" + "safe-json-stringify" "~1" -cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== +"cacache@^15.2.0": + "integrity" "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==" + "resolved" "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" + "version" "15.3.0" dependencies: "@npmcli/fs" "^1.0.0" "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.5.0: - version "2.6.1" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" - integrity "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" - -coffee-script@^1.12.4: - version "1.12.7" - resolved "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz" - integrity sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw== - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-support@^1.1.2, color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - -console-control-strings@^1.0.0, console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - -cpu-features@~0.0.4: - version "0.0.4" - resolved "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz" - integrity sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A== - dependencies: - buildcheck "0.0.3" - nan "^2.15.0" - -cross-spawn@^7.0.0, cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -deep-extend@^0.5.1: - version "0.5.1" - resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz" - integrity sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w== - -deep-is@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" - integrity "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==" - -deepdash@^5.3.9: - version "5.3.9" - resolved "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz" - integrity sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg== - dependencies: - lodash "^4.17.21" - lodash-es "^4.17.21" - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" - integrity "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==" - dependencies: - clone "^1.0.2" - -del@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/del/-/del-3.0.0.tgz" - integrity "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==" - dependencies: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" - integrity "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - -denque@^2.0.1: - version "2.1.0" - resolved "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz" - integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== - -depd@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -detect-libc@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" - integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dtrace-provider@~0.8: - version "0.8.7" - resolved "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz" - integrity "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q==" - dependencies: - nan "^2.10.0" - -easy-table@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz" - integrity sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww== - dependencies: - ansi-regex "^5.0.1" + "chownr" "^2.0.0" + "fs-minipass" "^2.0.0" + "glob" "^7.1.4" + "infer-owner" "^1.0.4" + "lru-cache" "^6.0.0" + "minipass" "^3.1.1" + "minipass-collect" "^1.0.2" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.2" + "mkdirp" "^1.0.3" + "p-map" "^4.0.0" + "promise-inflight" "^1.0.1" + "rimraf" "^3.0.2" + "ssri" "^8.0.1" + "tar" "^6.0.2" + "unique-filename" "^1.1.1" + +"callsites@^3.0.0": + "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + "version" "3.1.0" + +"capture-exit@^2.0.0": + "integrity" "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==" + "resolved" "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "rsvp" "^4.8.4" + +"chalk@^4.0.0", "chalk@^4.1.0", "chalk@^4.1.1": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chardet@^0.7.0": + "integrity" "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "resolved" "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + "version" "0.7.0" + +"chownr@^2.0.0": + "integrity" "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + "resolved" "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + "version" "2.0.0" + +"clean-stack@^2.0.0": + "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + "version" "2.2.0" + +"cli-cursor@^3.1.0": + "integrity" "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" + "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "restore-cursor" "^3.1.0" + +"cli-spinners@^2.5.0": + "integrity" "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" + "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" + "version" "2.6.1" + +"cli-truncate@^2.1.0": + "integrity" "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==" + "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "slice-ansi" "^3.0.0" + "string-width" "^4.2.0" + +"cli-truncate@^3.1.0": + "integrity" "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==" + "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "slice-ansi" "^5.0.0" + "string-width" "^5.0.0" + +"cli-width@^3.0.0": + "integrity" "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + "version" "3.0.0" + +"clone@^1.0.2": + "integrity" "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" + "resolved" "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + "version" "1.0.4" + +"coffee-script@^1.12.4": + "integrity" "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==" + "resolved" "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz" + "version" "1.12.7" + +"color-convert@^2.0.1": + "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "color-name" "~1.1.4" + +"color-name@~1.1.4": + "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + "version" "1.1.4" + +"color-support@^1.1.2", "color-support@^1.1.3": + "integrity" "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + "resolved" "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + "version" "1.1.3" + +"colorette@^2.0.19": + "integrity" "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" + "resolved" "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" + "version" "2.0.19" + +"commander@^9.4.1": + "integrity" "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==" + "resolved" "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz" + "version" "9.5.0" + +"concat-map@0.0.1": + "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" + +"console-control-strings@^1.0.0", "console-control-strings@^1.1.0": + "integrity" "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + "resolved" "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + "version" "1.1.0" + +"core-util-is@1.0.2": + "integrity" "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + "version" "1.0.2" + +"cpu-features@~0.0.4": + "integrity" "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==" + "resolved" "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz" + "version" "0.0.4" + dependencies: + "buildcheck" "0.0.3" + "nan" "^2.15.0" + +"cross-spawn@^7.0.0", "cross-spawn@^7.0.2", "cross-spawn@^7.0.3": + "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + "version" "7.0.3" + dependencies: + "path-key" "^3.1.0" + "shebang-command" "^2.0.0" + "which" "^2.0.1" + +"dashdash@^1.12.0": + "integrity" "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==" + "resolved" "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" + "version" "1.14.1" + dependencies: + "assert-plus" "^1.0.0" + +"debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.2", "debug@^4.3.3", "debug@^4.3.4", "debug@4": + "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + "version" "4.3.4" + dependencies: + "ms" "2.1.2" + +"deep-extend@^0.5.1": + "integrity" "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" + "resolved" "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz" + "version" "0.5.1" + +"deep-is@^0.1.3": + "integrity" "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==" + "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" + "version" "0.1.3" + +"deepdash@^5.3.9": + "integrity" "sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg==" + "resolved" "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz" + "version" "5.3.9" + dependencies: + "lodash" "^4.17.21" + "lodash-es" "^4.17.21" + +"defaults@^1.0.3": + "integrity" "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==" + "resolved" "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "clone" "^1.0.2" + +"del@^3.0.0": + "integrity" "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==" + "resolved" "https://registry.npmjs.org/del/-/del-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "globby" "^6.1.0" + "is-path-cwd" "^1.0.0" + "is-path-in-cwd" "^1.0.0" + "p-map" "^1.1.1" + "pify" "^3.0.0" + "rimraf" "^2.2.8" + +"delegates@^1.0.0": + "integrity" "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + "resolved" "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + "version" "1.0.0" + +"denque@^2.0.1": + "integrity" "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" + "resolved" "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz" + "version" "2.1.0" + +"depd@^1.1.2": + "integrity" "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + "version" "1.1.2" + +"detect-libc@^2.0.0": + "integrity" "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + "resolved" "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" + "version" "2.0.1" + +"doctrine@^3.0.0": + "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" + "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "esutils" "^2.0.2" + +"dtrace-provider@~0.8": + "integrity" "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q==" + "resolved" "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz" + "version" "0.8.7" + dependencies: + "nan" "^2.10.0" + +"eastasianwidth@^0.2.0": + "integrity" "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "resolved" "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + "version" "0.2.0" + +"easy-table@^1.2.0": + "integrity" "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==" + "resolved" "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "ansi-regex" "^5.0.1" optionalDependencies: - wcwidth "^1.0.1" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encoding@^0.1.12: - version "0.1.13" - resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz" - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== - dependencies: - once "^1.4.0" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-prettier@^8.5.0: - version "8.5.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" - integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== - -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" - integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== - -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== - -eslint@8.31.0: - version "8.31.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.31.0.tgz#75028e77cbcff102a9feae1d718135931532d524" - integrity sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA== + "wcwidth" "^1.0.1" + +"ecc-jsbn@~0.1.1": + "integrity" "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==" + "resolved" "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" + "version" "0.1.2" + dependencies: + "jsbn" "~0.1.0" + "safer-buffer" "^2.1.0" + +"emoji-regex@^8.0.0": + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + "version" "8.0.0" + +"emoji-regex@^9.2.2": + "integrity" "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + "version" "9.2.2" + +"encoding@^0.1.0", "encoding@^0.1.12": + "integrity" "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==" + "resolved" "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + "version" "0.1.13" + dependencies: + "iconv-lite" "^0.6.2" + +"end-of-stream@^1.1.0": + "integrity" "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==" + "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz" + "version" "1.4.1" + dependencies: + "once" "^1.4.0" + +"env-paths@^2.2.0": + "integrity" "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + "resolved" "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + "version" "2.2.1" + +"err-code@^2.0.2": + "integrity" "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + "resolved" "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + "version" "2.0.3" + +"escape-string-regexp@^1.0.5": + "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" + +"escape-string-regexp@^4.0.0": + "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + "version" "4.0.0" + +"eslint-config-prettier@^8.5.0": + "integrity" "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==" + "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" + "version" "8.5.0" + +"eslint-scope@^7.1.1": + "integrity" "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" + "version" "7.1.1" + dependencies: + "esrecurse" "^4.3.0" + "estraverse" "^5.2.0" + +"eslint-utils@^3.0.0": + "integrity" "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==" + "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "eslint-visitor-keys" "^2.0.0" + +"eslint-visitor-keys@^2.0.0": + "integrity" "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" + "version" "2.0.0" + +"eslint-visitor-keys@^3.3.0": + "integrity" "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" + "version" "3.3.0" + +"eslint@>=5", "eslint@>=7.0.0", "eslint@8.31.0": + "integrity" "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==" + "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz" + "version" "8.31.0" dependencies: "@eslint/eslintrc" "^1.4.1" "@humanwhocodes/config-array" "^0.11.8" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-sdsl "^4.1.4" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - -espree@^9.4.0: - version "9.4.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" - integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== - dependencies: - acorn "^8.8.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -exec-sh@^0.3.2, exec-sh@^0.3.4: - version "0.3.6" - resolved "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - -execa@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -exiftool@^0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz" - integrity "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" - -external-editor@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz" - integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extsprintf@1.3.0, extsprintf@^1.2.0: - version "1.3.0" - resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - -fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== - dependencies: - bser "2.1.1" - -figures@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz" - integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" - integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== - -fs-extra@10.1.0: - version "10.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - -gauge@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" - integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.2" - console-control-strings "^1.0.0" - has-unicode "^2.0.1" - object-assign "^4.1.1" - signal-exit "^3.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.2" - -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -get-stream@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@8.0.3: - version "8.0.3" - resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -glob@^6.0.1: - version "6.0.4" - resolved "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz" - integrity "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.3, glob@^7.0.5: - version "7.1.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.3: - version "7.1.6" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.4: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^13.19.0: - version "13.19.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8" - integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ== - dependencies: - type-fest "^0.20.2" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" - integrity "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==" - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.6: - version "4.2.10" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -hashids@^2.2.10: - version "2.2.10" - resolved "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz" - integrity sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA== - -hjson@3.2.2: - version "3.2.2" - resolved "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" - integrity sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q== - -http-cache-semantics@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + "ajv" "^6.10.0" + "chalk" "^4.0.0" + "cross-spawn" "^7.0.2" + "debug" "^4.3.2" + "doctrine" "^3.0.0" + "escape-string-regexp" "^4.0.0" + "eslint-scope" "^7.1.1" + "eslint-utils" "^3.0.0" + "eslint-visitor-keys" "^3.3.0" + "espree" "^9.4.0" + "esquery" "^1.4.0" + "esutils" "^2.0.2" + "fast-deep-equal" "^3.1.3" + "file-entry-cache" "^6.0.1" + "find-up" "^5.0.0" + "glob-parent" "^6.0.2" + "globals" "^13.19.0" + "grapheme-splitter" "^1.0.4" + "ignore" "^5.2.0" + "import-fresh" "^3.0.0" + "imurmurhash" "^0.1.4" + "is-glob" "^4.0.0" + "is-path-inside" "^3.0.3" + "js-sdsl" "^4.1.4" + "js-yaml" "^4.1.0" + "json-stable-stringify-without-jsonify" "^1.0.1" + "levn" "^0.4.1" + "lodash.merge" "^4.6.2" + "minimatch" "^3.1.2" + "natural-compare" "^1.4.0" + "optionator" "^0.9.1" + "regexpp" "^3.2.0" + "strip-ansi" "^6.0.1" + "strip-json-comments" "^3.1.0" + "text-table" "^0.2.0" + +"espree@^9.4.0": + "integrity" "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==" + "resolved" "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz" + "version" "9.4.1" + dependencies: + "acorn" "^8.8.0" + "acorn-jsx" "^5.3.2" + "eslint-visitor-keys" "^3.3.0" + +"esquery@^1.4.0": + "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==" + "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "estraverse" "^5.1.0" + +"esrecurse@^4.3.0": + "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" + "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "estraverse" "^5.2.0" + +"estraverse@^5.1.0", "estraverse@^5.2.0": + "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" + "version" "5.2.0" + +"esutils@^2.0.2": + "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + "version" "2.0.3" + +"exec-sh@^0.3.2", "exec-sh@^0.3.4": + "integrity" "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" + "resolved" "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz" + "version" "0.3.6" + +"execa@^4.0.0": + "integrity" "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==" + "resolved" "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "cross-spawn" "^7.0.0" + "get-stream" "^5.0.0" + "human-signals" "^1.1.1" + "is-stream" "^2.0.0" + "merge-stream" "^2.0.0" + "npm-run-path" "^4.0.0" + "onetime" "^5.1.0" + "signal-exit" "^3.0.2" + "strip-final-newline" "^2.0.0" + +"execa@^6.1.0": + "integrity" "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==" + "resolved" "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "cross-spawn" "^7.0.3" + "get-stream" "^6.0.1" + "human-signals" "^3.0.1" + "is-stream" "^3.0.0" + "merge-stream" "^2.0.0" + "npm-run-path" "^5.1.0" + "onetime" "^6.0.0" + "signal-exit" "^3.0.7" + "strip-final-newline" "^3.0.0" + +"exiftool@^0.0.3": + "integrity" "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" + "resolved" "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz" + "version" "0.0.3" + +"external-editor@^3.0.3": + "integrity" "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==" + "resolved" "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "chardet" "^0.7.0" + "iconv-lite" "^0.4.24" + "tmp" "^0.0.33" + +"extsprintf@^1.2.0", "extsprintf@1.3.0": + "integrity" "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" + "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + "version" "1.3.0" + +"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": + "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + "version" "3.1.3" + +"fast-json-stable-stringify@^2.0.0": + "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + "version" "2.1.0" + +"fast-levenshtein@^2.0.6": + "integrity" "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + "version" "2.0.6" + +"fastq@^1.6.0": + "integrity" "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==" + "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" + "version" "1.15.0" + dependencies: + "reusify" "^1.0.4" + +"fb-watchman@^2.0.1": + "integrity" "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==" + "resolved" "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "bser" "2.1.1" + +"figures@^3.0.0": + "integrity" "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==" + "resolved" "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "escape-string-regexp" "^1.0.5" + +"file-entry-cache@^6.0.1": + "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" + "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "flat-cache" "^3.0.4" + +"fill-range@^7.0.1": + "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "to-regex-range" "^5.0.1" + +"find-up@^5.0.0": + "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "locate-path" "^6.0.0" + "path-exists" "^4.0.0" + +"flat-cache@^3.0.4": + "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==" + "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "flatted" "^3.1.0" + "rimraf" "^3.0.2" + +"flatted@^3.1.0": + "integrity" "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==" + "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" + "version" "3.1.1" + +"fs-extra@10.1.0": + "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + "version" "10.1.0" + dependencies: + "graceful-fs" "^4.2.0" + "jsonfile" "^6.0.1" + "universalify" "^2.0.0" + +"fs-minipass@^2.0.0": + "integrity" "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==" + "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "minipass" "^3.0.0" + +"fs.realpath@^1.0.0": + "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" + +"gauge@^3.0.0": + "integrity" "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==" + "resolved" "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "aproba" "^1.0.3 || ^2.0.0" + "color-support" "^1.1.2" + "console-control-strings" "^1.0.0" + "has-unicode" "^2.0.1" + "object-assign" "^4.1.1" + "signal-exit" "^3.0.0" + "string-width" "^4.2.3" + "strip-ansi" "^6.0.1" + "wide-align" "^1.1.2" + +"gauge@^4.0.3": + "integrity" "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==" + "resolved" "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" + "version" "4.0.4" + dependencies: + "aproba" "^1.0.3 || ^2.0.0" + "color-support" "^1.1.3" + "console-control-strings" "^1.1.0" + "has-unicode" "^2.0.1" + "signal-exit" "^3.0.7" + "string-width" "^4.2.3" + "strip-ansi" "^6.0.1" + "wide-align" "^1.1.5" + +"get-stream@^5.0.0": + "integrity" "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "pump" "^3.0.0" + +"get-stream@^6.0.1": + "integrity" "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + "version" "6.0.1" + +"getpass@^0.1.1": + "integrity" "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==" + "resolved" "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" + "version" "0.1.7" + dependencies: + "assert-plus" "^1.0.0" + +"glob-parent@^6.0.2": + "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "is-glob" "^4.0.3" + +"glob@^6.0.1": + "integrity" "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==" + "resolved" "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz" + "version" "6.0.4" + dependencies: + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "2 || 3" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^7.0.3", "glob@^7.0.5": + "integrity" "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" + "version" "7.1.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^7.1.3": + "integrity" "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + "version" "7.1.6" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^7.1.4": + "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + "version" "7.2.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.1.1" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@8.0.3": + "integrity" "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==" + "resolved" "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" + "version" "8.0.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^5.0.1" + "once" "^1.3.0" + +"globals@^13.19.0": + "integrity" "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==" + "resolved" "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz" + "version" "13.19.0" + dependencies: + "type-fest" "^0.20.2" + +"globby@^6.1.0": + "integrity" "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==" + "resolved" "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "array-union" "^1.0.1" + "glob" "^7.0.3" + "object-assign" "^4.0.1" + "pify" "^2.0.0" + "pinkie-promise" "^2.0.0" + +"graceful-fs@^4.1.6", "graceful-fs@^4.2.0", "graceful-fs@^4.2.10", "graceful-fs@^4.2.6": + "integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + "version" "4.2.10" + +"grapheme-splitter@^1.0.4": + "integrity" "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + "resolved" "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" + "version" "1.0.4" + +"has-flag@^4.0.0": + "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + "version" "4.0.0" + +"has-unicode@^2.0.1": + "integrity" "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + "resolved" "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + "version" "2.0.1" + +"hashids@^2.2.10": + "integrity" "sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA==" + "resolved" "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz" + "version" "2.2.10" + +"hjson@3.2.2": + "integrity" "sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==" + "resolved" "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" + "version" "3.2.2" + +"http-cache-semantics@^4.1.0": + "integrity" "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" + "version" "4.1.0" + +"http-proxy-agent@^4.0.1": + "integrity" "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==" + "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" + "version" "4.0.1" dependencies: "@tootallnate/once" "1" - agent-base "6" - debug "4" - -http-signature@^1.3.6: - version "1.3.6" - resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz" - integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== - dependencies: - assert-plus "^1.0.0" - jsprim "^2.0.2" - sshpk "^1.14.1" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -iconv-lite@0.6.3, iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz" - integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.3, inherits@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini-config-parser@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz" - integrity sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg== - dependencies: - coffee-script "^1.12.4" - deep-extend "^0.5.1" - rimraf "^2.6.1" - -inquirer@^8.2.2: - version "8.2.2" - resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz" - integrity sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.0, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz" - integrity "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" - -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz" - integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz" - integrity "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==" - dependencies: - path-is-inside "^1.0.1" - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - -js-sdsl@^4.1.4: - version "4.2.0" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" - integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - integrity "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" + "agent-base" "6" + "debug" "4" + +"http-signature@^1.3.6": + "integrity" "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==" + "resolved" "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz" + "version" "1.3.6" + dependencies: + "assert-plus" "^1.0.0" + "jsprim" "^2.0.2" + "sshpk" "^1.14.1" + +"https-proxy-agent@^5.0.0": + "integrity" "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==" + "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "agent-base" "6" + "debug" "4" + +"human-signals@^1.1.1": + "integrity" "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" + "version" "1.1.1" + +"human-signals@^3.0.1": + "integrity" "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==" + "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz" + "version" "3.0.1" + +"humanize-ms@^1.2.1": + "integrity" "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==" + "resolved" "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "ms" "^2.0.0" + +"husky@^8.0.0": + "integrity" "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==" + "resolved" "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz" + "version" "8.0.3" + +"iconv-lite@^0.4.24": + "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + "version" "0.4.24" + dependencies: + "safer-buffer" ">= 2.1.2 < 3" + +"iconv-lite@^0.6.2", "iconv-lite@0.6.3": + "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + "version" "0.6.3" + dependencies: + "safer-buffer" ">= 2.1.2 < 3.0.0" + +"ieee754@^1.1.13": + "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + "version" "1.2.1" + +"ignore@^5.2.0": + "integrity" "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" + "version" "5.2.4" + +"import-fresh@^3.0.0", "import-fresh@^3.2.1": + "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" + "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "parent-module" "^1.0.0" + "resolve-from" "^4.0.0" + +"imurmurhash@^0.1.4": + "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + "version" "0.1.4" + +"indent-string@^4.0.0": + "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + "version" "4.0.0" + +"infer-owner@^1.0.4": + "integrity" "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + "resolved" "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + "version" "1.0.4" + +"inflight@^1.0.4": + "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "once" "^1.3.0" + "wrappy" "1" + +"inherits@^2.0.3", "inherits@^2.0.4", "inherits@2": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" + +"ini-config-parser@^1.0.4": + "integrity" "sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg==" + "resolved" "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "coffee-script" "^1.12.4" + "deep-extend" "^0.5.1" + "rimraf" "^2.6.1" + +"inquirer@^8.2.2": + "integrity" "sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow==" + "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz" + "version" "8.2.2" + dependencies: + "ansi-escapes" "^4.2.1" + "chalk" "^4.1.1" + "cli-cursor" "^3.1.0" + "cli-width" "^3.0.0" + "external-editor" "^3.0.3" + "figures" "^3.0.0" + "lodash" "^4.17.21" + "mute-stream" "0.0.8" + "ora" "^5.4.1" + "run-async" "^2.4.0" + "rxjs" "^7.5.5" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + "through" "^2.3.6" + +"ip@^2.0.0": + "integrity" "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + "resolved" "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" + "version" "2.0.0" + +"is-extglob@^2.1.1": + "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + "version" "2.1.1" + +"is-fullwidth-code-point@^3.0.0": + "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + "version" "3.0.0" + +"is-fullwidth-code-point@^4.0.0": + "integrity" "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" + "version" "4.0.0" + +"is-glob@^4.0.0", "is-glob@^4.0.3": + "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "is-extglob" "^2.1.1" + +"is-interactive@^1.0.0": + "integrity" "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + "resolved" "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + "version" "1.0.0" + +"is-lambda@^1.0.1": + "integrity" "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + "resolved" "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + "version" "1.0.1" + +"is-number@^7.0.0": + "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + "version" "7.0.0" + +"is-path-cwd@^1.0.0": + "integrity" "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" + "resolved" "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz" + "version" "1.0.0" + +"is-path-in-cwd@^1.0.0": + "integrity" "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==" + "resolved" "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "is-path-inside" "^1.0.0" + +"is-path-inside@^1.0.0": + "integrity" "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==" + "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "path-is-inside" "^1.0.1" + +"is-path-inside@^3.0.3": + "integrity" "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + "version" "3.0.3" + +"is-stream@^2.0.0": + "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + "version" "2.0.1" + +"is-stream@^3.0.0": + "integrity" "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" + "version" "3.0.0" + +"is-unicode-supported@^0.1.0": + "integrity" "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + "version" "0.1.0" + +"isexe@^2.0.0": + "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + "version" "2.0.0" + +"js-sdsl@^4.1.4": + "integrity" "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==" + "resolved" "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz" + "version" "4.2.0" + +"js-yaml@^4.1.0": + "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "argparse" "^2.0.1" + +"jsbn@~0.1.0": + "integrity" "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + "resolved" "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + "version" "0.1.1" + +"json-schema-traverse@^0.4.1": + "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + "version" "0.4.1" + +"json-schema@0.4.0": + "integrity" "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + "resolved" "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" + "version" "0.4.0" + +"json-stable-stringify-without-jsonify@^1.0.1": + "integrity" "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + "version" "1.0.1" + +"jsonfile@^6.0.1": + "integrity" "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==" + "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "universalify" "^1.0.0" optionalDependencies: - graceful-fs "^4.1.6" - -jsprim@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz" - integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash-es@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" - integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -lru-cache@7.13.2: - version "7.13.2" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz" - integrity sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-fetch-happen@^9.1.0: - version "9.1.0" - resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.2" - promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.0.0" - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz" - integrity "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==" - dependencies: - tmpl "1.0.x" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -micromatch@^4.0.2: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.35: - version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.0" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^1.3.2: - version "1.4.1" - resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" + "graceful-fs" "^4.1.6" + +"jsprim@^2.0.2": + "integrity" "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==" + "resolved" "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "assert-plus" "1.0.0" + "extsprintf" "1.3.0" + "json-schema" "0.4.0" + "verror" "1.10.0" + +"levn@^0.4.1": + "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" + "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + "version" "0.4.1" + dependencies: + "prelude-ls" "^1.2.1" + "type-check" "~0.4.0" + +"lilconfig@2.0.6": + "integrity" "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" + "resolved" "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz" + "version" "2.0.6" + +"lint-staged@^13.1.0": + "integrity" "sha512-pn/sR8IrcF/T0vpWLilih8jmVouMlxqXxKuAojmbiGX5n/gDnz+abdPptlj0vYnbfE0SQNl3CY/HwtM0+yfOVQ==" + "resolved" "https://registry.npmjs.org/lint-staged/-/lint-staged-13.1.0.tgz" + "version" "13.1.0" + dependencies: + "cli-truncate" "^3.1.0" + "colorette" "^2.0.19" + "commander" "^9.4.1" + "debug" "^4.3.4" + "execa" "^6.1.0" + "lilconfig" "2.0.6" + "listr2" "^5.0.5" + "micromatch" "^4.0.5" + "normalize-path" "^3.0.0" + "object-inspect" "^1.12.2" + "pidtree" "^0.6.0" + "string-argv" "^0.3.1" + "yaml" "^2.1.3" + +"listr2@^5.0.5": + "integrity" "sha512-u60KxKBy1BR2uLJNTWNptzWQ1ob/gjMzIJPZffAENzpZqbMZ/5PrXXOomDcevIS/+IB7s1mmCEtSlT2qHWMqag==" + "resolved" "https://registry.npmjs.org/listr2/-/listr2-5.0.6.tgz" + "version" "5.0.6" + dependencies: + "cli-truncate" "^2.1.0" + "colorette" "^2.0.19" + "log-update" "^4.0.0" + "p-map" "^4.0.0" + "rfdc" "^1.3.0" + "rxjs" "^7.5.7" + "through" "^2.3.8" + "wrap-ansi" "^7.0.0" + +"locate-path@^6.0.0": + "integrity" "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "p-locate" "^5.0.0" + +"lodash-es@^4.17.21": + "integrity" "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + "resolved" "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" + "version" "4.17.21" + +"lodash.merge@^4.6.2": + "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + "version" "4.6.2" + +"lodash@^4.17.15", "lodash@^4.17.21", "lodash@4.17.21": + "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + "version" "4.17.21" + +"log-symbols@^4.1.0": + "integrity" "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==" + "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "chalk" "^4.1.0" + "is-unicode-supported" "^0.1.0" + +"log-update@^4.0.0": + "integrity" "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==" + "resolved" "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "ansi-escapes" "^4.3.0" + "cli-cursor" "^3.1.0" + "slice-ansi" "^4.0.0" + "wrap-ansi" "^6.2.0" + +"lru-cache@^6.0.0": + "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "yallist" "^4.0.0" + +"lru-cache@7.13.2": + "integrity" "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz" + "version" "7.13.2" + +"make-dir@^3.1.0": + "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "semver" "^6.0.0" + +"make-fetch-happen@^9.1.0": + "integrity" "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==" + "resolved" "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" + "version" "9.1.0" + dependencies: + "agentkeepalive" "^4.1.3" + "cacache" "^15.2.0" + "http-cache-semantics" "^4.1.0" + "http-proxy-agent" "^4.0.1" + "https-proxy-agent" "^5.0.0" + "is-lambda" "^1.0.1" + "lru-cache" "^6.0.0" + "minipass" "^3.1.3" + "minipass-collect" "^1.0.2" + "minipass-fetch" "^1.3.2" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "negotiator" "^0.6.2" + "promise-retry" "^2.0.1" + "socks-proxy-agent" "^6.0.0" + "ssri" "^8.0.0" + +"makeerror@1.0.x": + "integrity" "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==" + "resolved" "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz" + "version" "1.0.11" + dependencies: + "tmpl" "1.0.x" + +"merge-stream@^2.0.0": + "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + "version" "2.0.0" + +"micromatch@^4.0.2", "micromatch@^4.0.5": + "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + "version" "4.0.5" + dependencies: + "braces" "^3.0.2" + "picomatch" "^2.3.1" + +"mime-db@1.52.0": + "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + "version" "1.52.0" + +"mime-types@^2.1.35": + "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" + "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + "version" "2.1.35" + dependencies: + "mime-db" "1.52.0" + +"mimic-fn@^2.1.0": + "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + "version" "2.1.0" + +"mimic-fn@^4.0.0": + "integrity" "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" + "version" "4.0.0" + +"minimatch@^3.0.4", "minimatch@^3.0.5", "minimatch@^3.1.1", "minimatch@^3.1.2", "minimatch@2 || 3": + "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "brace-expansion" "^1.1.7" + +"minimatch@^5.0.1": + "integrity" "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "brace-expansion" "^2.0.1" + +"minimist@^1.1.1", "minimist@^1.2.0", "minimist@^1.2.6": + "integrity" "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" + "version" "1.2.6" + +"minipass-collect@^1.0.2": + "integrity" "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==" + "resolved" "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "minipass" "^3.0.0" + +"minipass-fetch@^1.3.2": + "integrity" "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==" + "resolved" "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" + "version" "1.4.1" + dependencies: + "minipass" "^3.1.0" + "minipass-sized" "^1.0.3" + "minizlib" "^2.0.0" optionalDependencies: - encoding "^0.1.12" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: - version "3.3.4" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" - integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== - dependencies: - yallist "^4.0.0" - -minizlib@^2.0.0, minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mkdirp@~0.5.1: - version "0.5.6" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -moment@2.29.4, moment@^2.19.3: - version "2.29.4" - resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== - -ms@2.1.2, ms@^2.0.0: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -mv@~2: - version "2.1.1" - resolved "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz" - integrity "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==" - dependencies: - mkdirp "~0.5.1" - ncp "~2.0.0" - rimraf "~2.4.0" - -nan@^2.10.0, nan@^2.14.0, nan@^2.15.0, nan@^2.16.0: - version "2.16.0" - resolved "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz" - integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - integrity "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - -ncp@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz" - integrity "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==" - -negotiator@^0.6.2: - version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -nntp-server@3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/nntp-server/-/nntp-server-3.1.0.tgz" - integrity sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw== - dependencies: - debug "^4.3.3" - denque "^2.0.1" - serialize-error "^8.1.0" - split2 "^4.1.0" - -node-addon-api@^4.2.0: - version "4.3.0" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz" - integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== - -node-fetch@^2.6.7: - version "2.6.7" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-gyp@8.x: - version "8.4.1" - resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" - integrity "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - -node-pty@0.10.1: - version "0.10.1" - resolved "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz" - integrity sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg== - dependencies: - nan "^2.14.0" - -nodemailer@6.7.7: - version "6.7.7" - resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz" - integrity sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA== - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npmlog@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - -npmlog@^6.0.0: - version "6.0.2" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - -object-assign@^4.0.1, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" - dependencies: - wrappy "1" - -onetime@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz" - integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== - dependencies: - mimic-fn "^2.1.0" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - integrity "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" - -otplib@11.0.1: - version "11.0.1" - resolved "https://registry.npmjs.org/otplib/-/otplib-11.0.1.tgz" - integrity sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ== - dependencies: - thirty-two "1.0.2" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz" - integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - -path-is-inside@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" - integrity "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -picomatch@^2.0.4, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - integrity "sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" - integrity "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - integrity "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" - integrity "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier@2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" - integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -qrcode-generator@^1.4.4: - version "1.4.4" - resolved "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz" - integrity sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^2.2.8, rimraf@^2.6.1: - version "2.6.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" - integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== - dependencies: - glob "^7.0.5" - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rimraf@~2.4.0: - version "2.4.5" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz" - integrity "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==" - dependencies: - glob "^6.0.1" - -rlogin@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz" - integrity "sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==" - -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.5.5: - version "7.5.5" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz" - integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== - dependencies: - tslib "^2.1.0" - -safe-buffer@~5.1.0: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-json-stringify@~1: - version "1.2.0" - resolved "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz" - integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/sane/-/sane-5.0.1.tgz" - integrity sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q== + "encoding" "^0.1.12" + +"minipass-flush@^1.0.5": + "integrity" "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==" + "resolved" "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "minipass" "^3.0.0" + +"minipass-pipeline@^1.2.2", "minipass-pipeline@^1.2.4": + "integrity" "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==" + "resolved" "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + "version" "1.2.4" + dependencies: + "minipass" "^3.0.0" + +"minipass-sized@^1.0.3": + "integrity" "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==" + "resolved" "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "minipass" "^3.0.0" + +"minipass@^3.0.0", "minipass@^3.1.0", "minipass@^3.1.1", "minipass@^3.1.3": + "integrity" "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" + "version" "3.3.4" + dependencies: + "yallist" "^4.0.0" + +"minizlib@^2.0.0", "minizlib@^2.1.1": + "integrity" "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==" + "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "minipass" "^3.0.0" + "yallist" "^4.0.0" + +"mkdirp@^1.0.3": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"mkdirp@^1.0.4": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"mkdirp@~0.5.1": + "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + "version" "0.5.6" + dependencies: + "minimist" "^1.2.6" + +"moment@^2.19.3", "moment@2.29.4": + "integrity" "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + "resolved" "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" + "version" "2.29.4" + +"ms@^2.0.0", "ms@2.1.2": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" + +"mute-stream@0.0.8": + "integrity" "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + "version" "0.0.8" + +"mv@~2": + "integrity" "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==" + "resolved" "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "mkdirp" "~0.5.1" + "ncp" "~2.0.0" + "rimraf" "~2.4.0" + +"nan@^2.10.0", "nan@^2.14.0", "nan@^2.15.0", "nan@^2.16.0": + "integrity" "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" + "resolved" "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz" + "version" "2.16.0" + +"natural-compare@^1.4.0": + "integrity" "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + "version" "1.4.0" + +"ncp@~2.0.0": + "integrity" "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==" + "resolved" "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz" + "version" "2.0.0" + +"negotiator@^0.6.2": + "integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + "version" "0.6.3" + +"nntp-server@3.1.0": + "integrity" "sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw==" + "resolved" "https://registry.npmjs.org/nntp-server/-/nntp-server-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "debug" "^4.3.3" + "denque" "^2.0.1" + "serialize-error" "^8.1.0" + "split2" "^4.1.0" + +"node-addon-api@^4.2.0": + "integrity" "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz" + "version" "4.3.0" + +"node-fetch@^2.6.7": + "integrity" "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==" + "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" + "version" "2.6.7" + dependencies: + "whatwg-url" "^5.0.0" + +"node-gyp@8.x": + "integrity" "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==" + "resolved" "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" + "version" "8.4.1" + dependencies: + "env-paths" "^2.2.0" + "glob" "^7.1.4" + "graceful-fs" "^4.2.6" + "make-fetch-happen" "^9.1.0" + "nopt" "^5.0.0" + "npmlog" "^6.0.0" + "rimraf" "^3.0.2" + "semver" "^7.3.5" + "tar" "^6.1.2" + "which" "^2.0.2" + +"node-int64@^0.4.0": + "integrity" "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + "resolved" "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + "version" "0.4.0" + +"node-pty@0.10.1": + "integrity" "sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg==" + "resolved" "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz" + "version" "0.10.1" + dependencies: + "nan" "^2.14.0" + +"nodemailer@6.7.7": + "integrity" "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==" + "resolved" "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz" + "version" "6.7.7" + +"nopt@^5.0.0": + "integrity" "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==" + "resolved" "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "abbrev" "1" + +"normalize-path@^3.0.0": + "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + "version" "3.0.0" + +"npm-run-path@^4.0.0": + "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "path-key" "^3.0.0" + +"npm-run-path@^5.1.0": + "integrity" "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "path-key" "^4.0.0" + +"npmlog@^5.0.1": + "integrity" "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "are-we-there-yet" "^2.0.0" + "console-control-strings" "^1.1.0" + "gauge" "^3.0.0" + "set-blocking" "^2.0.0" + +"npmlog@^6.0.0": + "integrity" "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "are-we-there-yet" "^3.0.0" + "console-control-strings" "^1.1.0" + "gauge" "^4.0.3" + "set-blocking" "^2.0.0" + +"object-assign@^4.0.1", "object-assign@^4.1.1": + "integrity" "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + "version" "4.1.1" + +"object-inspect@^1.12.2": + "integrity" "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" + "version" "1.12.3" + +"once@^1.3.0", "once@^1.3.1", "once@^1.4.0": + "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" + "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "wrappy" "1" + +"onetime@^5.1.0": + "integrity" "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "mimic-fn" "^2.1.0" + +"onetime@^6.0.0": + "integrity" "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "mimic-fn" "^4.0.0" + +"optionator@^0.9.1": + "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" + "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + "version" "0.9.1" + dependencies: + "deep-is" "^0.1.3" + "fast-levenshtein" "^2.0.6" + "levn" "^0.4.1" + "prelude-ls" "^1.2.1" + "type-check" "^0.4.0" + "word-wrap" "^1.2.3" + +"ora@^5.4.1": + "integrity" "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==" + "resolved" "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + "version" "5.4.1" + dependencies: + "bl" "^4.1.0" + "chalk" "^4.1.0" + "cli-cursor" "^3.1.0" + "cli-spinners" "^2.5.0" + "is-interactive" "^1.0.0" + "is-unicode-supported" "^0.1.0" + "log-symbols" "^4.1.0" + "strip-ansi" "^6.0.0" + "wcwidth" "^1.0.1" + +"os-tmpdir@~1.0.2": + "integrity" "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + "resolved" "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + "version" "1.0.2" + +"otplib@11.0.1": + "integrity" "sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ==" + "resolved" "https://registry.npmjs.org/otplib/-/otplib-11.0.1.tgz" + "version" "11.0.1" + dependencies: + "thirty-two" "1.0.2" + +"p-limit@^3.0.2": + "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "yocto-queue" "^0.1.0" + +"p-locate@^5.0.0": + "integrity" "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "p-limit" "^3.0.2" + +"p-map@^1.1.1": + "integrity" "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" + "resolved" "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz" + "version" "1.2.0" + +"p-map@^4.0.0": + "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" + "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "aggregate-error" "^3.0.0" + +"parent-module@^1.0.0": + "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" + "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "callsites" "^3.0.0" + +"path-exists@^4.0.0": + "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + "version" "4.0.0" + +"path-is-absolute@^1.0.0": + "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "version" "1.0.1" + +"path-is-inside@^1.0.1": + "integrity" "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + "resolved" "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" + "version" "1.0.2" + +"path-key@^3.0.0", "path-key@^3.1.0": + "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + "version" "3.1.1" + +"path-key@^4.0.0": + "integrity" "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" + "version" "4.0.0" + +"picomatch@^2.0.4", "picomatch@^2.3.1": + "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + "version" "2.3.1" + +"pidtree@^0.6.0": + "integrity" "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==" + "resolved" "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz" + "version" "0.6.0" + +"pify@^2.0.0": + "integrity" "sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + "version" "2.3.0" + +"pify@^3.0.0": + "integrity" "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + "resolved" "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + "version" "3.0.0" + +"pinkie-promise@^2.0.0": + "integrity" "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==" + "resolved" "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "pinkie" "^2.0.0" + +"pinkie@^2.0.0": + "integrity" "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" + "resolved" "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + "version" "2.0.4" + +"prelude-ls@^1.2.1": + "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + "version" "1.2.1" + +"prettier@2.8.1": + "integrity" "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==" + "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz" + "version" "2.8.1" + +"promise-inflight@^1.0.1": + "integrity" "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + "resolved" "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + "version" "1.0.1" + +"promise-retry@^2.0.1": + "integrity" "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==" + "resolved" "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "err-code" "^2.0.2" + "retry" "^0.12.0" + +"pump@^3.0.0": + "integrity" "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==" + "resolved" "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "end-of-stream" "^1.1.0" + "once" "^1.3.1" + +"punycode@^2.1.0": + "integrity" "sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz" + "version" "2.2.0" + +"qrcode-generator@^1.4.4": + "integrity" "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==" + "resolved" "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz" + "version" "1.4.4" + +"queue-microtask@^1.2.2": + "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + "version" "1.2.3" + +"readable-stream@^3.4.0", "readable-stream@^3.6.0": + "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +"regexpp@^3.2.0": + "integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" + "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" + "version" "3.2.0" + +"resolve-from@^4.0.0": + "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + "version" "4.0.0" + +"restore-cursor@^3.1.0": + "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" + "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "onetime" "^5.1.0" + "signal-exit" "^3.0.2" + +"retry@^0.12.0": + "integrity" "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" + "resolved" "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + "version" "0.12.0" + +"reusify@^1.0.4": + "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + "version" "1.0.4" + +"rfdc@^1.3.0": + "integrity" "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + "resolved" "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" + "version" "1.3.0" + +"rimraf@^2.2.8": + "integrity" "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" + "version" "2.6.2" + dependencies: + "glob" "^7.0.5" + +"rimraf@^2.6.1": + "integrity" "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" + "version" "2.6.2" + dependencies: + "glob" "^7.0.5" + +"rimraf@^3.0.2": + "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "glob" "^7.1.3" + +"rimraf@~2.4.0": + "integrity" "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz" + "version" "2.4.5" + dependencies: + "glob" "^6.0.1" + +"rlogin@^1.0.0": + "integrity" "sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==" + "resolved" "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz" + "version" "1.0.0" + +"rsvp@^4.8.4": + "integrity" "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" + "resolved" "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz" + "version" "4.8.5" + +"run-async@^2.4.0": + "integrity" "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + "resolved" "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + "version" "2.4.1" + +"run-parallel@^1.1.9": + "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" + "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "queue-microtask" "^1.2.2" + +"rxjs@^7.5.5", "rxjs@^7.5.7": + "integrity" "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==" + "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz" + "version" "7.8.0" + dependencies: + "tslib" "^2.1.0" + +"safe-buffer@~5.1.0": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" + +"safe-json-stringify@~1": + "integrity" "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==" + "resolved" "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz" + "version" "1.2.0" + +"safer-buffer@^2.0.2", "safer-buffer@^2.1.0", "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", "safer-buffer@~2.1.0": + "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + "version" "2.1.2" + +"sane@5.0.1": + "integrity" "sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q==" + "resolved" "https://registry.npmjs.org/sane/-/sane-5.0.1.tgz" + "version" "5.0.1" dependencies: "@cnakazawa/watch" "^1.0.3" - anymatch "^3.1.1" - capture-exit "^2.0.0" - exec-sh "^0.3.4" - execa "^4.0.0" - fb-watchman "^2.0.1" - micromatch "^4.0.2" - minimist "^1.1.1" - walker "~1.0.5" - -sanitize-filename@^1.6.3: - version "1.6.3" - resolved "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz" - integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== - dependencies: - truncate-utf8-bytes "^1.0.0" - -semver@^6.0.0: - version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.3.5: - version "7.3.7" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - -serialize-error@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz" - integrity sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ== - dependencies: - type-fest "^0.20.2" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz" - integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.6.2: - version "2.7.0" - resolved "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz" - integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - -split2@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz" - integrity sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ== - -sqlite3-trans@1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz" - integrity sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg== - dependencies: - lodash "^4.17.15" - -sqlite3@5.0.11: - version "5.0.11" - resolved "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz" - integrity sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA== + "anymatch" "^3.1.1" + "capture-exit" "^2.0.0" + "exec-sh" "^0.3.4" + "execa" "^4.0.0" + "fb-watchman" "^2.0.1" + "micromatch" "^4.0.2" + "minimist" "^1.1.1" + "walker" "~1.0.5" + +"sanitize-filename@^1.6.3": + "integrity" "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==" + "resolved" "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz" + "version" "1.6.3" + dependencies: + "truncate-utf8-bytes" "^1.0.0" + +"semver@^6.0.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^7.3.5": + "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + "version" "7.3.7" + dependencies: + "lru-cache" "^6.0.0" + +"serialize-error@^8.1.0": + "integrity" "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==" + "resolved" "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz" + "version" "8.1.0" + dependencies: + "type-fest" "^0.20.2" + +"set-blocking@^2.0.0": + "integrity" "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + "version" "2.0.0" + +"shebang-command@^2.0.0": + "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "shebang-regex" "^3.0.0" + +"shebang-regex@^3.0.0": + "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + "version" "3.0.0" + +"signal-exit@^3.0.0", "signal-exit@^3.0.2", "signal-exit@^3.0.7": + "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + "version" "3.0.7" + +"slice-ansi@^3.0.0": + "integrity" "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "astral-regex" "^2.0.0" + "is-fullwidth-code-point" "^3.0.0" + +"slice-ansi@^4.0.0": + "integrity" "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "astral-regex" "^2.0.0" + "is-fullwidth-code-point" "^3.0.0" + +"slice-ansi@^5.0.0": + "integrity" "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "ansi-styles" "^6.0.0" + "is-fullwidth-code-point" "^4.0.0" + +"smart-buffer@^4.2.0": + "integrity" "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + "resolved" "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + "version" "4.2.0" + +"socks-proxy-agent@^6.0.0": + "integrity" "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==" + "resolved" "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz" + "version" "6.2.1" + dependencies: + "agent-base" "^6.0.2" + "debug" "^4.3.3" + "socks" "^2.6.2" + +"socks@^2.6.2": + "integrity" "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==" + "resolved" "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz" + "version" "2.7.0" + dependencies: + "ip" "^2.0.0" + "smart-buffer" "^4.2.0" + +"split2@^4.1.0": + "integrity" "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" + "resolved" "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz" + "version" "4.1.0" + +"sqlite3-trans@1.3.0": + "integrity" "sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg==" + "resolved" "https://registry.npmjs.org/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "lodash" "^4.17.15" + +"sqlite3@5.0.11": + "integrity" "sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA==" + "resolved" "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz" + "version" "5.0.11" dependencies: "@mapbox/node-pre-gyp" "^1.0.0" - node-addon-api "^4.2.0" - tar "^6.1.11" + "node-addon-api" "^4.2.0" + "tar" "^6.1.11" optionalDependencies: - node-gyp "8.x" + "node-gyp" "8.x" -ssh2@1.11.0: - version "1.11.0" - resolved "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz" - integrity sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw== +"ssh2@1.11.0": + "integrity" "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==" + "resolved" "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz" + "version" "1.11.0" dependencies: - asn1 "^0.2.4" - bcrypt-pbkdf "^1.0.2" + "asn1" "^0.2.4" + "bcrypt-pbkdf" "^1.0.2" optionalDependencies: - cpu-features "~0.0.4" - nan "^2.16.0" - -sshpk@^1.14.1: - version "1.17.0" - resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string_decoder@^1.1.1: - version "1.2.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz" - integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== - dependencies: - has-flag "^4.0.0" - -systeminformation@5.12.3: - version "5.12.3" - resolved "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.3.tgz" - integrity sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A== - -tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: - version "6.1.11" - resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -telnet-socket@0.2.4: - version "0.2.4" - resolved "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz" - integrity sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ== - dependencies: - binary-parser "1.6.2" - buffers "github:NuSkooler/node-buffers" - -temptmp@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/temptmp/-/temptmp-1.1.0.tgz" - integrity sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ== - dependencies: - del "^3.0.0" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - -thirty-two@1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz" - integrity "sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - integrity "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.x: - version "1.0.5" - resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -truncate-utf8-bytes@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz" - integrity "sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==" - dependencies: - utf8-byte-length "^1.0.1" - -tslib@^2.1.0: - version "2.3.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" - integrity "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz" - integrity sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw== - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -utf8-byte-length@^1.0.1: - version "1.0.4" - resolved "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz" - integrity "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - -uuid-parse@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz" - integrity sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A== - -uuid@8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -walker@~1.0.5: - version "1.0.7" - resolved "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz" - integrity "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==" - dependencies: - makeerror "1.0.x" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" - integrity "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==" - dependencies: - defaults "^1.0.3" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.2, wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - -ws@7.5.9: - version "7.5.9" - resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yazl@^2.5.1: - version "2.5.1" - resolved "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz" - integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw== - dependencies: - buffer-crc32 "~0.2.3" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + "cpu-features" "~0.0.4" + "nan" "^2.16.0" + +"sshpk@^1.14.1": + "integrity" "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==" + "resolved" "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" + "version" "1.17.0" + dependencies: + "asn1" "~0.2.3" + "assert-plus" "^1.0.0" + "bcrypt-pbkdf" "^1.0.0" + "dashdash" "^1.12.0" + "ecc-jsbn" "~0.1.1" + "getpass" "^0.1.1" + "jsbn" "~0.1.0" + "safer-buffer" "^2.0.2" + "tweetnacl" "~0.14.0" + +"ssri@^8.0.0", "ssri@^8.0.1": + "integrity" "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==" + "resolved" "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" + "version" "8.0.1" + dependencies: + "minipass" "^3.1.1" + +"string_decoder@^1.1.1": + "integrity" "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "safe-buffer" "~5.1.0" + +"string-argv@^0.3.1": + "integrity" "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==" + "resolved" "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" + "version" "0.3.1" + +"string-width@^1.0.2 || 2 || 3 || 4", "string-width@^4.1.0", "string-width@^4.2.0", "string-width@^4.2.3": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" + +"string-width@^5.0.0": + "integrity" "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "eastasianwidth" "^0.2.0" + "emoji-regex" "^9.2.2" + "strip-ansi" "^7.0.1" + +"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": + "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "ansi-regex" "^5.0.1" + +"strip-ansi@^7.0.1": + "integrity" "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "ansi-regex" "^6.0.1" + +"strip-final-newline@^2.0.0": + "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + "version" "2.0.0" + +"strip-final-newline@^3.0.0": + "integrity" "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" + "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" + "version" "3.0.0" + +"strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1": + "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + "version" "3.1.1" + +"supports-color@^7.1.0": + "integrity" "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz" + "version" "7.1.0" + dependencies: + "has-flag" "^4.0.0" + +"systeminformation@5.12.3": + "integrity" "sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A==" + "resolved" "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.3.tgz" + "version" "5.12.3" + +"tar@^6.0.2", "tar@^6.1.11", "tar@^6.1.2": + "integrity" "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==" + "resolved" "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" + "version" "6.1.11" + dependencies: + "chownr" "^2.0.0" + "fs-minipass" "^2.0.0" + "minipass" "^3.0.0" + "minizlib" "^2.1.1" + "mkdirp" "^1.0.3" + "yallist" "^4.0.0" + +"telnet-socket@0.2.4": + "integrity" "sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ==" + "resolved" "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz" + "version" "0.2.4" + dependencies: + "binary-parser" "1.6.2" + "buffers" "github:NuSkooler/node-buffers" + +"temptmp@^1.1.0": + "integrity" "sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ==" + "resolved" "https://registry.npmjs.org/temptmp/-/temptmp-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "del" "^3.0.0" + +"text-table@^0.2.0": + "integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + "version" "0.2.0" + +"thirty-two@1.0.2": + "integrity" "sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==" + "resolved" "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz" + "version" "1.0.2" + +"through@^2.3.6", "through@^2.3.8": + "integrity" "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + "version" "2.3.8" + +"tmp@^0.0.33": + "integrity" "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==" + "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + "version" "0.0.33" + dependencies: + "os-tmpdir" "~1.0.2" + +"tmpl@1.0.x": + "integrity" "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + "resolved" "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" + "version" "1.0.5" + +"to-regex-range@^5.0.1": + "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "is-number" "^7.0.0" + +"tr46@~0.0.3": + "integrity" "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + "version" "0.0.3" + +"truncate-utf8-bytes@^1.0.0": + "integrity" "sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==" + "resolved" "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "utf8-byte-length" "^1.0.1" + +"tslib@^2.1.0": + "integrity" "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" + "version" "2.3.1" + +"tweetnacl@^0.14.3", "tweetnacl@~0.14.0": + "integrity" "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + "resolved" "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + "version" "0.14.5" + +"type-check@^0.4.0", "type-check@~0.4.0": + "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" + "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + "version" "0.4.0" + dependencies: + "prelude-ls" "^1.2.1" + +"type-fest@^0.20.2": + "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + "version" "0.20.2" + +"type-fest@^0.21.3": + "integrity" "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + "version" "0.21.3" + +"unique-filename@^1.1.1": + "integrity" "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==" + "resolved" "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "unique-slug" "^2.0.0" + +"unique-slug@^2.0.0": + "integrity" "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==" + "resolved" "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "imurmurhash" "^0.1.4" + +"universalify@^1.0.0": + "integrity" "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz" + "version" "1.0.0" + +"universalify@^2.0.0": + "integrity" "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + "version" "2.0.0" + +"uri-js@^4.2.2": + "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" + "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + "version" "4.4.1" + dependencies: + "punycode" "^2.1.0" + +"utf8-byte-length@^1.0.1": + "integrity" "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" + "resolved" "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz" + "version" "1.0.4" + +"util-deprecate@^1.0.1": + "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "version" "1.0.2" + +"uuid-parse@1.1.0": + "integrity" "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==" + "resolved" "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz" + "version" "1.1.0" + +"uuid@8.3.2": + "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + "version" "8.3.2" + +"verror@1.10.0": + "integrity" "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==" + "resolved" "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" + "version" "1.10.0" + dependencies: + "assert-plus" "^1.0.0" + "core-util-is" "1.0.2" + "extsprintf" "^1.2.0" + +"walker@~1.0.5": + "integrity" "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==" + "resolved" "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz" + "version" "1.0.7" + dependencies: + "makeerror" "1.0.x" + +"wcwidth@^1.0.1": + "integrity" "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==" + "resolved" "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "defaults" "^1.0.3" + +"webidl-conversions@^3.0.0": + "integrity" "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + "version" "3.0.1" + +"whatwg-url@^5.0.0": + "integrity" "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==" + "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "tr46" "~0.0.3" + "webidl-conversions" "^3.0.0" + +"which@^2.0.1", "which@^2.0.2": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + +"wide-align@^1.1.2", "wide-align@^1.1.5": + "integrity" "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==" + "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "string-width" "^1.0.2 || 2 || 3 || 4" + +"word-wrap@^1.2.3": + "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + "version" "1.2.3" + +"wrap-ansi@^6.2.0": + "integrity" "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + "version" "6.2.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrap-ansi@^7.0.0": + "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrappy@1": + "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "version" "1.0.2" + +"ws@7.5.9": + "integrity" "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" + "resolved" "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" + "version" "7.5.9" + +"yallist@^4.0.0": + "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + "version" "4.0.0" + +"yaml@^2.1.3": + "integrity" "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==" + "resolved" "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz" + "version" "2.2.1" + +"yazl@^2.5.1": + "integrity" "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==" + "resolved" "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz" + "version" "2.5.1" + dependencies: + "buffer-crc32" "~0.2.3" + +"yocto-queue@^0.1.0": + "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + "version" "0.1.0" From 02eeee95acc6c8603646ff99374c14fe9b97668d Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Fri, 13 Jan 2023 09:23:03 -0600 Subject: [PATCH 058/233] Added json to list of files to update --- .eslintrc.json | 2 +- .lintstagedrc.json | 6 +-- package-lock.json | 110 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + yarn.lock | 44 ++++++++++++++++++ 5 files changed, 158 insertions(+), 5 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index cafffef44..005148ec7 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -3,7 +3,7 @@ "es6": true, "node": true }, - "extends": ["eslint:recommended"], + "extends": ["eslint:recommended", "plugin:json/recommended"], "rules": { "indent": [ "error", diff --git a/.lintstagedrc.json b/.lintstagedrc.json index d76d42584..5694b85a3 100644 --- a/.lintstagedrc.json +++ b/.lintstagedrc.json @@ -1,6 +1,4 @@ { - "*.js": [ - "npx eslint --fix", - "npx prettier --write" - ] + "*.js": ["npx eslint --fix", "npx prettier --write"], + "*.json": ["npx eslint --fix", "npx prettier --write"] } diff --git a/package-lock.json b/package-lock.json index 8ecddc252..2af9d982a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -57,6 +57,7 @@ "devDependencies": { "eslint": "8.31.0", "eslint-config-prettier": "^8.5.0", + "eslint-plugin-json": "^3.1.0", "husky": "^8.0.0", "lint-staged": "^13.1.0", "prettier": "2.8.1" @@ -1268,6 +1269,19 @@ "eslint": ">=7.0.0" } }, + "node_modules/eslint-plugin-json": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz", + "integrity": "sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21", + "vscode-json-languageservice": "^4.1.6" + }, + "engines": { + "node": ">=12.0" + } + }, "node_modules/eslint-scope": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", @@ -2121,6 +2135,12 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, "node_modules/jsonfile": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", @@ -4069,6 +4089,43 @@ "extsprintf": "^1.2.0" } }, + "node_modules/vscode-json-languageservice": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz", + "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-languageserver-textdocument": "^1.0.3", + "vscode-languageserver-types": "^3.16.0", + "vscode-nls": "^5.0.0", + "vscode-uri": "^3.0.3" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", + "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==", + "dev": true + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz", + "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==", + "dev": true + }, + "node_modules/vscode-nls": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", + "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==", + "dev": true + }, + "node_modules/vscode-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", + "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==", + "dev": true + }, "node_modules/walker": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", @@ -5098,6 +5155,16 @@ "dev": true, "requires": {} }, + "eslint-plugin-json": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz", + "integrity": "sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==", + "dev": true, + "requires": { + "lodash": "^4.17.21", + "vscode-json-languageservice": "^4.1.6" + } + }, "eslint-scope": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", @@ -5736,6 +5803,12 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, "jsonfile": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", @@ -7133,6 +7206,43 @@ "extsprintf": "^1.2.0" } }, + "vscode-json-languageservice": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz", + "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==", + "dev": true, + "requires": { + "jsonc-parser": "^3.0.0", + "vscode-languageserver-textdocument": "^1.0.3", + "vscode-languageserver-types": "^3.16.0", + "vscode-nls": "^5.0.0", + "vscode-uri": "^3.0.3" + } + }, + "vscode-languageserver-textdocument": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", + "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==", + "dev": true + }, + "vscode-languageserver-types": { + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz", + "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==", + "dev": true + }, + "vscode-nls": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", + "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==", + "dev": true + }, + "vscode-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", + "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==", + "dev": true + }, "walker": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", diff --git a/package.json b/package.json index 382c9f3bb..7a5e6218d 100644 --- a/package.json +++ b/package.json @@ -73,6 +73,7 @@ "devDependencies": { "eslint": "8.31.0", "eslint-config-prettier": "^8.5.0", + "eslint-plugin-json": "^3.1.0", "husky": "^8.0.0", "lint-staged": "^13.1.0", "prettier": "2.8.1" diff --git a/yarn.lock b/yarn.lock index a6fedae14..4844bb55f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -677,6 +677,14 @@ "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" "version" "8.5.0" +"eslint-plugin-json@^3.1.0": + "integrity" "sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==" + "resolved" "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "lodash" "^4.17.21" + "vscode-json-languageservice" "^4.1.6" + "eslint-scope@^7.1.1": "integrity" "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==" "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" @@ -1347,6 +1355,11 @@ "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" "version" "1.0.1" +"jsonc-parser@^3.0.0": + "integrity" "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + "resolved" "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" + "version" "3.2.0" + "jsonfile@^6.0.1": "integrity" "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==" "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz" @@ -2488,6 +2501,37 @@ "core-util-is" "1.0.2" "extsprintf" "^1.2.0" +"vscode-json-languageservice@^4.1.6": + "integrity" "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==" + "resolved" "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "jsonc-parser" "^3.0.0" + "vscode-languageserver-textdocument" "^1.0.3" + "vscode-languageserver-types" "^3.16.0" + "vscode-nls" "^5.0.0" + "vscode-uri" "^3.0.3" + +"vscode-languageserver-textdocument@^1.0.3": + "integrity" "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==" + "resolved" "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz" + "version" "1.0.8" + +"vscode-languageserver-types@^3.16.0": + "integrity" "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==" + "resolved" "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz" + "version" "3.17.2" + +"vscode-nls@^5.0.0": + "integrity" "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==" + "resolved" "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz" + "version" "5.2.0" + +"vscode-uri@^3.0.3": + "integrity" "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==" + "resolved" "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz" + "version" "3.0.7" + "walker@~1.0.5": "integrity" "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==" "resolved" "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz" From 9ad0cabd040683b8d7d7f395fdbf525d8bcb668b Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 13 Jan 2023 09:52:21 -0700 Subject: [PATCH 059/233] Test hook --- core/activitypub/activity.js | 3 +- core/activitypub/actor.js | 6 +- .../content/web_handlers/activitypub.js | 31 +- core/webfinger.js | 5 +- yarn.lock | 5084 ++++++++--------- 5 files changed, 2547 insertions(+), 2582 deletions(-) diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index a7a383f08..51aa64f5d 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -41,7 +41,7 @@ module.exports = class Activity { ]; } - static fromJson(json) { + static fromJsonString(json) { const parsed = JSON.parse(json); return new Activity(parsed); } @@ -67,6 +67,7 @@ module.exports = class Activity { id = id || Activity._makeFullId(webServer, 'accept'); return new Activity({ + id, type: 'Accept', actor: localActor, object: followRequest, // previous request Activity diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index f04ebb897..30af36f5f 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -124,7 +124,7 @@ module.exports = class Actor { https.get(url, { headers }, res => { if (res.statusCode !== 200) { - return cb(Errors.Invalid(`Bad HTTP status code: ${req.statusCode}`)); + return cb(Errors.Invalid(`Bad HTTP status code: ${res.statusCode}`)); } const contentType = res.headers['content-type']; @@ -144,7 +144,7 @@ module.exports = class Actor { res.on('end', () => { let actor; try { - actor = Actor.fromJson(body); + actor = Actor.fromJsonString(body); } catch (e) { return cb(e); } @@ -187,7 +187,7 @@ module.exports = class Actor { }); } - static fromJson(json) { + static fromJsonString(json) { const parsed = JSON.parse(json); return new Actor(parsed); } diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 2eba9025c..f77290d28 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -4,14 +4,11 @@ const { getUserProfileTemplatedBody, DefaultProfileTemplate, accountFromSelfUrl, - ActivityStreamsContext, - makeUserUrl, } = require('../../../activitypub/util'); const Config = require('../../../config').get; const Activity = require('../../../activitypub/activity'); const ActivityPubSettings = require('../../../activitypub/settings'); const Actor = require('../../../activitypub/actor'); -const { getOutboxEntries } = require('../../../activitypub/db'); // deps const _ = require('lodash'); @@ -40,7 +37,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { this.webServer.addRoute({ method: 'GET', - path: /^\/_enig\/ap\/users\/[^\/]+$/, + path: /^\/_enig\/ap\/users\/[^/]+$/, handler: this._selfUrlRequestHandler.bind(this), }); @@ -120,7 +117,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { req.on('end', () => { let activity; try { - activity = Activity.fromJson(Buffer.concat(body).toString()); + activity = Activity.fromJsonString(Buffer.concat(body).toString()); } catch (e) { this.log.error( { error: e.message, url: req.url, method: req.method }, @@ -180,27 +177,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.resourceNotFound(resp); } - // // we return a OrderedCollection response if this request - // // is not explicitly for a page of the collection - // const wantPage = url.searchParams.get('page') === 'true'; - // if (!wantPage) { - // const outboxUrl = makeUserUrl(this.webServer, user, '/ap/users/') + '/outbox'; - // const body = JSON.stringify({ - // '@context': ActivityStreamsContext, - // id: outboxUrl, - // type: 'OrderedCollection', - // first: `${outboxUrl}?page=true`, - // }); - - // const headers = { - // 'Content-Type': 'application/activity+json', - // 'Content-Length': body.length, - // }; - - // resp.writeHead(200, headers); - // return resp.end(body); - // } - Activity.fromOutboxEntries(user, this.webServer, (err, activity) => { if (err) { // :TODO: LOG ME @@ -288,7 +264,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { this.log.warn( { actor: activity.actor, - keyId, + keyId: signature.keyId, signature: req.headers['signature'] || '', }, 'Invalid signature supplied for Follow request' @@ -364,6 +340,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { _authorizeInteractionHandler(req, resp) { console.log(req); + console.log(resp); } _selfAsActorHandler(user, req, resp) { diff --git a/core/webfinger.js b/core/webfinger.js index 299035a31..bb3b497b2 100644 --- a/core/webfinger.js +++ b/core/webfinger.js @@ -4,7 +4,6 @@ const Message = require('./message'); const { getJson } = require('./http_util'); // deps -const https = require('https'); exports.queryWebFinger = queryWebFinger; @@ -15,12 +14,12 @@ function queryWebFinger(account, cb) { addrInfo.flavor !== Message.AddressFlavor.ActivityPub && addrInfo.flavor !== Message.AddressFlavor.Email ) { - return cb(Errors.Invalid(`Cannot WebFinger "${accountName}"; Missing domain`)); + return cb(Errors.Invalid(`Cannot WebFinger "${account.remote}"; Missing domain`)); } const domain = addrInfo.remote.slice(addrInfo.remote.lastIndexOf('@') + 1); if (!domain) { - return cb(Errors.Invalid(`Cannot WebFinger "${accountName}"; Missing domain`)); + return cb(Errors.Invalid(`Cannot WebFinger "${account.remote}"; Missing domain`)); } const resource = encodeURIComponent(`acct:${account.slice(1)}`); // we need drop the initial '@' prefix diff --git a/yarn.lock b/yarn.lock index 4844bb55f..75869d9d6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,2627 +3,2615 @@ "@breejs/later@4.1.0": - "integrity" "sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA==" - "resolved" "https://registry.npmjs.org/@breejs/later/-/later-4.1.0.tgz" - "version" "4.1.0" + version "4.1.0" + resolved "https://registry.npmjs.org/@breejs/later/-/later-4.1.0.tgz" + integrity sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA== "@cnakazawa/watch@^1.0.3": - "integrity" "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==" - "resolved" "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz" - "version" "1.0.3" + version "1.0.3" + resolved "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz" + integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== dependencies: - "exec-sh" "^0.3.2" - "minimist" "^1.2.0" + exec-sh "^0.3.2" + minimist "^1.2.0" "@eslint/eslintrc@^1.4.1": - "integrity" "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==" - "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz" - "version" "1.4.1" - dependencies: - "ajv" "^6.12.4" - "debug" "^4.3.2" - "espree" "^9.4.0" - "globals" "^13.19.0" - "ignore" "^5.2.0" - "import-fresh" "^3.2.1" - "js-yaml" "^4.1.0" - "minimatch" "^3.1.2" - "strip-json-comments" "^3.1.1" + version "1.4.1" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz" + integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" "@gar/promisify@^1.0.1": - "integrity" "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" - "resolved" "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" - "version" "1.1.3" + version "1.1.3" + resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== "@humanwhocodes/config-array@^0.11.8": - "integrity" "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz" - "version" "0.11.8" + version "0.11.8" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz" + integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== dependencies: "@humanwhocodes/object-schema" "^1.2.1" - "debug" "^4.1.1" - "minimatch" "^3.0.5" + debug "^4.1.1" + minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": - "integrity" "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" - "version" "1.0.1" + version "1.0.1" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^1.2.1": - "integrity" "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" - "version" "1.2.1" + version "1.2.1" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@mapbox/node-pre-gyp@^1.0.0": - "integrity" "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==" - "resolved" "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz" - "version" "1.0.9" - dependencies: - "detect-libc" "^2.0.0" - "https-proxy-agent" "^5.0.0" - "make-dir" "^3.1.0" - "node-fetch" "^2.6.7" - "nopt" "^5.0.0" - "npmlog" "^5.0.1" - "rimraf" "^3.0.2" - "semver" "^7.3.5" - "tar" "^6.1.11" + version "1.0.9" + resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz" + integrity sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw== + dependencies: + detect-libc "^2.0.0" + https-proxy-agent "^5.0.0" + make-dir "^3.1.0" + node-fetch "^2.6.7" + nopt "^5.0.0" + npmlog "^5.0.1" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.11" "@nodelib/fs.scandir@2.1.5": - "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - "version" "2.1.5" + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" - "run-parallel" "^1.1.9" + run-parallel "^1.1.9" "@nodelib/fs.stat@2.0.5": - "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - "version" "2.0.5" + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.8": - "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - "version" "1.2.8" + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" - "fastq" "^1.6.0" + fastq "^1.6.0" "@npmcli/fs@^1.0.0": - "integrity" "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==" - "resolved" "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" - "version" "1.1.1" + version "1.1.1" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== dependencies: "@gar/promisify" "^1.0.1" - "semver" "^7.3.5" + semver "^7.3.5" "@npmcli/move-file@^1.0.1": - "integrity" "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==" - "resolved" "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" - "version" "1.1.2" + version "1.1.2" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== dependencies: - "mkdirp" "^1.0.4" - "rimraf" "^3.0.2" + mkdirp "^1.0.4" + rimraf "^3.0.2" "@tootallnate/once@1": - "integrity" "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" - "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" - "version" "1.1.2" + version "1.1.2" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== "@types/color-name@^1.1.1": - "integrity" "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - "resolved" "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz" - "version" "1.1.1" - -"abbrev@1": - "integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - "version" "1.1.1" - -"acorn-jsx@^5.3.2": - "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" - "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - "version" "5.3.2" - -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8.8.0": - "integrity" "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" - "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" - "version" "8.8.1" - -"agent-base@^6.0.2", "agent-base@6": - "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==" - "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "debug" "4" - -"agentkeepalive@^4.1.3": - "integrity" "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==" - "resolved" "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "debug" "^4.1.0" - "depd" "^1.1.2" - "humanize-ms" "^1.2.1" - -"aggregate-error@^3.0.0": - "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" - "resolved" "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "clean-stack" "^2.0.0" - "indent-string" "^4.0.0" - -"ajv@^6.10.0", "ajv@^6.12.4": - "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" - "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - "version" "6.12.6" - dependencies: - "fast-deep-equal" "^3.1.1" - "fast-json-stable-stringify" "^2.0.0" - "json-schema-traverse" "^0.4.1" - "uri-js" "^4.2.2" - -"ansi-escapes@^4.2.1", "ansi-escapes@^4.3.0": - "integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==" - "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - "version" "4.3.2" - dependencies: - "type-fest" "^0.21.3" - -"ansi-regex@^5.0.1": - "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - "version" "5.0.1" - -"ansi-regex@^6.0.1": - "integrity" "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - "version" "6.0.1" - -"ansi-styles@^4.0.0", "ansi-styles@^4.1.0": - "integrity" "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz" - "version" "4.2.1" + version "1.1.1" + resolved "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +abbrev@1: + version "1.1.1" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.8.0: + version "8.8.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.1.3: + version "4.2.1" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" + integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== + dependencies: + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== dependencies: "@types/color-name" "^1.1.1" - "color-convert" "^2.0.1" + color-convert "^2.0.1" -"ansi-styles@^6.0.0": - "integrity" "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" - "version" "6.2.1" +ansi-styles@^6.0.0: + version "6.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== -"anymatch@^3.1.1": - "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" - "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" - "version" "3.1.2" +anymatch@^3.1.1: + version "3.1.2" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: - "normalize-path" "^3.0.0" - "picomatch" "^2.0.4" + normalize-path "^3.0.0" + picomatch "^2.0.4" "aproba@^1.0.3 || ^2.0.0": - "integrity" "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - "resolved" "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" - "version" "2.0.0" - -"are-we-there-yet@^2.0.0": - "integrity" "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==" - "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "delegates" "^1.0.0" - "readable-stream" "^3.6.0" - -"are-we-there-yet@^3.0.0": - "integrity" "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==" - "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "delegates" "^1.0.0" - "readable-stream" "^3.6.0" - -"argparse@^2.0.1": - "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - "version" "2.0.1" - -"array-union@^1.0.1": - "integrity" "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==" - "resolved" "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "array-uniq" "^1.0.1" - -"array-uniq@^1.0.1": - "integrity" "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" - "resolved" "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" - "version" "1.0.3" - -"asn1@^0.2.4", "asn1@~0.2.3": - "integrity" "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==" - "resolved" "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" - "version" "0.2.6" - dependencies: - "safer-buffer" "~2.1.0" - -"assert-plus@^1.0.0", "assert-plus@1.0.0": - "integrity" "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" - "resolved" "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" - "version" "1.0.0" - -"astral-regex@^2.0.0": - "integrity" "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" - "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" - "version" "2.0.0" - -"async@3.2.4": - "integrity" "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - "resolved" "https://registry.npmjs.org/async/-/async-3.2.4.tgz" - "version" "3.2.4" - -"balanced-match@^1.0.0": - "integrity" "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" - "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" - "version" "1.0.0" - -"base64-js@^1.3.1": - "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - "version" "1.5.1" - -"bcrypt-pbkdf@^1.0.0", "bcrypt-pbkdf@^1.0.2": - "integrity" "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==" - "resolved" "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "tweetnacl" "^0.14.3" - -"binary-parser@1.6.2": - "integrity" "sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ==" - "resolved" "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz" - "version" "1.6.2" - -"binary-parser@2.1.0": - "integrity" "sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ==" - "resolved" "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz" - "version" "2.1.0" - -"bl@^4.1.0": - "integrity" "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==" - "resolved" "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "buffer" "^5.5.0" - "inherits" "^2.0.4" - "readable-stream" "^3.4.0" - -"brace-expansion@^1.1.7": - "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" - "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - "version" "1.1.11" - dependencies: - "balanced-match" "^1.0.0" - "concat-map" "0.0.1" + version "2.0.0" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" + integrity "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + integrity "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" + +asn1@^0.2.4, asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async@3.2.4: + version "3.2.4" + resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + integrity "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" + integrity "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==" + dependencies: + tweetnacl "^0.14.3" + +binary-parser@1.6.2: + version "1.6.2" + resolved "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz" + integrity sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ== + +binary-parser@2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz" + integrity sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ== + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" -"brace-expansion@^2.0.1": - "integrity" "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==" - "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - "version" "2.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: - "balanced-match" "^1.0.0" - -"braces@^3.0.2": - "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" - "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - "version" "3.0.2" + balanced-match "^1.0.0" + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: - "fill-range" "^7.0.1" + fill-range "^7.0.1" -"bser@2.1.1": - "integrity" "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==" - "resolved" "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "node-int64" "^0.4.0" +bser@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" -"buffer-crc32@~0.2.3": - "integrity" "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" - "resolved" "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" - "version" "0.2.13" +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" + integrity "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" -"buffer@^5.5.0": - "integrity" "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" - "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - "version" "5.7.1" - dependencies: - "base64-js" "^1.3.1" - "ieee754" "^1.1.13" +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" "buffers@github:NuSkooler/node-buffers": - "resolved" "git+ssh://git@github.com/NuSkooler/node-buffers.git#cd0855598f7048b02f0a51c90e22573973e9e2c2" - "version" "0.1.1" - -"buildcheck@0.0.3": - "integrity" "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==" - "resolved" "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz" - "version" "0.0.3" - -"bunyan@1.8.15": - "integrity" "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==" - "resolved" "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz" - "version" "1.8.15" + version "0.1.1" + resolved "git+ssh://git@github.com/NuSkooler/node-buffers.git#cd0855598f7048b02f0a51c90e22573973e9e2c2" + +buildcheck@0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz" + integrity sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA== + +bunyan@1.8.15: + version "1.8.15" + resolved "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz" + integrity sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig== optionalDependencies: - "dtrace-provider" "~0.8" - "moment" "^2.19.3" - "mv" "~2" - "safe-json-stringify" "~1" + dtrace-provider "~0.8" + moment "^2.19.3" + mv "~2" + safe-json-stringify "~1" -"cacache@^15.2.0": - "integrity" "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==" - "resolved" "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" - "version" "15.3.0" +cacache@^15.2.0: + version "15.3.0" + resolved "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== dependencies: "@npmcli/fs" "^1.0.0" "@npmcli/move-file" "^1.0.1" - "chownr" "^2.0.0" - "fs-minipass" "^2.0.0" - "glob" "^7.1.4" - "infer-owner" "^1.0.4" - "lru-cache" "^6.0.0" - "minipass" "^3.1.1" - "minipass-collect" "^1.0.2" - "minipass-flush" "^1.0.5" - "minipass-pipeline" "^1.2.2" - "mkdirp" "^1.0.3" - "p-map" "^4.0.0" - "promise-inflight" "^1.0.1" - "rimraf" "^3.0.2" - "ssri" "^8.0.1" - "tar" "^6.0.2" - "unique-filename" "^1.1.1" - -"callsites@^3.0.0": - "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - "version" "3.1.0" - -"capture-exit@^2.0.0": - "integrity" "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==" - "resolved" "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "rsvp" "^4.8.4" - -"chalk@^4.0.0", "chalk@^4.1.0", "chalk@^4.1.1": - "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - "version" "4.1.2" - dependencies: - "ansi-styles" "^4.1.0" - "supports-color" "^7.1.0" - -"chardet@^0.7.0": - "integrity" "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - "resolved" "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" - "version" "0.7.0" - -"chownr@^2.0.0": - "integrity" "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" - "resolved" "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" - "version" "2.0.0" - -"clean-stack@^2.0.0": - "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - "version" "2.2.0" - -"cli-cursor@^3.1.0": - "integrity" "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" - "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "restore-cursor" "^3.1.0" - -"cli-spinners@^2.5.0": - "integrity" "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" - "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" - "version" "2.6.1" - -"cli-truncate@^2.1.0": - "integrity" "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==" - "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "slice-ansi" "^3.0.0" - "string-width" "^4.2.0" - -"cli-truncate@^3.1.0": - "integrity" "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==" - "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "slice-ansi" "^5.0.0" - "string-width" "^5.0.0" - -"cli-width@^3.0.0": - "integrity" "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" - "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" - "version" "3.0.0" - -"clone@^1.0.2": - "integrity" "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" - "resolved" "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" - "version" "1.0.4" - -"coffee-script@^1.12.4": - "integrity" "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==" - "resolved" "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz" - "version" "1.12.7" - -"color-convert@^2.0.1": - "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "color-name" "~1.1.4" - -"color-name@~1.1.4": - "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - "version" "1.1.4" - -"color-support@^1.1.2", "color-support@^1.1.3": - "integrity" "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" - "resolved" "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" - "version" "1.1.3" - -"colorette@^2.0.19": - "integrity" "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" - "resolved" "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" - "version" "2.0.19" - -"commander@^9.4.1": - "integrity" "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==" - "resolved" "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz" - "version" "9.5.0" - -"concat-map@0.0.1": - "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - "version" "0.0.1" - -"console-control-strings@^1.0.0", "console-control-strings@^1.1.0": - "integrity" "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" - "resolved" "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" - "version" "1.1.0" - -"core-util-is@1.0.2": - "integrity" "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - "version" "1.0.2" - -"cpu-features@~0.0.4": - "integrity" "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==" - "resolved" "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz" - "version" "0.0.4" - dependencies: - "buildcheck" "0.0.3" - "nan" "^2.15.0" - -"cross-spawn@^7.0.0", "cross-spawn@^7.0.2", "cross-spawn@^7.0.3": - "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" - "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - "version" "7.0.3" - dependencies: - "path-key" "^3.1.0" - "shebang-command" "^2.0.0" - "which" "^2.0.1" - -"dashdash@^1.12.0": - "integrity" "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==" - "resolved" "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" - "version" "1.14.1" - dependencies: - "assert-plus" "^1.0.0" - -"debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.2", "debug@^4.3.3", "debug@^4.3.4", "debug@4": - "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" - "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - "version" "4.3.4" - dependencies: - "ms" "2.1.2" - -"deep-extend@^0.5.1": - "integrity" "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" - "resolved" "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz" - "version" "0.5.1" - -"deep-is@^0.1.3": - "integrity" "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==" - "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" - "version" "0.1.3" - -"deepdash@^5.3.9": - "integrity" "sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg==" - "resolved" "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz" - "version" "5.3.9" - dependencies: - "lodash" "^4.17.21" - "lodash-es" "^4.17.21" - -"defaults@^1.0.3": - "integrity" "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==" - "resolved" "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "clone" "^1.0.2" - -"del@^3.0.0": - "integrity" "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==" - "resolved" "https://registry.npmjs.org/del/-/del-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "globby" "^6.1.0" - "is-path-cwd" "^1.0.0" - "is-path-in-cwd" "^1.0.0" - "p-map" "^1.1.1" - "pify" "^3.0.0" - "rimraf" "^2.2.8" - -"delegates@^1.0.0": - "integrity" "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - "resolved" "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" - "version" "1.0.0" - -"denque@^2.0.1": - "integrity" "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" - "resolved" "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz" - "version" "2.1.0" - -"depd@^1.1.2": - "integrity" "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" - "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - "version" "1.1.2" - -"detect-libc@^2.0.0": - "integrity" "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" - "resolved" "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" - "version" "2.0.1" - -"doctrine@^3.0.0": - "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" - "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "esutils" "^2.0.2" - -"dtrace-provider@~0.8": - "integrity" "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q==" - "resolved" "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz" - "version" "0.8.7" - dependencies: - "nan" "^2.10.0" - -"eastasianwidth@^0.2.0": - "integrity" "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - "resolved" "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - "version" "0.2.0" - -"easy-table@^1.2.0": - "integrity" "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==" - "resolved" "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "ansi-regex" "^5.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.6.1" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + integrity "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" + +coffee-script@^1.12.4: + version "1.12.7" + resolved "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz" + integrity sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.2, color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +colorette@^2.0.19: + version "2.0.19" + resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +commander@^9.4.1: + version "9.5.0" + resolved "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + +console-control-strings@^1.0.0, console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +cpu-features@~0.0.4: + version "0.0.4" + resolved "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz" + integrity sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A== + dependencies: + buildcheck "0.0.3" + nan "^2.15.0" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-extend@^0.5.1: + version "0.5.1" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz" + integrity sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w== + +deep-is@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" + integrity "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==" + +deepdash@^5.3.9: + version "5.3.9" + resolved "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz" + integrity sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg== + dependencies: + lodash "^4.17.21" + lodash-es "^4.17.21" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" + integrity "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==" + dependencies: + clone "^1.0.2" + +del@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/del/-/del-3.0.0.tgz" + integrity "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==" + dependencies: + globby "^6.1.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + p-map "^1.1.1" + pify "^3.0.0" + rimraf "^2.2.8" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + integrity "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + +denque@^2.0.1: + version "2.1.0" + resolved "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz" + integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== + +depd@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +detect-libc@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" + integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dtrace-provider@~0.8: + version "0.8.7" + resolved "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz" + integrity "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q==" + dependencies: + nan "^2.10.0" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +easy-table@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz" + integrity sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww== + dependencies: + ansi-regex "^5.0.1" optionalDependencies: - "wcwidth" "^1.0.1" - -"ecc-jsbn@~0.1.1": - "integrity" "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==" - "resolved" "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" - "version" "0.1.2" - dependencies: - "jsbn" "~0.1.0" - "safer-buffer" "^2.1.0" - -"emoji-regex@^8.0.0": - "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - "version" "8.0.0" - -"emoji-regex@^9.2.2": - "integrity" "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - "version" "9.2.2" - -"encoding@^0.1.0", "encoding@^0.1.12": - "integrity" "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==" - "resolved" "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" - "version" "0.1.13" - dependencies: - "iconv-lite" "^0.6.2" - -"end-of-stream@^1.1.0": - "integrity" "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==" - "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz" - "version" "1.4.1" - dependencies: - "once" "^1.4.0" - -"env-paths@^2.2.0": - "integrity" "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" - "resolved" "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" - "version" "2.2.1" - -"err-code@^2.0.2": - "integrity" "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" - "resolved" "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" - "version" "2.0.3" - -"escape-string-regexp@^1.0.5": - "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - "version" "1.0.5" - -"escape-string-regexp@^4.0.0": - "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - "version" "4.0.0" - -"eslint-config-prettier@^8.5.0": - "integrity" "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==" - "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" - "version" "8.5.0" - -"eslint-plugin-json@^3.1.0": - "integrity" "sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==" - "resolved" "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "lodash" "^4.17.21" - "vscode-json-languageservice" "^4.1.6" - -"eslint-scope@^7.1.1": - "integrity" "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==" - "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" - "version" "7.1.1" - dependencies: - "esrecurse" "^4.3.0" - "estraverse" "^5.2.0" - -"eslint-utils@^3.0.0": - "integrity" "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==" - "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "eslint-visitor-keys" "^2.0.0" - -"eslint-visitor-keys@^2.0.0": - "integrity" "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" - "version" "2.0.0" - -"eslint-visitor-keys@^3.3.0": - "integrity" "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" - "version" "3.3.0" - -"eslint@>=5", "eslint@>=7.0.0", "eslint@8.31.0": - "integrity" "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==" - "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz" - "version" "8.31.0" + wcwidth "^1.0.1" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encoding@^0.1.12: + version "0.1.13" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + dependencies: + once "^1.4.0" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-prettier@^8.5.0: + version "8.5.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + +eslint-plugin-json@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz" + integrity sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g== + dependencies: + lodash "^4.17.21" + vscode-json-languageservice "^4.1.6" + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@8.31.0: + version "8.31.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz" + integrity sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA== dependencies: "@eslint/eslintrc" "^1.4.1" "@humanwhocodes/config-array" "^0.11.8" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - "ajv" "^6.10.0" - "chalk" "^4.0.0" - "cross-spawn" "^7.0.2" - "debug" "^4.3.2" - "doctrine" "^3.0.0" - "escape-string-regexp" "^4.0.0" - "eslint-scope" "^7.1.1" - "eslint-utils" "^3.0.0" - "eslint-visitor-keys" "^3.3.0" - "espree" "^9.4.0" - "esquery" "^1.4.0" - "esutils" "^2.0.2" - "fast-deep-equal" "^3.1.3" - "file-entry-cache" "^6.0.1" - "find-up" "^5.0.0" - "glob-parent" "^6.0.2" - "globals" "^13.19.0" - "grapheme-splitter" "^1.0.4" - "ignore" "^5.2.0" - "import-fresh" "^3.0.0" - "imurmurhash" "^0.1.4" - "is-glob" "^4.0.0" - "is-path-inside" "^3.0.3" - "js-sdsl" "^4.1.4" - "js-yaml" "^4.1.0" - "json-stable-stringify-without-jsonify" "^1.0.1" - "levn" "^0.4.1" - "lodash.merge" "^4.6.2" - "minimatch" "^3.1.2" - "natural-compare" "^1.4.0" - "optionator" "^0.9.1" - "regexpp" "^3.2.0" - "strip-ansi" "^6.0.1" - "strip-json-comments" "^3.1.0" - "text-table" "^0.2.0" - -"espree@^9.4.0": - "integrity" "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==" - "resolved" "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz" - "version" "9.4.1" - dependencies: - "acorn" "^8.8.0" - "acorn-jsx" "^5.3.2" - "eslint-visitor-keys" "^3.3.0" - -"esquery@^1.4.0": - "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==" - "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "estraverse" "^5.1.0" - -"esrecurse@^4.3.0": - "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" - "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "estraverse" "^5.2.0" - -"estraverse@^5.1.0", "estraverse@^5.2.0": - "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" - "version" "5.2.0" - -"esutils@^2.0.2": - "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - "version" "2.0.3" - -"exec-sh@^0.3.2", "exec-sh@^0.3.4": - "integrity" "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" - "resolved" "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz" - "version" "0.3.6" - -"execa@^4.0.0": - "integrity" "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==" - "resolved" "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "cross-spawn" "^7.0.0" - "get-stream" "^5.0.0" - "human-signals" "^1.1.1" - "is-stream" "^2.0.0" - "merge-stream" "^2.0.0" - "npm-run-path" "^4.0.0" - "onetime" "^5.1.0" - "signal-exit" "^3.0.2" - "strip-final-newline" "^2.0.0" - -"execa@^6.1.0": - "integrity" "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==" - "resolved" "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "cross-spawn" "^7.0.3" - "get-stream" "^6.0.1" - "human-signals" "^3.0.1" - "is-stream" "^3.0.0" - "merge-stream" "^2.0.0" - "npm-run-path" "^5.1.0" - "onetime" "^6.0.0" - "signal-exit" "^3.0.7" - "strip-final-newline" "^3.0.0" - -"exiftool@^0.0.3": - "integrity" "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" - "resolved" "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz" - "version" "0.0.3" - -"external-editor@^3.0.3": - "integrity" "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==" - "resolved" "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz" - "version" "3.0.3" - dependencies: - "chardet" "^0.7.0" - "iconv-lite" "^0.4.24" - "tmp" "^0.0.33" - -"extsprintf@^1.2.0", "extsprintf@1.3.0": - "integrity" "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" - "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" - "version" "1.3.0" - -"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": - "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - "version" "3.1.3" - -"fast-json-stable-stringify@^2.0.0": - "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - "version" "2.1.0" - -"fast-levenshtein@^2.0.6": - "integrity" "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - "version" "2.0.6" - -"fastq@^1.6.0": - "integrity" "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==" - "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" - "version" "1.15.0" - dependencies: - "reusify" "^1.0.4" - -"fb-watchman@^2.0.1": - "integrity" "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==" - "resolved" "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "bser" "2.1.1" - -"figures@^3.0.0": - "integrity" "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==" - "resolved" "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "escape-string-regexp" "^1.0.5" - -"file-entry-cache@^6.0.1": - "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" - "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "flat-cache" "^3.0.4" - -"fill-range@^7.0.1": - "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" - "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "to-regex-range" "^5.0.1" - -"find-up@^5.0.0": - "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "locate-path" "^6.0.0" - "path-exists" "^4.0.0" - -"flat-cache@^3.0.4": - "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==" - "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "flatted" "^3.1.0" - "rimraf" "^3.0.2" - -"flatted@^3.1.0": - "integrity" "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==" - "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" - "version" "3.1.1" - -"fs-extra@10.1.0": - "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" - "version" "10.1.0" - dependencies: - "graceful-fs" "^4.2.0" - "jsonfile" "^6.0.1" - "universalify" "^2.0.0" - -"fs-minipass@^2.0.0": - "integrity" "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==" - "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "minipass" "^3.0.0" - -"fs.realpath@^1.0.0": - "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - "version" "1.0.0" - -"gauge@^3.0.0": - "integrity" "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==" - "resolved" "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "aproba" "^1.0.3 || ^2.0.0" - "color-support" "^1.1.2" - "console-control-strings" "^1.0.0" - "has-unicode" "^2.0.1" - "object-assign" "^4.1.1" - "signal-exit" "^3.0.0" - "string-width" "^4.2.3" - "strip-ansi" "^6.0.1" - "wide-align" "^1.1.2" - -"gauge@^4.0.3": - "integrity" "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==" - "resolved" "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" - "version" "4.0.4" - dependencies: - "aproba" "^1.0.3 || ^2.0.0" - "color-support" "^1.1.3" - "console-control-strings" "^1.1.0" - "has-unicode" "^2.0.1" - "signal-exit" "^3.0.7" - "string-width" "^4.2.3" - "strip-ansi" "^6.0.1" - "wide-align" "^1.1.5" - -"get-stream@^5.0.0": - "integrity" "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" - "version" "5.2.0" - dependencies: - "pump" "^3.0.0" - -"get-stream@^6.0.1": - "integrity" "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" - "version" "6.0.1" - -"getpass@^0.1.1": - "integrity" "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==" - "resolved" "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" - "version" "0.1.7" - dependencies: - "assert-plus" "^1.0.0" - -"glob-parent@^6.0.2": - "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "is-glob" "^4.0.3" - -"glob@^6.0.1": - "integrity" "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==" - "resolved" "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz" - "version" "6.0.4" - dependencies: - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "2 || 3" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@^7.0.3", "glob@^7.0.5": - "integrity" "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" - "version" "7.1.3" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.0.4" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@^7.1.3": - "integrity" "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" - "version" "7.1.6" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.0.4" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@^7.1.4": - "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - "version" "7.2.3" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.1.1" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@8.0.3": - "integrity" "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==" - "resolved" "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" - "version" "8.0.3" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^5.0.1" - "once" "^1.3.0" - -"globals@^13.19.0": - "integrity" "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==" - "resolved" "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz" - "version" "13.19.0" - dependencies: - "type-fest" "^0.20.2" - -"globby@^6.1.0": - "integrity" "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==" - "resolved" "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "array-union" "^1.0.1" - "glob" "^7.0.3" - "object-assign" "^4.0.1" - "pify" "^2.0.0" - "pinkie-promise" "^2.0.0" - -"graceful-fs@^4.1.6", "graceful-fs@^4.2.0", "graceful-fs@^4.2.10", "graceful-fs@^4.2.6": - "integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - "version" "4.2.10" - -"grapheme-splitter@^1.0.4": - "integrity" "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" - "resolved" "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" - "version" "1.0.4" - -"has-flag@^4.0.0": - "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - "version" "4.0.0" - -"has-unicode@^2.0.1": - "integrity" "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - "resolved" "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" - "version" "2.0.1" - -"hashids@^2.2.10": - "integrity" "sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA==" - "resolved" "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz" - "version" "2.2.10" - -"hjson@3.2.2": - "integrity" "sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==" - "resolved" "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" - "version" "3.2.2" - -"http-cache-semantics@^4.1.0": - "integrity" "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" - "version" "4.1.0" - -"http-proxy-agent@^4.0.1": - "integrity" "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==" - "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" - "version" "4.0.1" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.4.0: + version "9.4.1" + resolved "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz" + integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +exec-sh@^0.3.2, exec-sh@^0.3.4: + version "0.3.6" + resolved "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz" + integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== + +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +execa@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz" + integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^3.0.1" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + +exiftool@^0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz" + integrity "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" + +external-editor@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz" + integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extsprintf@1.3.0, extsprintf@^1.2.0: + version "1.3.0" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +figures@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz" + integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" + integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== + +fs-extra@10.1.0: + version "10.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + +gauge@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" + console-control-strings "^1.0.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" + signal-exit "^3.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@8.0.3: + version "8.0.3" + resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@^6.0.1: + version "6.0.4" + resolved "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz" + integrity "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.3, glob@^7.0.5: + version "7.1.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.1.6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.4: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.19.0: + version "13.19.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz" + integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ== + dependencies: + type-fest "^0.20.2" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" + integrity "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==" + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.6: + version "4.2.10" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +hashids@^2.2.10: + version "2.2.10" + resolved "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz" + integrity sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA== + +hjson@3.2.2: + version "3.2.2" + resolved "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" + integrity sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q== + +http-cache-semantics@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: "@tootallnate/once" "1" - "agent-base" "6" - "debug" "4" - -"http-signature@^1.3.6": - "integrity" "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==" - "resolved" "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz" - "version" "1.3.6" - dependencies: - "assert-plus" "^1.0.0" - "jsprim" "^2.0.2" - "sshpk" "^1.14.1" - -"https-proxy-agent@^5.0.0": - "integrity" "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==" - "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "agent-base" "6" - "debug" "4" - -"human-signals@^1.1.1": - "integrity" "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" - "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" - "version" "1.1.1" - -"human-signals@^3.0.1": - "integrity" "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==" - "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz" - "version" "3.0.1" - -"humanize-ms@^1.2.1": - "integrity" "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==" - "resolved" "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" - "version" "1.2.1" - dependencies: - "ms" "^2.0.0" - -"husky@^8.0.0": - "integrity" "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==" - "resolved" "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz" - "version" "8.0.3" - -"iconv-lite@^0.4.24": - "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" - "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - "version" "0.4.24" - dependencies: - "safer-buffer" ">= 2.1.2 < 3" - -"iconv-lite@^0.6.2", "iconv-lite@0.6.3": - "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" - "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - "version" "0.6.3" - dependencies: - "safer-buffer" ">= 2.1.2 < 3.0.0" - -"ieee754@^1.1.13": - "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - "version" "1.2.1" - -"ignore@^5.2.0": - "integrity" "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" - "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" - "version" "5.2.4" - -"import-fresh@^3.0.0", "import-fresh@^3.2.1": - "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" - "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - "version" "3.3.0" - dependencies: - "parent-module" "^1.0.0" - "resolve-from" "^4.0.0" - -"imurmurhash@^0.1.4": - "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - "version" "0.1.4" - -"indent-string@^4.0.0": - "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" - "version" "4.0.0" - -"infer-owner@^1.0.4": - "integrity" "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - "resolved" "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" - "version" "1.0.4" - -"inflight@^1.0.4": - "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" - "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - "version" "1.0.6" - dependencies: - "once" "^1.3.0" - "wrappy" "1" - -"inherits@^2.0.3", "inherits@^2.0.4", "inherits@2": - "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - "version" "2.0.4" - -"ini-config-parser@^1.0.4": - "integrity" "sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg==" - "resolved" "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "coffee-script" "^1.12.4" - "deep-extend" "^0.5.1" - "rimraf" "^2.6.1" - -"inquirer@^8.2.2": - "integrity" "sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow==" - "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz" - "version" "8.2.2" - dependencies: - "ansi-escapes" "^4.2.1" - "chalk" "^4.1.1" - "cli-cursor" "^3.1.0" - "cli-width" "^3.0.0" - "external-editor" "^3.0.3" - "figures" "^3.0.0" - "lodash" "^4.17.21" - "mute-stream" "0.0.8" - "ora" "^5.4.1" - "run-async" "^2.4.0" - "rxjs" "^7.5.5" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" - "through" "^2.3.6" - -"ip@^2.0.0": - "integrity" "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" - "resolved" "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" - "version" "2.0.0" - -"is-extglob@^2.1.1": - "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - "version" "2.1.1" - -"is-fullwidth-code-point@^3.0.0": - "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - "version" "3.0.0" - -"is-fullwidth-code-point@^4.0.0": - "integrity" "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" - "version" "4.0.0" - -"is-glob@^4.0.0", "is-glob@^4.0.3": - "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" - "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "is-extglob" "^2.1.1" - -"is-interactive@^1.0.0": - "integrity" "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" - "resolved" "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" - "version" "1.0.0" - -"is-lambda@^1.0.1": - "integrity" "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" - "resolved" "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" - "version" "1.0.1" - -"is-number@^7.0.0": - "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - "version" "7.0.0" - -"is-path-cwd@^1.0.0": - "integrity" "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" - "resolved" "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz" - "version" "1.0.0" - -"is-path-in-cwd@^1.0.0": - "integrity" "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==" - "resolved" "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "is-path-inside" "^1.0.0" - -"is-path-inside@^1.0.0": - "integrity" "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==" - "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "path-is-inside" "^1.0.1" - -"is-path-inside@^3.0.3": - "integrity" "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" - "version" "3.0.3" - -"is-stream@^2.0.0": - "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - "version" "2.0.1" - -"is-stream@^3.0.0": - "integrity" "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" - "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" - "version" "3.0.0" - -"is-unicode-supported@^0.1.0": - "integrity" "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" - "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - "version" "0.1.0" - -"isexe@^2.0.0": - "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - "version" "2.0.0" - -"js-sdsl@^4.1.4": - "integrity" "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==" - "resolved" "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz" - "version" "4.2.0" - -"js-yaml@^4.1.0": - "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "argparse" "^2.0.1" - -"jsbn@~0.1.0": - "integrity" "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - "resolved" "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" - "version" "0.1.1" - -"json-schema-traverse@^0.4.1": - "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - "version" "0.4.1" - -"json-schema@0.4.0": - "integrity" "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - "resolved" "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" - "version" "0.4.0" - -"json-stable-stringify-without-jsonify@^1.0.1": - "integrity" "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - "version" "1.0.1" - -"jsonc-parser@^3.0.0": - "integrity" "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" - "resolved" "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" - "version" "3.2.0" - -"jsonfile@^6.0.1": - "integrity" "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==" - "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "universalify" "^1.0.0" + agent-base "6" + debug "4" + +http-signature@^1.3.6: + version "1.3.6" + resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz" + integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== + dependencies: + assert-plus "^1.0.0" + jsprim "^2.0.2" + sshpk "^1.14.1" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +human-signals@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz" + integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +husky@^8.0.0: + version "8.0.3" + resolved "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz" + integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== + +iconv-lite@0.6.3, iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini-config-parser@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz" + integrity sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg== + dependencies: + coffee-script "^1.12.4" + deep-extend "^0.5.1" + rimraf "^2.6.1" + +inquirer@^8.2.2: + version "8.2.2" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz" + integrity sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + +is-glob@^4.0.0, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz" + integrity "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz" + integrity "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==" + dependencies: + path-is-inside "^1.0.1" + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + +js-sdsl@^4.1.4: + version "4.2.0" + resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz" + integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + +jsonc-parser@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" optionalDependencies: - "graceful-fs" "^4.1.6" - -"jsprim@^2.0.2": - "integrity" "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==" - "resolved" "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "assert-plus" "1.0.0" - "extsprintf" "1.3.0" - "json-schema" "0.4.0" - "verror" "1.10.0" - -"levn@^0.4.1": - "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" - "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - "version" "0.4.1" - dependencies: - "prelude-ls" "^1.2.1" - "type-check" "~0.4.0" - -"lilconfig@2.0.6": - "integrity" "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" - "resolved" "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz" - "version" "2.0.6" - -"lint-staged@^13.1.0": - "integrity" "sha512-pn/sR8IrcF/T0vpWLilih8jmVouMlxqXxKuAojmbiGX5n/gDnz+abdPptlj0vYnbfE0SQNl3CY/HwtM0+yfOVQ==" - "resolved" "https://registry.npmjs.org/lint-staged/-/lint-staged-13.1.0.tgz" - "version" "13.1.0" - dependencies: - "cli-truncate" "^3.1.0" - "colorette" "^2.0.19" - "commander" "^9.4.1" - "debug" "^4.3.4" - "execa" "^6.1.0" - "lilconfig" "2.0.6" - "listr2" "^5.0.5" - "micromatch" "^4.0.5" - "normalize-path" "^3.0.0" - "object-inspect" "^1.12.2" - "pidtree" "^0.6.0" - "string-argv" "^0.3.1" - "yaml" "^2.1.3" - -"listr2@^5.0.5": - "integrity" "sha512-u60KxKBy1BR2uLJNTWNptzWQ1ob/gjMzIJPZffAENzpZqbMZ/5PrXXOomDcevIS/+IB7s1mmCEtSlT2qHWMqag==" - "resolved" "https://registry.npmjs.org/listr2/-/listr2-5.0.6.tgz" - "version" "5.0.6" - dependencies: - "cli-truncate" "^2.1.0" - "colorette" "^2.0.19" - "log-update" "^4.0.0" - "p-map" "^4.0.0" - "rfdc" "^1.3.0" - "rxjs" "^7.5.7" - "through" "^2.3.8" - "wrap-ansi" "^7.0.0" - -"locate-path@^6.0.0": - "integrity" "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==" - "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "p-locate" "^5.0.0" - -"lodash-es@^4.17.21": - "integrity" "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - "resolved" "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" - "version" "4.17.21" - -"lodash.merge@^4.6.2": - "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - "version" "4.6.2" - -"lodash@^4.17.15", "lodash@^4.17.21", "lodash@4.17.21": - "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - "version" "4.17.21" - -"log-symbols@^4.1.0": - "integrity" "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==" - "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "chalk" "^4.1.0" - "is-unicode-supported" "^0.1.0" - -"log-update@^4.0.0": - "integrity" "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==" - "resolved" "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "ansi-escapes" "^4.3.0" - "cli-cursor" "^3.1.0" - "slice-ansi" "^4.0.0" - "wrap-ansi" "^6.2.0" - -"lru-cache@^6.0.0": - "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "yallist" "^4.0.0" - -"lru-cache@7.13.2": - "integrity" "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz" - "version" "7.13.2" - -"make-dir@^3.1.0": - "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" - "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "semver" "^6.0.0" - -"make-fetch-happen@^9.1.0": - "integrity" "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==" - "resolved" "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" - "version" "9.1.0" - dependencies: - "agentkeepalive" "^4.1.3" - "cacache" "^15.2.0" - "http-cache-semantics" "^4.1.0" - "http-proxy-agent" "^4.0.1" - "https-proxy-agent" "^5.0.0" - "is-lambda" "^1.0.1" - "lru-cache" "^6.0.0" - "minipass" "^3.1.3" - "minipass-collect" "^1.0.2" - "minipass-fetch" "^1.3.2" - "minipass-flush" "^1.0.5" - "minipass-pipeline" "^1.2.4" - "negotiator" "^0.6.2" - "promise-retry" "^2.0.1" - "socks-proxy-agent" "^6.0.0" - "ssri" "^8.0.0" - -"makeerror@1.0.x": - "integrity" "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==" - "resolved" "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz" - "version" "1.0.11" - dependencies: - "tmpl" "1.0.x" - -"merge-stream@^2.0.0": - "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - "version" "2.0.0" - -"micromatch@^4.0.2", "micromatch@^4.0.5": - "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==" - "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - "version" "4.0.5" - dependencies: - "braces" "^3.0.2" - "picomatch" "^2.3.1" - -"mime-db@1.52.0": - "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - "version" "1.52.0" - -"mime-types@^2.1.35": - "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" - "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - "version" "2.1.35" - dependencies: - "mime-db" "1.52.0" - -"mimic-fn@^2.1.0": - "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - "version" "2.1.0" - -"mimic-fn@^4.0.0": - "integrity" "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" - "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" - "version" "4.0.0" - -"minimatch@^3.0.4", "minimatch@^3.0.5", "minimatch@^3.1.1", "minimatch@^3.1.2", "minimatch@2 || 3": - "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - "version" "3.1.2" - dependencies: - "brace-expansion" "^1.1.7" - -"minimatch@^5.0.1": - "integrity" "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "brace-expansion" "^2.0.1" - -"minimist@^1.1.1", "minimist@^1.2.0", "minimist@^1.2.6": - "integrity" "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" - "version" "1.2.6" - -"minipass-collect@^1.0.2": - "integrity" "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==" - "resolved" "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "minipass" "^3.0.0" - -"minipass-fetch@^1.3.2": - "integrity" "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==" - "resolved" "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" - "version" "1.4.1" - dependencies: - "minipass" "^3.1.0" - "minipass-sized" "^1.0.3" - "minizlib" "^2.0.0" + graceful-fs "^4.1.6" + +jsprim@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz" + integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lilconfig@2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz" + integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== + +lint-staged@^13.1.0: + version "13.1.0" + resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-13.1.0.tgz" + integrity sha512-pn/sR8IrcF/T0vpWLilih8jmVouMlxqXxKuAojmbiGX5n/gDnz+abdPptlj0vYnbfE0SQNl3CY/HwtM0+yfOVQ== + dependencies: + cli-truncate "^3.1.0" + colorette "^2.0.19" + commander "^9.4.1" + debug "^4.3.4" + execa "^6.1.0" + lilconfig "2.0.6" + listr2 "^5.0.5" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-inspect "^1.12.2" + pidtree "^0.6.0" + string-argv "^0.3.1" + yaml "^2.1.3" + +listr2@^5.0.5: + version "5.0.6" + resolved "https://registry.npmjs.org/listr2/-/listr2-5.0.6.tgz" + integrity sha512-u60KxKBy1BR2uLJNTWNptzWQ1ob/gjMzIJPZffAENzpZqbMZ/5PrXXOomDcevIS/+IB7s1mmCEtSlT2qHWMqag== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.19" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.5.7" + through "^2.3.8" + wrap-ansi "^7.0.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + +lru-cache@7.13.2: + version "7.13.2" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz" + integrity sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-fetch-happen@^9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz" + integrity "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==" + dependencies: + tmpl "1.0.x" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +micromatch@^4.0.2, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.35: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.0" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" optionalDependencies: - "encoding" "^0.1.12" - -"minipass-flush@^1.0.5": - "integrity" "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==" - "resolved" "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" - "version" "1.0.5" - dependencies: - "minipass" "^3.0.0" - -"minipass-pipeline@^1.2.2", "minipass-pipeline@^1.2.4": - "integrity" "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==" - "resolved" "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" - "version" "1.2.4" - dependencies: - "minipass" "^3.0.0" - -"minipass-sized@^1.0.3": - "integrity" "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==" - "resolved" "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "minipass" "^3.0.0" - -"minipass@^3.0.0", "minipass@^3.1.0", "minipass@^3.1.1", "minipass@^3.1.3": - "integrity" "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==" - "resolved" "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" - "version" "3.3.4" - dependencies: - "yallist" "^4.0.0" - -"minizlib@^2.0.0", "minizlib@^2.1.1": - "integrity" "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==" - "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" - "version" "2.1.2" - dependencies: - "minipass" "^3.0.0" - "yallist" "^4.0.0" - -"mkdirp@^1.0.3": - "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - "version" "1.0.4" - -"mkdirp@^1.0.4": - "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - "version" "1.0.4" - -"mkdirp@~0.5.1": - "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" - "version" "0.5.6" - dependencies: - "minimist" "^1.2.6" - -"moment@^2.19.3", "moment@2.29.4": - "integrity" "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" - "resolved" "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" - "version" "2.29.4" - -"ms@^2.0.0", "ms@2.1.2": - "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - "version" "2.1.2" - -"mute-stream@0.0.8": - "integrity" "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" - "version" "0.0.8" - -"mv@~2": - "integrity" "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==" - "resolved" "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "mkdirp" "~0.5.1" - "ncp" "~2.0.0" - "rimraf" "~2.4.0" - -"nan@^2.10.0", "nan@^2.14.0", "nan@^2.15.0", "nan@^2.16.0": - "integrity" "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" - "resolved" "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz" - "version" "2.16.0" - -"natural-compare@^1.4.0": - "integrity" "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - "version" "1.4.0" - -"ncp@~2.0.0": - "integrity" "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==" - "resolved" "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz" - "version" "2.0.0" - -"negotiator@^0.6.2": - "integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - "version" "0.6.3" - -"nntp-server@3.1.0": - "integrity" "sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw==" - "resolved" "https://registry.npmjs.org/nntp-server/-/nntp-server-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "debug" "^4.3.3" - "denque" "^2.0.1" - "serialize-error" "^8.1.0" - "split2" "^4.1.0" - -"node-addon-api@^4.2.0": - "integrity" "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" - "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz" - "version" "4.3.0" - -"node-fetch@^2.6.7": - "integrity" "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==" - "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" - "version" "2.6.7" - dependencies: - "whatwg-url" "^5.0.0" - -"node-gyp@8.x": - "integrity" "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==" - "resolved" "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" - "version" "8.4.1" - dependencies: - "env-paths" "^2.2.0" - "glob" "^7.1.4" - "graceful-fs" "^4.2.6" - "make-fetch-happen" "^9.1.0" - "nopt" "^5.0.0" - "npmlog" "^6.0.0" - "rimraf" "^3.0.2" - "semver" "^7.3.5" - "tar" "^6.1.2" - "which" "^2.0.2" - -"node-int64@^0.4.0": - "integrity" "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - "resolved" "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" - "version" "0.4.0" - -"node-pty@0.10.1": - "integrity" "sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg==" - "resolved" "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz" - "version" "0.10.1" - dependencies: - "nan" "^2.14.0" - -"nodemailer@6.7.7": - "integrity" "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==" - "resolved" "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz" - "version" "6.7.7" - -"nopt@^5.0.0": - "integrity" "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==" - "resolved" "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "abbrev" "1" - -"normalize-path@^3.0.0": - "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - "version" "3.0.0" - -"npm-run-path@^4.0.0": - "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" - "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "path-key" "^3.0.0" - -"npm-run-path@^5.1.0": - "integrity" "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==" - "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "path-key" "^4.0.0" - -"npmlog@^5.0.1": - "integrity" "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==" - "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "are-we-there-yet" "^2.0.0" - "console-control-strings" "^1.1.0" - "gauge" "^3.0.0" - "set-blocking" "^2.0.0" - -"npmlog@^6.0.0": - "integrity" "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==" - "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "are-we-there-yet" "^3.0.0" - "console-control-strings" "^1.1.0" - "gauge" "^4.0.3" - "set-blocking" "^2.0.0" - -"object-assign@^4.0.1", "object-assign@^4.1.1": - "integrity" "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - "version" "4.1.1" - -"object-inspect@^1.12.2": - "integrity" "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" - "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" - "version" "1.12.3" - -"once@^1.3.0", "once@^1.3.1", "once@^1.4.0": - "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" - "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "wrappy" "1" - -"onetime@^5.1.0": - "integrity" "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==" - "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "mimic-fn" "^2.1.0" - -"onetime@^6.0.0": - "integrity" "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==" - "resolved" "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "mimic-fn" "^4.0.0" - -"optionator@^0.9.1": - "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" - "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" - "version" "0.9.1" - dependencies: - "deep-is" "^0.1.3" - "fast-levenshtein" "^2.0.6" - "levn" "^0.4.1" - "prelude-ls" "^1.2.1" - "type-check" "^0.4.0" - "word-wrap" "^1.2.3" - -"ora@^5.4.1": - "integrity" "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==" - "resolved" "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" - "version" "5.4.1" - dependencies: - "bl" "^4.1.0" - "chalk" "^4.1.0" - "cli-cursor" "^3.1.0" - "cli-spinners" "^2.5.0" - "is-interactive" "^1.0.0" - "is-unicode-supported" "^0.1.0" - "log-symbols" "^4.1.0" - "strip-ansi" "^6.0.0" - "wcwidth" "^1.0.1" - -"os-tmpdir@~1.0.2": - "integrity" "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" - "resolved" "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - "version" "1.0.2" - -"otplib@11.0.1": - "integrity" "sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ==" - "resolved" "https://registry.npmjs.org/otplib/-/otplib-11.0.1.tgz" - "version" "11.0.1" - dependencies: - "thirty-two" "1.0.2" - -"p-limit@^3.0.2": - "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "yocto-queue" "^0.1.0" - -"p-locate@^5.0.0": - "integrity" "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==" - "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "p-limit" "^3.0.2" - -"p-map@^1.1.1": - "integrity" "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" - "resolved" "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz" - "version" "1.2.0" - -"p-map@^4.0.0": - "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" - "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "aggregate-error" "^3.0.0" - -"parent-module@^1.0.0": - "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" - "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "callsites" "^3.0.0" - -"path-exists@^4.0.0": - "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - "version" "4.0.0" - -"path-is-absolute@^1.0.0": - "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - "version" "1.0.1" - -"path-is-inside@^1.0.1": - "integrity" "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - "resolved" "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" - "version" "1.0.2" - -"path-key@^3.0.0", "path-key@^3.1.0": - "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - "version" "3.1.1" - -"path-key@^4.0.0": - "integrity" "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" - "resolved" "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" - "version" "4.0.0" - -"picomatch@^2.0.4", "picomatch@^2.3.1": - "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - "version" "2.3.1" - -"pidtree@^0.6.0": - "integrity" "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==" - "resolved" "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz" - "version" "0.6.0" - -"pify@^2.0.0": - "integrity" "sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - "version" "2.3.0" - -"pify@^3.0.0": - "integrity" "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" - "resolved" "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" - "version" "3.0.0" - -"pinkie-promise@^2.0.0": - "integrity" "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==" - "resolved" "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "pinkie" "^2.0.0" - -"pinkie@^2.0.0": - "integrity" "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" - "resolved" "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" - "version" "2.0.4" - -"prelude-ls@^1.2.1": - "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - "version" "1.2.1" - -"prettier@2.8.1": - "integrity" "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==" - "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz" - "version" "2.8.1" - -"promise-inflight@^1.0.1": - "integrity" "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" - "resolved" "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" - "version" "1.0.1" - -"promise-retry@^2.0.1": - "integrity" "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==" - "resolved" "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "err-code" "^2.0.2" - "retry" "^0.12.0" - -"pump@^3.0.0": - "integrity" "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==" - "resolved" "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "end-of-stream" "^1.1.0" - "once" "^1.3.1" - -"punycode@^2.1.0": - "integrity" "sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==" - "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz" - "version" "2.2.0" - -"qrcode-generator@^1.4.4": - "integrity" "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==" - "resolved" "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz" - "version" "1.4.4" - -"queue-microtask@^1.2.2": - "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - "version" "1.2.3" - -"readable-stream@^3.4.0", "readable-stream@^3.6.0": - "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - "version" "3.6.0" - dependencies: - "inherits" "^2.0.3" - "string_decoder" "^1.1.1" - "util-deprecate" "^1.0.1" - -"regexpp@^3.2.0": - "integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" - "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - "version" "3.2.0" - -"resolve-from@^4.0.0": - "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - "version" "4.0.0" - -"restore-cursor@^3.1.0": - "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" - "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "onetime" "^5.1.0" - "signal-exit" "^3.0.2" - -"retry@^0.12.0": - "integrity" "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" - "resolved" "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" - "version" "0.12.0" - -"reusify@^1.0.4": - "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - "version" "1.0.4" - -"rfdc@^1.3.0": - "integrity" "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" - "resolved" "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" - "version" "1.3.0" - -"rimraf@^2.2.8": - "integrity" "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" - "version" "2.6.2" - dependencies: - "glob" "^7.0.5" - -"rimraf@^2.6.1": - "integrity" "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" - "version" "2.6.2" - dependencies: - "glob" "^7.0.5" - -"rimraf@^3.0.2": - "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "glob" "^7.1.3" - -"rimraf@~2.4.0": - "integrity" "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz" - "version" "2.4.5" - dependencies: - "glob" "^6.0.1" - -"rlogin@^1.0.0": - "integrity" "sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==" - "resolved" "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz" - "version" "1.0.0" - -"rsvp@^4.8.4": - "integrity" "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" - "resolved" "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz" - "version" "4.8.5" - -"run-async@^2.4.0": - "integrity" "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" - "resolved" "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" - "version" "2.4.1" - -"run-parallel@^1.1.9": - "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" - "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "queue-microtask" "^1.2.2" - -"rxjs@^7.5.5", "rxjs@^7.5.7": - "integrity" "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==" - "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz" - "version" "7.8.0" - dependencies: - "tslib" "^2.1.0" - -"safe-buffer@~5.1.0": - "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - "version" "5.1.2" - -"safe-json-stringify@~1": - "integrity" "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==" - "resolved" "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz" - "version" "1.2.0" - -"safer-buffer@^2.0.2", "safer-buffer@^2.1.0", "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", "safer-buffer@~2.1.0": - "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - "version" "2.1.2" - -"sane@5.0.1": - "integrity" "sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q==" - "resolved" "https://registry.npmjs.org/sane/-/sane-5.0.1.tgz" - "version" "5.0.1" + encoding "^0.1.12" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: + version "3.3.4" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" + integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== + dependencies: + yallist "^4.0.0" + +minizlib@^2.0.0, minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@~0.5.1: + version "0.5.6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +moment@2.29.4, moment@^2.19.3: + version "2.29.4" + resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== + +ms@2.1.2, ms@^2.0.0: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mv@~2: + version "2.1.1" + resolved "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz" + integrity "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==" + dependencies: + mkdirp "~0.5.1" + ncp "~2.0.0" + rimraf "~2.4.0" + +nan@^2.10.0, nan@^2.14.0, nan@^2.15.0, nan@^2.16.0: + version "2.16.0" + resolved "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz" + integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + +ncp@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz" + integrity "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==" + +negotiator@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +nntp-server@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/nntp-server/-/nntp-server-3.1.0.tgz" + integrity sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw== + dependencies: + debug "^4.3.3" + denque "^2.0.1" + serialize-error "^8.1.0" + split2 "^4.1.0" + +node-addon-api@^4.2.0: + version "4.3.0" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz" + integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== + +node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-gyp@8.x: + version "8.4.1" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + integrity "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + +node-pty@0.10.1: + version "0.10.1" + resolved "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz" + integrity sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg== + dependencies: + nan "^2.14.0" + +nodemailer@6.7.7: + version "6.7.7" + resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz" + integrity sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA== + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npm-run-path@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz" + integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + dependencies: + path-key "^4.0.0" + +npmlog@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +object-assign@^4.0.1, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + +object-inspect@^1.12.2: + version "1.12.3" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + dependencies: + mimic-fn "^2.1.0" + +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + integrity "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + +otplib@11.0.1: + version "11.0.1" + resolved "https://registry.npmjs.org/otplib/-/otplib-11.0.1.tgz" + integrity sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ== + dependencies: + thirty-two "1.0.2" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" + integrity "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + +picomatch@^2.0.4, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pidtree@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz" + integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity "sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + integrity "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + integrity "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + integrity "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier@2.8.1: + version "2.8.1" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz" + integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0: + version "2.2.0" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz" + integrity sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw== + +qrcode-generator@^1.4.4: + version "1.4.4" + resolved "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz" + integrity sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + +rimraf@^2.2.8, rimraf@^2.6.1: + version "2.6.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" + integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== + dependencies: + glob "^7.0.5" + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rimraf@~2.4.0: + version "2.4.5" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz" + integrity "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==" + dependencies: + glob "^6.0.1" + +rlogin@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz" + integrity "sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==" + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.5.5, rxjs@^7.5.7: + version "7.8.0" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz" + integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== + dependencies: + tslib "^2.1.0" + +safe-buffer@~5.1.0: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-json-stringify@~1: + version "1.2.0" + resolved "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz" + integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/sane/-/sane-5.0.1.tgz" + integrity sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q== dependencies: "@cnakazawa/watch" "^1.0.3" - "anymatch" "^3.1.1" - "capture-exit" "^2.0.0" - "exec-sh" "^0.3.4" - "execa" "^4.0.0" - "fb-watchman" "^2.0.1" - "micromatch" "^4.0.2" - "minimist" "^1.1.1" - "walker" "~1.0.5" - -"sanitize-filename@^1.6.3": - "integrity" "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==" - "resolved" "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz" - "version" "1.6.3" - dependencies: - "truncate-utf8-bytes" "^1.0.0" - -"semver@^6.0.0": - "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - "version" "6.3.0" - -"semver@^7.3.5": - "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - "version" "7.3.7" - dependencies: - "lru-cache" "^6.0.0" - -"serialize-error@^8.1.0": - "integrity" "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==" - "resolved" "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz" - "version" "8.1.0" - dependencies: - "type-fest" "^0.20.2" - -"set-blocking@^2.0.0": - "integrity" "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - "version" "2.0.0" - -"shebang-command@^2.0.0": - "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" - "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "shebang-regex" "^3.0.0" - -"shebang-regex@^3.0.0": - "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - "version" "3.0.0" - -"signal-exit@^3.0.0", "signal-exit@^3.0.2", "signal-exit@^3.0.7": - "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - "version" "3.0.7" - -"slice-ansi@^3.0.0": - "integrity" "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==" - "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "ansi-styles" "^4.0.0" - "astral-regex" "^2.0.0" - "is-fullwidth-code-point" "^3.0.0" - -"slice-ansi@^4.0.0": - "integrity" "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==" - "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "ansi-styles" "^4.0.0" - "astral-regex" "^2.0.0" - "is-fullwidth-code-point" "^3.0.0" - -"slice-ansi@^5.0.0": - "integrity" "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==" - "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "ansi-styles" "^6.0.0" - "is-fullwidth-code-point" "^4.0.0" - -"smart-buffer@^4.2.0": - "integrity" "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" - "resolved" "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" - "version" "4.2.0" - -"socks-proxy-agent@^6.0.0": - "integrity" "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==" - "resolved" "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz" - "version" "6.2.1" - dependencies: - "agent-base" "^6.0.2" - "debug" "^4.3.3" - "socks" "^2.6.2" - -"socks@^2.6.2": - "integrity" "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==" - "resolved" "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz" - "version" "2.7.0" - dependencies: - "ip" "^2.0.0" - "smart-buffer" "^4.2.0" - -"split2@^4.1.0": - "integrity" "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" - "resolved" "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz" - "version" "4.1.0" - -"sqlite3-trans@1.3.0": - "integrity" "sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg==" - "resolved" "https://registry.npmjs.org/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "lodash" "^4.17.15" - -"sqlite3@5.0.11": - "integrity" "sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA==" - "resolved" "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz" - "version" "5.0.11" + anymatch "^3.1.1" + capture-exit "^2.0.0" + exec-sh "^0.3.4" + execa "^4.0.0" + fb-watchman "^2.0.1" + micromatch "^4.0.2" + minimist "^1.1.1" + walker "~1.0.5" + +sanitize-filename@^1.6.3: + version "1.6.3" + resolved "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz" + integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== + dependencies: + truncate-utf8-bytes "^1.0.0" + +semver@^6.0.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.5: + version "7.3.7" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +serialize-error@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz" + integrity sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ== + dependencies: + type-fest "^0.20.2" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^6.0.0: + version "6.2.1" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz" + integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.7.0" + resolved "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz" + integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + +split2@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz" + integrity sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ== + +sqlite3-trans@1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz" + integrity sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg== + dependencies: + lodash "^4.17.15" + +sqlite3@5.0.11: + version "5.0.11" + resolved "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz" + integrity sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA== dependencies: "@mapbox/node-pre-gyp" "^1.0.0" - "node-addon-api" "^4.2.0" - "tar" "^6.1.11" + node-addon-api "^4.2.0" + tar "^6.1.11" optionalDependencies: - "node-gyp" "8.x" + node-gyp "8.x" -"ssh2@1.11.0": - "integrity" "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==" - "resolved" "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz" - "version" "1.11.0" +ssh2@1.11.0: + version "1.11.0" + resolved "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz" + integrity sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw== dependencies: - "asn1" "^0.2.4" - "bcrypt-pbkdf" "^1.0.2" + asn1 "^0.2.4" + bcrypt-pbkdf "^1.0.2" optionalDependencies: - "cpu-features" "~0.0.4" - "nan" "^2.16.0" - -"sshpk@^1.14.1": - "integrity" "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==" - "resolved" "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" - "version" "1.17.0" - dependencies: - "asn1" "~0.2.3" - "assert-plus" "^1.0.0" - "bcrypt-pbkdf" "^1.0.0" - "dashdash" "^1.12.0" - "ecc-jsbn" "~0.1.1" - "getpass" "^0.1.1" - "jsbn" "~0.1.0" - "safer-buffer" "^2.0.2" - "tweetnacl" "~0.14.0" - -"ssri@^8.0.0", "ssri@^8.0.1": - "integrity" "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==" - "resolved" "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" - "version" "8.0.1" - dependencies: - "minipass" "^3.1.1" - -"string_decoder@^1.1.1": - "integrity" "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "safe-buffer" "~5.1.0" - -"string-argv@^0.3.1": - "integrity" "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==" - "resolved" "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" - "version" "0.3.1" - -"string-width@^1.0.2 || 2 || 3 || 4", "string-width@^4.1.0", "string-width@^4.2.0", "string-width@^4.2.3": - "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - "version" "4.2.3" - dependencies: - "emoji-regex" "^8.0.0" - "is-fullwidth-code-point" "^3.0.0" - "strip-ansi" "^6.0.1" - -"string-width@^5.0.0": - "integrity" "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" - "version" "5.1.2" - dependencies: - "eastasianwidth" "^0.2.0" - "emoji-regex" "^9.2.2" - "strip-ansi" "^7.0.1" - -"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": - "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "ansi-regex" "^5.0.1" - -"strip-ansi@^7.0.1": - "integrity" "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "ansi-regex" "^6.0.1" - -"strip-final-newline@^2.0.0": - "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - "version" "2.0.0" - -"strip-final-newline@^3.0.0": - "integrity" "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" - "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" - "version" "3.0.0" - -"strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1": - "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - "version" "3.1.1" - -"supports-color@^7.1.0": - "integrity" "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz" - "version" "7.1.0" - dependencies: - "has-flag" "^4.0.0" - -"systeminformation@5.12.3": - "integrity" "sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A==" - "resolved" "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.3.tgz" - "version" "5.12.3" - -"tar@^6.0.2", "tar@^6.1.11", "tar@^6.1.2": - "integrity" "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==" - "resolved" "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" - "version" "6.1.11" - dependencies: - "chownr" "^2.0.0" - "fs-minipass" "^2.0.0" - "minipass" "^3.0.0" - "minizlib" "^2.1.1" - "mkdirp" "^1.0.3" - "yallist" "^4.0.0" - -"telnet-socket@0.2.4": - "integrity" "sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ==" - "resolved" "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz" - "version" "0.2.4" - dependencies: - "binary-parser" "1.6.2" - "buffers" "github:NuSkooler/node-buffers" - -"temptmp@^1.1.0": - "integrity" "sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ==" - "resolved" "https://registry.npmjs.org/temptmp/-/temptmp-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "del" "^3.0.0" - -"text-table@^0.2.0": - "integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - "version" "0.2.0" - -"thirty-two@1.0.2": - "integrity" "sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==" - "resolved" "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz" - "version" "1.0.2" - -"through@^2.3.6", "through@^2.3.8": - "integrity" "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - "version" "2.3.8" - -"tmp@^0.0.33": - "integrity" "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==" - "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" - "version" "0.0.33" - dependencies: - "os-tmpdir" "~1.0.2" - -"tmpl@1.0.x": - "integrity" "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - "resolved" "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" - "version" "1.0.5" - -"to-regex-range@^5.0.1": - "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" - "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "is-number" "^7.0.0" - -"tr46@~0.0.3": - "integrity" "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - "version" "0.0.3" - -"truncate-utf8-bytes@^1.0.0": - "integrity" "sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==" - "resolved" "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "utf8-byte-length" "^1.0.1" - -"tslib@^2.1.0": - "integrity" "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" - "version" "2.3.1" - -"tweetnacl@^0.14.3", "tweetnacl@~0.14.0": - "integrity" "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - "resolved" "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" - "version" "0.14.5" - -"type-check@^0.4.0", "type-check@~0.4.0": - "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" - "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - "version" "0.4.0" - dependencies: - "prelude-ls" "^1.2.1" - -"type-fest@^0.20.2": - "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - "version" "0.20.2" - -"type-fest@^0.21.3": - "integrity" "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" - "version" "0.21.3" - -"unique-filename@^1.1.1": - "integrity" "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==" - "resolved" "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "unique-slug" "^2.0.0" - -"unique-slug@^2.0.0": - "integrity" "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==" - "resolved" "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "imurmurhash" "^0.1.4" - -"universalify@^1.0.0": - "integrity" "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" - "resolved" "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz" - "version" "1.0.0" - -"universalify@^2.0.0": - "integrity" "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - "resolved" "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" - "version" "2.0.0" - -"uri-js@^4.2.2": - "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" - "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - "version" "4.4.1" - dependencies: - "punycode" "^2.1.0" - -"utf8-byte-length@^1.0.1": - "integrity" "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - "resolved" "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz" - "version" "1.0.4" - -"util-deprecate@^1.0.1": - "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - "version" "1.0.2" - -"uuid-parse@1.1.0": - "integrity" "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==" - "resolved" "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz" - "version" "1.1.0" - -"uuid@8.3.2": - "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - "version" "8.3.2" - -"verror@1.10.0": - "integrity" "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==" - "resolved" "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" - "version" "1.10.0" - dependencies: - "assert-plus" "^1.0.0" - "core-util-is" "1.0.2" - "extsprintf" "^1.2.0" - -"vscode-json-languageservice@^4.1.6": - "integrity" "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==" - "resolved" "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "jsonc-parser" "^3.0.0" - "vscode-languageserver-textdocument" "^1.0.3" - "vscode-languageserver-types" "^3.16.0" - "vscode-nls" "^5.0.0" - "vscode-uri" "^3.0.3" - -"vscode-languageserver-textdocument@^1.0.3": - "integrity" "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==" - "resolved" "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz" - "version" "1.0.8" - -"vscode-languageserver-types@^3.16.0": - "integrity" "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==" - "resolved" "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz" - "version" "3.17.2" - -"vscode-nls@^5.0.0": - "integrity" "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==" - "resolved" "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz" - "version" "5.2.0" - -"vscode-uri@^3.0.3": - "integrity" "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==" - "resolved" "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz" - "version" "3.0.7" - -"walker@~1.0.5": - "integrity" "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==" - "resolved" "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz" - "version" "1.0.7" - dependencies: - "makeerror" "1.0.x" - -"wcwidth@^1.0.1": - "integrity" "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==" - "resolved" "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "defaults" "^1.0.3" - -"webidl-conversions@^3.0.0": - "integrity" "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - "version" "3.0.1" - -"whatwg-url@^5.0.0": - "integrity" "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==" - "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "tr46" "~0.0.3" - "webidl-conversions" "^3.0.0" - -"which@^2.0.1", "which@^2.0.2": - "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" - "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "isexe" "^2.0.0" - -"wide-align@^1.1.2", "wide-align@^1.1.5": - "integrity" "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==" - "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" - "version" "1.1.5" - dependencies: - "string-width" "^1.0.2 || 2 || 3 || 4" - -"word-wrap@^1.2.3": - "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - "version" "1.2.3" - -"wrap-ansi@^6.2.0": - "integrity" "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" - "version" "6.2.0" - dependencies: - "ansi-styles" "^4.0.0" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" - -"wrap-ansi@^7.0.0": - "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - "version" "7.0.0" - dependencies: - "ansi-styles" "^4.0.0" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" - -"wrappy@1": - "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - "version" "1.0.2" - -"ws@7.5.9": - "integrity" "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" - "resolved" "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" - "version" "7.5.9" - -"yallist@^4.0.0": - "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - "version" "4.0.0" - -"yaml@^2.1.3": - "integrity" "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==" - "resolved" "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz" - "version" "2.2.1" - -"yazl@^2.5.1": - "integrity" "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==" - "resolved" "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz" - "version" "2.5.1" - dependencies: - "buffer-crc32" "~0.2.3" - -"yocto-queue@^0.1.0": - "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - "version" "0.1.0" + cpu-features "~0.0.4" + nan "^2.16.0" + +sshpk@^1.14.1: + version "1.17.0" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +string-argv@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" + integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.0: + version "5.1.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string_decoder@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz" + integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + +systeminformation@5.12.3: + version "5.12.3" + resolved "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.3.tgz" + integrity sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A== + +tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: + version "6.1.11" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +telnet-socket@0.2.4: + version "0.2.4" + resolved "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz" + integrity sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ== + dependencies: + binary-parser "1.6.2" + buffers "github:NuSkooler/node-buffers" + +temptmp@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/temptmp/-/temptmp-1.1.0.tgz" + integrity sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ== + dependencies: + del "^3.0.0" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + +thirty-two@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz" + integrity "sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==" + +through@^2.3.6, through@^2.3.8: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + integrity "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmpl@1.0.x: + version "1.0.5" + resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +truncate-utf8-bytes@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz" + integrity "sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==" + dependencies: + utf8-byte-length "^1.0.1" + +tslib@^2.1.0: + version "2.3.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + integrity "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +utf8-byte-length@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz" + integrity "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + +uuid-parse@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz" + integrity sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A== + +uuid@8.3.2: + version "8.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vscode-json-languageservice@^4.1.6: + version "4.2.1" + resolved "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz" + integrity sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA== + dependencies: + jsonc-parser "^3.0.0" + vscode-languageserver-textdocument "^1.0.3" + vscode-languageserver-types "^3.16.0" + vscode-nls "^5.0.0" + vscode-uri "^3.0.3" + +vscode-languageserver-textdocument@^1.0.3: + version "1.0.8" + resolved "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz" + integrity sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q== + +vscode-languageserver-types@^3.16.0: + version "3.17.2" + resolved "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz" + integrity sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA== + +vscode-nls@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz" + integrity sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng== + +vscode-uri@^3.0.3: + version "3.0.7" + resolved "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz" + integrity sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA== + +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz" + integrity "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==" + dependencies: + makeerror "1.0.x" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + integrity "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==" + dependencies: + defaults "^1.0.3" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.2, wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + +ws@7.5.9: + version "7.5.9" + resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^2.1.3: + version "2.2.1" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz" + integrity sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw== + +yazl@^2.5.1: + version "2.5.1" + resolved "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz" + integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw== + dependencies: + buffer-crc32 "~0.2.3" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From af1f8890f6d441656518bd30569bd43391499a1e Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Fri, 13 Jan 2023 12:41:06 -0600 Subject: [PATCH 060/233] Changed default config to include webFinger and ActivityPub --- misc/config_template.in.hjson | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/misc/config_template.in.hjson b/misc/config_template.in.hjson index b1001bd42..b2a191355 100644 --- a/misc/config_template.in.hjson +++ b/misc/config_template.in.hjson @@ -223,6 +223,23 @@ // Standard issue "www" folder. Place static content here staticRoot: XXXXX + // Configuration for individual web handlers + handlers: { + // webFinger is needed for activityPub support, or can + // be used standalone. + // See https://www.rfc-editor.org/rfc/rfc7033 + webFinger: { + enabled: true + } + + // Handler for ActivityPub support used by Mastadon and + // others. + // See https://www.w3.org/TR/activitypub/ + activityPub: { + enabled: true + } + } + // // This block configures password reset emails. Template files // support the following variables: From 1068abca80e63bc4fb8d391b228f9635ea195a0c Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Fri, 13 Jan 2023 13:07:06 -0600 Subject: [PATCH 061/233] Changed the key name for the ActivityPub signing key --- core/activitypub/actor.js | 8 ++++---- core/activitypub_actor_property.js | 2 +- core/user.js | 8 ++++---- core/user_property.js | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 30af36f5f..f098ed0f2 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -93,7 +93,7 @@ module.exports = class Actor { // ], }; - const publicKeyPem = user.getProperty(UserProps.PublicKeyMain); + const publicKeyPem = user.getProperty(UserProps.PublicActivityPubSigningKey); if (!_.isEmpty(publicKeyPem)) { obj.publicKey = { id: userSelfUrl + '#main-key', @@ -102,13 +102,13 @@ module.exports = class Actor { }; EnigAssert( - !_.isEmpty(user.getProperty(UserProps.PrivateKeyMain)), + !_.isEmpty(user.getProperty(UserProps.PrivateActivityPubSigningKey)), 'User has public key but no private key!' ); } else { Log.warn( { username: user.username }, - `No public key (${UserProps.PublicKeyMain}) for user "${user.username}"` + `No public key (${UserProps.PublicActivityPubSigningKey}) for user "${user.username}"` ); } @@ -412,7 +412,7 @@ module.exports = class Actor { // ActorProps.Summary, // ActorProps.IconUrl, // ActorProps.BannerUrl, - // ActorProps.PublicKeyMain, + // ActorProps.PublicActivityPubSigningKey, // ]; // } diff --git a/core/activitypub_actor_property.js b/core/activitypub_actor_property.js index 91df8a292..cc866c073 100644 --- a/core/activitypub_actor_property.js +++ b/core/activitypub_actor_property.js @@ -14,7 +14,7 @@ exports.ActorProps = { Summary: 'summary', IconUrl: 'icon_url', BannerUrl: 'banner_url', - PublicKeyMain: 'public_key_main_rsa_pem', // RSA public key for user + PublicActivityPubSigningKey: 'public_key_activitypub_sign_rsa_pem', // RSA public key for user }; exports.AllActorProperties = Object.values(exports.ActorProps); diff --git a/core/user.js b/core/user.js index 6a69eca42..bacc18b7f 100644 --- a/core/user.js +++ b/core/user.js @@ -504,7 +504,7 @@ module.exports = class User { ); }, function setKeyPair(trans, callback) { - self.updateMainKeyPairProperties(err => { + self.updateActivityPubKeyPairProperties(err => { return callback(err, trans); }); }, @@ -643,7 +643,7 @@ module.exports = class User { ); } - updateMainKeyPairProperties(cb) { + updateActivityPubKeyPairProperties(cb) { crypto.generateKeyPair( 'rsa', { @@ -659,8 +659,8 @@ module.exports = class User { }, (err, publicKey, privateKey) => { if (!err) { - this.setProperty(UserProps.PrivateKeyMain, privateKey); - this.setProperty(UserProps.PublicKeyMain, publicKey); + this.setProperty(UserProps.PrivateActivityPubSigningKey, privateKey); + this.setProperty(UserProps.PublicActivityPubSigningKey, publicKey); } return cb(err); } diff --git a/core/user_property.js b/core/user_property.js index 82fa6b3bc..0cef0fd55 100644 --- a/core/user_property.js +++ b/core/user_property.js @@ -67,8 +67,8 @@ module.exports = { AuthFactor2OTPSecret: 'auth_factor2_otp_secret', // Secret used in conjunction with OTP 2FA AuthFactor2OTPBackupCodes: 'auth_factor2_otp_backup', // JSON array of backup codes - PublicKeyMain: 'public_key_main_rsa_pem', // RSA public key for user - PrivateKeyMain: 'private_key_main_rsa_pem', // RSA private key (corresponding to PublicKeyMain) + PublicActivityPubSigningKey: 'public_key_activitypub_sign_rsa_pem', // RSA public key for ActivityPub signing + PrivateActivityPubSigningKey: 'private_key_activitypub_sign_rsa_pem', // RSA private key (corresponding to PublicActivityPubSigningKey) ActivityPubSettings: 'activity_pub_settings', // JSON object (above); see ActivityPubSettings in activitypub/settings.js }; From 84dde6c5c54eced4a4850f2add0508abdeed4480 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Fri, 13 Jan 2023 13:26:12 -0600 Subject: [PATCH 062/233] Small bugfixes --- core/activitypub/util.js | 4 ++-- core/servers/content/web_handlers/activitypub.js | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/core/activitypub/util.js b/core/activitypub/util.js index be8e02823..1461c940c 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -99,8 +99,8 @@ function getUserProfileTemplatedBody( defaultContentType, cb ) { - const Log = require('./logger').log; - const Config = require('./config').get; + const Log = require('../logger').log; + const Config = require('../config').get; waterfall( [ diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index f77290d28..705ec1d2d 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -92,7 +92,9 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { 'application/ld+json', 'application/json', ]; - sendActor = accept.some(v => headerValues.includes(v)); + if (accept.some(v => headerValues.includes(v))) { + sendActor = true; + } if (sendActor) { return this._selfAsActorHandler(user, req, resp); From c796a856b15ba87db9b486e15c73d2698f581bdb Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Fri, 13 Jan 2023 16:03:09 -0600 Subject: [PATCH 063/233] Bug squashing and refactored inbox --- core/activitypub/activity.js | 4 +- .../content/web_handlers/activitypub.js | 166 +++++++++--------- 2 files changed, 86 insertions(+), 84 deletions(-) diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index 51aa64f5d..d5b3edac1 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -183,11 +183,11 @@ module.exports = class Activity { } sendTo(actorUrl, fromUser, webServer, cb) { - const privateKey = fromUser.getProperty(UserProps.PrivateKeyMain); + const privateKey = fromUser.getProperty(UserProps.PrivateActivityPubSigningKey); if (_.isEmpty(privateKey)) { return cb( Errors.MissingProperty( - `User "${fromUser.username}" is missing the '${UserProps.PrivateKeyMain}' property` + `User "${fromUser.username}" is missing the '${UserProps.PrivateActivityPubSigningKey}' property` ) ); } diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 705ec1d2d..a463eec90 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -130,24 +130,28 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { if (!activity.isValid()) { this.log.warn({ activity }, 'Invalid or unsupported Activity'); - return this.webServer.webServer.badRequest(resp); + return this.webServer.badRequest(resp); } - switch (activity.type) { - case 'Follow': - return this._inboxFollowRequestHandler( - signature, - activity, - req, - resp - ); + const activityFunctions = { + Follow: this._inboxFollowRequestHandler.bind(this), + // TODO: 'Create', 'Update', etc. + }; - default: - this.log.debug( - { type: activity.type }, - `Unsupported Activity type "${activity.type}"` - ); - return this.webServer.resourceNotFound(resp); + if (_.has(activityFunctions, activity.type)) { + return this._withUserRequestHandler( + signature, + activity, + activityFunctions[activity.type], + req, + resp + ); + } else { + this.log.debug( + { type: activity.type }, + `Unsupported Activity type "${activity.type}"` + ); + return this.webServer.resourceNotFound(resp); } }); } @@ -228,11 +232,70 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return keyId.endsWith('#main-key'); } - _inboxFollowRequestHandler(signature, activity, req, resp) { - this.log.trace( - { actor: activity.actor }, - `Follow request from ${activity.actor}` - ); + _inboxFollowRequestHandler(activity, user, resp) { + this.log.debug({ user: user, type: activity.type }, 'Got a follow request!'); + // :TODO: return OK and kick off a async job of persisting and sending and 'Accepted' + + // + // If the user blindly accepts Followers, we can persist + // and send an 'Accept' now. Otherwise, we need to queue this + // request for the user to review and decide what to do with + // at a later time. + // + // :TODO: Implement the queue + const activityPubSettings = ActivityPubSettings.fromUser(user); + if (!activityPubSettings.manuallyApproveFollowers) { + Actor.fromLocalUser(user, this.webServer, (err, localActor) => { + if (err) { + return this.log.warn( + { user: user, error: err.message }, + 'Failed to load local Actor for "Accept"' + ); + } + + const accept = Activity.makeAccept(this.webServer, localActor, activity); + + accept.sendTo( + localActor.inbox, + user, + this.webServer, + (err, respBody, res) => { + if (err) { + return this.log.warn( + { + inbox: localActor.inbox, + statusCode: res.statusCode, + error: err.message, + }, + 'Failed POSTing "Accept" to inbox' + ); + } + + if (res.statusCode !== 202 && res.statusCode !== 200) { + return this.log.warn( + { + inbox: localActor.inbox, + statusCode: res.statusCode, + }, + 'Unexpected status code' + ); + } + + this.log.trace( + { inbox: localActor.inbox }, + 'Remote server received our "Accept" successfully' + ); + } + ); + }); + } + + resp.writeHead(200, { 'Content-Type': 'text/html' }); + return resp.end(''); + } + + _withUserRequestHandler(signature, activity, activityHandler, req, resp) { + this.log.trace({ actor: activity.actor }, `Inbox request from ${activity.actor}`); // :TODO: trace const accountName = accountFromSelfUrl(activity.object); @@ -274,68 +337,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.accessDenied(resp); } - // :TODO: return OK and kick off a async job of persisting and sending and 'Accepted' - - // - // If the user blindly accepts Followers, we can persist - // and send an 'Accept' now. Otherwise, we need to queue this - // request for the user to review and decide what to do with - // at a later time. - // - // :TODO: Implement the queue - const activityPubSettings = ActivityPubSettings.fromUser(user); - if (!activityPubSettings.manuallyApproveFollowers) { - Actor.fromLocalUser(user, this.webServer, (err, localActor) => { - if (err) { - return this.log.warn( - { inbox: actor.inbox, error: err.message }, - 'Failed to load local Actor for "Accept"' - ); - } - - const accept = Activity.makeAccept( - this.webServer, - localActor, - activity - ); - - accept.sendTo( - actor.inbox, - user, - this.webServer, - (err, respBody, res) => { - if (err) { - return this.log.warn( - { - inbox: actor.inbox, - statusCode: res.statusCode, - error: err.message, - }, - 'Failed POSTing "Accept" to inbox' - ); - } - - if (res.statusCode !== 202 && res.statusCode !== 200) { - return this.log.warn( - { - inbox: actor.inbox, - statusCode: res.statusCode, - }, - 'Unexpected status code' - ); - } - - this.log.trace( - { inbox: actor.inbox }, - 'Remote server received our "Accept" successfully' - ); - } - ); - }); - } - - resp.writeHead(200, { 'Content-Type': 'text/html' }); - return resp.end(''); + return activityHandler(activity, user, resp); }); }); } From 315d77b1c035fd5d448208ec4cbaae452ab2f6e7 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 13 Jan 2023 21:27:02 -0700 Subject: [PATCH 064/233] Start Collection, some extra Actor props, start Followers, cleanup/DRY/etc. --- core/activitypub/activity.js | 5 +- core/activitypub/actor.js | 24 +++- core/activitypub/collection.js | 48 +++++++ core/activitypub/db.js | 43 ++++++ core/activitypub/settings.js | 4 +- core/database.js | 11 ++ .../content/web_handlers/activitypub.js | 133 +++++++++++++++--- 7 files changed, 241 insertions(+), 27 deletions(-) create mode 100644 core/activitypub/collection.js diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index 51aa64f5d..ba4de49db 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -151,6 +151,7 @@ module.exports = class Activity { ); } + // :TODO: move to Collection static fromOutboxEntries(owningUser, webServer, cb) { // :TODO: support paging const getOpts = { @@ -183,11 +184,11 @@ module.exports = class Activity { } sendTo(actorUrl, fromUser, webServer, cb) { - const privateKey = fromUser.getProperty(UserProps.PrivateKeyMain); + const privateKey = fromUser.getProperty(UserProps.PrivateActivityPubSigningKey); if (_.isEmpty(privateKey)) { return cb( Errors.MissingProperty( - `User "${fromUser.username}" is missing the '${UserProps.PrivateKeyMain}' property` + `User "${fromUser.username}" is missing the '${UserProps.PrivateActivityPubSigningKey}' property` ) ); } diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index f098ed0f2..82f07e8c8 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -14,12 +14,13 @@ const { const Log = require('../logger').log; const { queryWebFinger } = require('../webfinger'); const EnigAssert = require('../enigma_assert'); +const ActivityPubSettings = require('./settings'); // deps const _ = require('lodash'); const https = require('https'); - const isString = require('lodash/isString'); +const mimeTypes = require('mime-types'); // https://www.w3.org/TR/activitypub/#actor-objects module.exports = class Actor { @@ -63,6 +64,21 @@ module.exports = class Actor { // :TODO: from a User object static fromLocalUser(user, webServer, cb) { const userSelfUrl = selfUrl(webServer, user); + const userSettings = ActivityPubSettings.fromUser(user); + + const addImage = (o, t) => { + const url = userSettings[t]; + if (url) { + const mt = mimeTypes.contentType(url); + if (mt) { + o[t] = { + mediaType: mt, + type: 'Image', + url, + }; + } + } + }; const obj = { '@context': [ @@ -82,7 +98,8 @@ module.exports = class Actor { following: makeUserUrl(webServer, user, '/ap/users/') + '/following', summary: user.getProperty(UserProps.AutoSignature) || '', url: webFingerProfileUrl(webServer, user), - + manuallyApprovesFollowers: userSettings.manuallyApprovesFollowers, + discoverable: userSettings.discoverable, // :TODO: we can start to define BBS related stuff with the community perhaps // attachment: [ // { @@ -93,6 +110,9 @@ module.exports = class Actor { // ], }; + addImage('icon'); + addImage('image'); + const publicKeyPem = user.getProperty(UserProps.PublicActivityPubSigningKey); if (!_.isEmpty(publicKeyPem)) { obj.publicKey = { diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js new file mode 100644 index 000000000..5aed8cdec --- /dev/null +++ b/core/activitypub/collection.js @@ -0,0 +1,48 @@ +const { ActivityStreamsContext, makeUserUrl } = require('./util'); +const { FollowerEntryStatus, getFollowerEntries } = require('./db'); + +module.exports = class Collection { + constructor(obj) { + this['@context'] = ActivityStreamsContext; + Object.assign(this, obj); + } + + static followers(owningUser, page, webServer, cb) { + if (!page) { + const followersUrl = + makeUserUrl(webServer, owningUser, '/ap/users/') + '/followers'; + + const obj = { + id: followersUrl, + type: 'OrderedCollection', + first: `${followersUrl}?page=1`, + totalItems: 1, + }; + + return cb(null, new Collection(obj)); + } + + // :TODO: actually support paging... + page = parseInt(page); + const getOpts = { + status: FollowerEntryStatus.Accepted, + }; + getFollowerEntries(owningUser, getOpts, (err, followers) => { + if (err) { + return cb(err); + } + + const baseId = makeUserUrl(webServer, owningUser, '/ap/users') + '/followers'; + + const obj = { + id: `${baseId}/page=${page}`, + type: 'OrderedCollectionPage', + totalItems: followers.length, + orderedItems: followers, + partOf: baseId, + }; + + return cb(null, new Collection(obj)); + }); + } +}; diff --git a/core/activitypub/db.js b/core/activitypub/db.js index 711d2f6a7..911e51d06 100644 --- a/core/activitypub/db.js +++ b/core/activitypub/db.js @@ -2,6 +2,16 @@ const apDb = require('../database').dbs.activitypub; exports.persistToOutbox = persistToOutbox; exports.getOutboxEntries = getOutboxEntries; +exports.persistFollower = persistFollower; +exports.getFollowerEntries = getFollowerEntries; + +const FollowerEntryStatus = { + Invalid: 0, // Invalid + Requested: 1, // Entry is a *request* to local user + Accepted: 2, // Accepted by local user + Rejected: 3, // Rejected by local user +}; +exports.FollowerEntryStatus = FollowerEntryStatus; function persistToOutbox(activity, fromUser, message, cb) { const activityJson = JSON.stringify(activity); @@ -55,3 +65,36 @@ function getOutboxEntries(owningUser, options, cb) { } ); } + +function persistFollower(localUser, remoteActor, options, cb) { + const status = options.status || FollowerEntryStatus.Requested; + + apDb.run( + `INSERT OR IGNORE INTO followers (user_id, follower_id, status) + VALUES (?, ?, ?);`, + [localUser.userId, remoteActor.id, status], + function res(err) { + // non-arrow for 'this' scope + return cb(err, this.lastID); + } + ); +} + +function getFollowerEntries(localUser, options, cb) { + const status = options.status || FollowerEntryStatus.Accepted; + + apDb.all( + `SELECT follower_id + FROM followers + WHERE user_id = ? AND status = ?;`, + [localUser.userId, status], + (err, rows) => { + if (err) { + return cb(err); + } + + const entries = rows.map(r => r.follower_id); + return cb(null, entries); + } + ); +} diff --git a/core/activitypub/settings.js b/core/activitypub/settings.js index d71a97524..7b09e6ef2 100644 --- a/core/activitypub/settings.js +++ b/core/activitypub/settings.js @@ -6,8 +6,8 @@ module.exports = class ActivityPubSettings { this.manuallyApproveFollowers = false; this.hideSocialGraph = false; // followers, following this.showRealName = false; - this.imageUrl = ''; - this.iconUrl = ''; + this.image = ''; + this.icon = ''; if (obj) { Object.assign(this, obj); diff --git a/core/database.js b/core/database.js index 6cc13f669..63e43e110 100644 --- a/core/database.js +++ b/core/database.js @@ -531,6 +531,17 @@ dbs.message.run( ON outbox (json_extract(activity_json, '$.type'));` ); + dbs.activitypub.run( + `CREATE TABLE IF NOT EXISTS followers ( + id INTEGER PRIMARY KEY, -- Local ID + user_id INTEGER NOT NULL, -- Local user ID + follower_id VARCHAR NOT NULL, -- Actor ID of follower + status INTEGER NOT NULL, -- Status: See FollowerEntryStatus + + UNIQUE(user_id, follower_id) + );` + ); + return cb(null); }, }; diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 705ec1d2d..5d0311d19 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -9,11 +9,14 @@ const Config = require('../../../config').get; const Activity = require('../../../activitypub/activity'); const ActivityPubSettings = require('../../../activitypub/settings'); const Actor = require('../../../activitypub/actor'); +const Collection = require('../../../activitypub/collection'); +const { persistFollower, FollowerEntryStatus } = require('../../../activitypub/db'); // deps const _ = require('lodash'); const enigma_assert = require('../../../enigma_assert'); const httpSignature = require('http-signature'); +const async = require('async'); exports.moduleInfo = { name: 'ActivityPub', @@ -49,10 +52,16 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { this.webServer.addRoute({ method: 'GET', - path: /^\/_enig\/ap\/users\/.+\/outbox(\?page=true)?$/, + path: /^\/_enig\/ap\/users\/.+\/outbox$/, handler: this._outboxGetHandler.bind(this), }); + this.webServer.addRoute({ + method: 'GET', + path: /^\/_enig\/ap\/users\/.+\/followers(\?page=[0-9]+)?$/, + handler: this._followersGetHandler.bind(this), + }); + // :TODO: NYI // this.webServer.addRoute({ // method: 'GET', @@ -164,12 +173,11 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { // /_enig/ap/users/SomeName/outbox -> SomeName const url = new URL(req.url, `https://${req.headers.host}`); - const m = url.pathname.match(/^\/_enig\/ap\/users\/(.+)\/outbox$/); - if (!m || !m[1]) { + const accountName = this._accountNameFromUserPath(url, 'outbox'); + if (!accountName) { return this.webServer.resourceNotFound(resp); } - const accountName = m[1]; userFromAccount(accountName, (err, user) => { if (err) { this.log.info( @@ -197,6 +205,61 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } + _accountNameFromUserPath(url, suffix) { + const re = new RegExp(`^/_enig/ap/users/(.+)/${suffix}(\\?page=[0-9]+)?$`); + const m = url.pathname.match(re); + if (!m || !m[1]) { + return null; + } + return m[1]; + } + + _followersGetHandler(req, resp) { + this.log.trace({ url: req.url }, 'Request for "followers"'); + + // :TODO: dry this stuff.. + + // the request must be signed, and the signature must be valid + const signature = this._parseAndValidateSignature(req); + if (!signature) { + return this.webServer.accessDenied(resp); + } + + // /_enig/ap/users/SomeName/outbox -> SomeName + const url = new URL(req.url, `https://${req.headers.host}`); + const accountName = this._accountNameFromUserPath(url, 'followers'); + if (!accountName) { + return this.webServer.resourceNotFound(resp); + } + + userFromAccount(accountName, (err, user) => { + if (err) { + this.log.info( + { reason: err.message, accountName: accountName }, + `No user "${accountName}" for "self"` + ); + return this.webServer.resourceNotFound(resp); + } + + const page = url.searchParams.get('page'); + Collection.followers(user, page, this.webServe, (err, collection) => { + if (err) { + // :TODO: LOG ME + return this.webServer.internalServerError(resp); + } + + const body = JSON.stringify(collection); + const headers = { + 'Content-Type': ActivityJsonMime, + 'Content-Length': body.length, + }; + + resp.writeHead(200, headers); + return resp.end(body); + }); + }); + } + _parseAndValidateSignature(req) { let signature; try { @@ -285,59 +348,87 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { // :TODO: Implement the queue const activityPubSettings = ActivityPubSettings.fromUser(user); if (!activityPubSettings.manuallyApproveFollowers) { - Actor.fromLocalUser(user, this.webServer, (err, localActor) => { + this._recordAcceptedFollowRequest(user, actor, activity); + } + + resp.writeHead(200, { 'Content-Type': 'text/html' }); + return resp.end(''); + }); + }); + } + + _recordAcceptedFollowRequest(localUser, remoteActor, requestActivity) { + async.series( + [ + callback => { + const persistOpts = { + status: FollowerEntryStatus.Accepted, + }; + return persistFollower(localUser, remoteActor, persistOpts, callback); + }, + callback => { + Actor.fromLocalUser(localUser, this.webServer, (err, localActor) => { if (err) { - return this.log.warn( - { inbox: actor.inbox, error: err.message }, + this.log.warn( + { inbox: remoteActor.inbox, error: err.message }, 'Failed to load local Actor for "Accept"' ); + return callback(err); } const accept = Activity.makeAccept( this.webServer, localActor, - activity + requestActivity ); accept.sendTo( - actor.inbox, - user, + remoteActor.inbox, + localUser, this.webServer, (err, respBody, res) => { if (err) { - return this.log.warn( + this.log.warn( { - inbox: actor.inbox, - statusCode: res.statusCode, + inbox: remoteActor.inbox, error: err.message, }, 'Failed POSTing "Accept" to inbox' ); + return callback(null); // just a warning } if (res.statusCode !== 202 && res.statusCode !== 200) { - return this.log.warn( + this.log.warn( { - inbox: actor.inbox, + inbox: remoteActor.inbox, statusCode: res.statusCode, }, 'Unexpected status code' ); + return callback(null); // just a warning } this.log.trace( - { inbox: actor.inbox }, + { inbox: remoteActor.inbox }, 'Remote server received our "Accept" successfully' ); + + return callback(null); } ); }); + }, + ], + err => { + if (err) { + this.log.error( + { error: err.message }, + 'Failed processing Follow request' + ); } - - resp.writeHead(200, { 'Content-Type': 'text/html' }); - return resp.end(''); - }); - }); + } + ); } _authorizeInteractionHandler(req, resp) { From 4841823d678a78c01476c7a39d305370299f3d05 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Fri, 13 Jan 2023 23:16:55 -0600 Subject: [PATCH 065/233] Additional merge changes --- .../content/web_handlers/activitypub.js | 44 +------------------ 1 file changed, 1 insertion(+), 43 deletions(-) diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 1dd6181f6..4f61616b5 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -308,49 +308,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { // :TODO: Implement the queue const activityPubSettings = ActivityPubSettings.fromUser(user); if (!activityPubSettings.manuallyApproveFollowers) { - Actor.fromLocalUser(user, this.webServer, (err, localActor) => { - if (err) { - return this.log.warn( - { user: user, error: err.message }, - 'Failed to load local Actor for "Accept"' - ); - } - - const accept = Activity.makeAccept(this.webServer, localActor, activity); - - accept.sendTo( - localActor.inbox, - user, - this.webServer, - (err, respBody, res) => { - if (err) { - return this.log.warn( - { - inbox: localActor.inbox, - statusCode: res.statusCode, - error: err.message, - }, - 'Failed POSTing "Accept" to inbox' - ); - } - - if (res.statusCode !== 202 && res.statusCode !== 200) { - return this.log.warn( - { - inbox: localActor.inbox, - statusCode: res.statusCode, - }, - 'Unexpected status code' - ); - } - - this.log.trace( - { inbox: localActor.inbox }, - 'Remote server received our "Accept" successfully' - ); - } - ); - }); + this._recordAcceptedFollowRequest(user, activity.actor, activity); } resp.writeHead(200, { 'Content-Type': 'text/html' }); From b075e25330ff95f4f795b202862af695e142edd5 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 13 Jan 2023 23:55:05 -0700 Subject: [PATCH 066/233] Cleanup --- core/http_util.js | 97 +++++-------------- .../content/web_handlers/activitypub.js | 27 ++++-- 2 files changed, 42 insertions(+), 82 deletions(-) diff --git a/core/http_util.js b/core/http_util.js index e1d0733bd..5458198be 100644 --- a/core/http_util.js +++ b/core/http_util.js @@ -10,15 +10,9 @@ exports.getJson = getJson; exports.postJson = postJson; function getJson(url, options, cb) { - const defaultOptions = { - method: 'GET', - }; + options = Object.assign({}, { method: 'GET' }, options); - options = Object.assign({}, defaultOptions, options); - - // :TODO: signing -- DRY this. - - _makeRequest(url, options, (err, body, res) => { + return _makeRequest(url, options, (err, body, res) => { if (err) { return cb(err); } @@ -39,27 +33,29 @@ function postJson(url, json, options, cb) { json = JSON.stringify(json); } - // :TODO: DRY this method with _makeRequest() - - const defaultOptions = { - method: 'POST', - body: json, - headers: { - 'Content-Type': 'application/json', - }, - }; + options = Object.assign({}, { method: 'POST', body: json }, options); + if ( + !options.headers || + !Object.keys(options.headers).find(h => h.toLowerCase() === 'content-type') + ) { + options.headers['Content-Type'] = 'application/json'; + } - options = Object.assign({}, defaultOptions, options); + return _makeRequest(url, options, cb); +} - if (options?.sign?.headers?.includes('digest')) { - options.headers['Digest'] = `SHA-256=${crypto - .createHash('sha256') - .update(json) - .digest('base64')}`; +function _makeRequest(url, options, cb) { + if (options.body) { + options.headers['Content-Length'] = options.body.length; + + if (options?.sign?.headers?.includes('digest')) { + options.headers['Digest'] = `SHA-256=${crypto + .createHash('sha256') + .update(options.body) + .digest('base64')}`; + } } - options.headers['Content-Length'] = json.length; - const req = https.request(url, options, res => { let body = []; res.on('data', d => { @@ -73,9 +69,7 @@ function postJson(url, json, options, cb) { return cb( Errors.HttpError( `HTTP error ${res.statusCode}: ${truncate(body, { length: 128 })}` - ), - body, - res + ) ); } @@ -101,52 +95,5 @@ function postJson(url, json, options, cb) { return cb(Errors.Timeout('Timeout making HTTP request')); }); - req.write(json); - req.end(); -} - -function _makeRequest(url, options, cb) { - if (options.body && options?.sign?.headers?.includes('digest')) { - options.headers['Digest'] = `SHA-256=${crypto - .createHash('sha256') - .update(options.body) - .digest('base64')}`; - } - - const req = https.request(url, options, res => { - let body = []; - res.on('data', d => { - body.push(d); - }); - - res.on('end', () => { - body = Buffer.concat(body).toString(); - - if (res.statusCode < 200 || res.statusCode > 299) { - return cb(Errors.HttpError(`HTTP error ${res.statusCode}: ${body}`)); - } - - return cb(null, body, res); - }); - }); - - if (isObject(options.sign)) { - try { - httpSignature.sign(req, options.sign); - } catch (e) { - req.destroy(); - return cb(Errors.Invalid(`Invalid signing material: ${e}`)); - } - } - - req.on('error', err => { - return cb(err); - }); - - req.on('timeout', () => { - req.destroy(); - return cb(Errors.Timeout('Timeout making HTTP request')); - }); - req.end(); } diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 4f61616b5..b98951be9 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -53,7 +53,10 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { this.webServer.addRoute({ method: 'GET', path: /^\/_enig\/ap\/users\/.+\/outbox$/, - handler: this._outboxGetHandler.bind(this), + handler: this._enforceSigningPolicy.bind( + this, + this._outboxGetHandler.bind(this) + ), }); this.webServer.addRoute({ @@ -72,6 +75,16 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return cb(null); } + _enforceSigningPolicy(req, resp, next) { + // the request must be signed, and the signature must be valid + const signature = this._parseAndValidateSignature(req); + if (!signature) { + return this.webServer.accessDenied(resp); + } + + return next(req, resp); + } + _selfUrlRequestHandler(req, resp) { this.log.trace({ url: req.url }, 'Request for "self"'); @@ -295,9 +308,8 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return keyId.endsWith('#main-key'); } - _inboxFollowRequestHandler(activity, user, resp) { - this.log.debug({ user: user, type: activity.type }, 'Got a follow request!'); - // :TODO: return OK and kick off a async job of persisting and sending and 'Accepted' + _inboxFollowRequestHandler(activity, remoteActor, user, resp) { + this.log.debug({ user_id: user.userId, actor: activity.actor }, 'Follow request'); // // If the user blindly accepts Followers, we can persist @@ -305,10 +317,11 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { // request for the user to review and decide what to do with // at a later time. // - // :TODO: Implement the queue const activityPubSettings = ActivityPubSettings.fromUser(user); if (!activityPubSettings.manuallyApproveFollowers) { - this._recordAcceptedFollowRequest(user, activity.actor, activity); + this._recordAcceptedFollowRequest(user, remoteActor, activity); + } else { + // :TODO: queue the request } resp.writeHead(200, { 'Content-Type': 'text/html' }); @@ -358,7 +371,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.accessDenied(resp); } - return activityHandler(activity, user, resp); + return activityHandler(activity, actor, user, resp); }); }); } From 930308e07feda56f0ae4b6915c4ef2ecb1263177 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 19 Jan 2023 22:31:14 -0700 Subject: [PATCH 067/233] Fix POST to Accept Follow Request --- core/activitypub/activity.js | 60 +++++++------------ core/activitypub/actor.js | 2 +- core/activitypub/collection.js | 3 +- core/http_util.js | 10 ++-- .../content/web_handlers/activitypub.js | 13 ++-- 5 files changed, 39 insertions(+), 49 deletions(-) diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index ba4de49db..88e2bfd14 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -1,9 +1,6 @@ -const { - ActivityStreamsContext, - messageBodyToHtml, - selfUrl, - makeUserUrl, -} = require('./util'); +const { messageBodyToHtml, selfUrl, makeUserUrl } = require('./util'); +const { ActivityStreamsContext, WellKnownActivityTypes } = require('./const'); +const ActivityPubObject = require('./object'); const User = require('../user'); const Actor = require('./actor'); const { Errors } = require('../enig_error'); @@ -14,31 +11,18 @@ const { getOutboxEntries } = require('./db'); const { WellKnownLocations } = require('../servers/content/web'); // deps -const { isString, isObject } = require('lodash'); +//const { isString, isObject } = require('lodash'); const { v4: UUIDv4 } = require('uuid'); const async = require('async'); const _ = require('lodash'); -module.exports = class Activity { +module.exports = class Activity extends ActivityPubObject { constructor(obj) { - this['@context'] = ActivityStreamsContext; - Object.assign(this, obj); + super(obj); } static get ActivityTypes() { - return [ - 'Create', - 'Update', - 'Delete', - 'Follow', - 'Accept', - 'Reject', - 'Add', - 'Remove', - 'Like', - 'Announce', - 'Undo', - ]; + return WellKnownActivityTypes; } static fromJsonString(json) { @@ -46,21 +30,21 @@ module.exports = class Activity { return new Activity(parsed); } - isValid() { - if ( - this['@context'] !== ActivityStreamsContext || - !isString(this.id) || - !isString(this.actor) || - (!isString(this.object) && !isObject(this.object)) || - !Activity.ActivityTypes.includes(this.type) - ) { - return false; - } - - // :TODO: Additional validation - - return true; - } + // isValid() { + // if ( + // this['@context'] !== ActivityStreamsContext || + // !isString(this.id) || + // !isString(this.actor) || + // (!isString(this.object) && !isObject(this.object)) || + // !Activity.ActivityTypes.includes(this.type) + // ) { + // return false; + // } + + // // :TODO: Additional validation + + // return true; + // } // https://www.w3.org/TR/activitypub/#accept-activity-inbox static makeAccept(webServer, localActor, followRequest, id = null) { diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 82f07e8c8..a04fcaf14 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -9,8 +9,8 @@ const { makeUserUrl, selfUrl, isValidLink, - ActivityStreamsContext, } = require('../activitypub/util'); +const { ActivityStreamsContext } = require('./const'); const Log = require('../logger').log; const { queryWebFinger } = require('../webfinger'); const EnigAssert = require('../enigma_assert'); diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index 5aed8cdec..4d7214f58 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -1,4 +1,5 @@ -const { ActivityStreamsContext, makeUserUrl } = require('./util'); +const { makeUserUrl } = require('./util'); +const { ActivityStreamsContext } = require('./const'); const { FollowerEntryStatus, getFollowerEntries } = require('./db'); module.exports = class Collection { diff --git a/core/http_util.js b/core/http_util.js index 5458198be..249df24bf 100644 --- a/core/http_util.js +++ b/core/http_util.js @@ -49,10 +49,9 @@ function _makeRequest(url, options, cb) { options.headers['Content-Length'] = options.body.length; if (options?.sign?.headers?.includes('digest')) { - options.headers['Digest'] = `SHA-256=${crypto - .createHash('sha256') - .update(options.body) - .digest('base64')}`; + options.headers['Digest'] = + 'SHA-256=' + + crypto.createHash('sha256').update(options.body).digest('base64'); } } @@ -95,5 +94,8 @@ function _makeRequest(url, options, cb) { return cb(Errors.Timeout('Timeout making HTTP request')); }); + if (options.body) { + req.write(options.body); + } req.end(); } diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index b98951be9..c7a470508 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -53,10 +53,13 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { this.webServer.addRoute({ method: 'GET', path: /^\/_enig\/ap\/users\/.+\/outbox$/, - handler: this._enforceSigningPolicy.bind( - this, - this._outboxGetHandler.bind(this) - ), + handler: (req, resp) => { + return this._enforceSigningPolicy( + req, + resp, + this._outboxGetHandler.bind(this) + ); + }, }); this.webServer.addRoute({ @@ -259,7 +262,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } const page = url.searchParams.get('page'); - Collection.followers(user, page, this.webServe, (err, collection) => { + Collection.followers(user, page, this.webServer, (err, collection) => { if (err) { // :TODO: LOG ME return this.webServer.internalServerError(resp); From 9517b292a4d1c68b1148350a170e7b7b3214f2ad Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 20 Jan 2023 16:03:27 -0700 Subject: [PATCH 068/233] Work on shifting code to generic collections, etc. --- core/activitypub/activity.js | 17 --- core/activitypub/collection.js | 116 +++++++++++++----- core/activitypub/db.js | 35 ------ core/database.js | 18 +-- .../content/web_handlers/activitypub.js | 7 +- 5 files changed, 96 insertions(+), 97 deletions(-) diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index 88e2bfd14..bd06f3379 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -11,7 +11,6 @@ const { getOutboxEntries } = require('./db'); const { WellKnownLocations } = require('../servers/content/web'); // deps -//const { isString, isObject } = require('lodash'); const { v4: UUIDv4 } = require('uuid'); const async = require('async'); const _ = require('lodash'); @@ -30,22 +29,6 @@ module.exports = class Activity extends ActivityPubObject { return new Activity(parsed); } - // isValid() { - // if ( - // this['@context'] !== ActivityStreamsContext || - // !isString(this.id) || - // !isString(this.actor) || - // (!isString(this.object) && !isObject(this.object)) || - // !Activity.ActivityTypes.includes(this.type) - // ) { - // return false; - // } - - // // :TODO: Additional validation - - // return true; - // } - // https://www.w3.org/TR/activitypub/#accept-activity-inbox static makeAccept(webServer, localActor, followRequest, id = null) { id = id || Activity._makeFullId(webServer, 'accept'); diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index 4d7214f58..084d5fd16 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -1,49 +1,99 @@ const { makeUserUrl } = require('./util'); -const { ActivityStreamsContext } = require('./const'); -const { FollowerEntryStatus, getFollowerEntries } = require('./db'); +const ActivityPubObject = require('./object'); +const apDb = require('../database').dbs.activitypub; +const { getISOTimestampString } = require('../database'); +const { isString } = require('lodash'); -module.exports = class Collection { +module.exports = class Collection extends ActivityPubObject { constructor(obj) { - this['@context'] = ActivityStreamsContext; - Object.assign(this, obj); + super(obj); } - static followers(owningUser, page, webServer, cb) { + static getOrdered(name, owningUser, includePrivate, page, mapper, webServer, cb) { + // :TODD: |includePrivate| handling + const followersUrl = + makeUserUrl(webServer, owningUser, '/ap/users/') + `/${name}`; if (!page) { - const followersUrl = - makeUserUrl(webServer, owningUser, '/ap/users/') + '/followers'; + return apDb.get( + `SELECT COUNT(id) AS count + FROM collection_entry + WHERE name = ?;`, + [name], + (err, row) => { + if (err) { + return cb(err); + } - const obj = { - id: followersUrl, - type: 'OrderedCollection', - first: `${followersUrl}?page=1`, - totalItems: 1, - }; + const obj = { + id: followersUrl, + type: 'OrderedCollection', + first: `${followersUrl}?page=1`, + totalItems: row.count, + }; - return cb(null, new Collection(obj)); + return cb(null, new Collection(obj)); + } + ); } - // :TODO: actually support paging... - page = parseInt(page); - const getOpts = { - status: FollowerEntryStatus.Accepted, - }; - getFollowerEntries(owningUser, getOpts, (err, followers) => { - if (err) { - return cb(err); + // :TODO: actual paging... + apDb.all( + `SELECT entry_json + FROM collection_entry + WHERE user_id = ? AND name = ? + ORDER BY timestamp;`, + [owningUser.userId, name], + (err, entries) => { + if (err) { + return cb(err); + } + + if (mapper) { + entries = entries.map(mapper); + } + + const obj = { + id: `${followersUrl}/page=${page}`, + type: 'OrderedCollectionPage', + totalItems: entries.length, + orderedItems: entries, + partOf: followersUrl, + }; + + return cb(null, new Collection(obj)); } + ); + } - const baseId = makeUserUrl(webServer, owningUser, '/ap/users') + '/followers'; + static followers(owningUser, page, webServer, cb) { + return Collection.getOrdered( + 'followers', + owningUser, + false, + page, + e => e.id, + webServer, + cb + ); + } + + static addToCollection(name, owningUser, entry, cb) { + if (!isString(entry)) { + entry = JSON.stringify(entry); + } - const obj = { - id: `${baseId}/page=${page}`, - type: 'OrderedCollectionPage', - totalItems: followers.length, - orderedItems: followers, - partOf: baseId, - }; + apDb.run( + `INSERT INTO collection_entry (name, timestamp, user_id, entry_json) + VALUES (?, ?, ?, ?);`, + [name, getISOTimestampString(), owningUser.userId, entry], + function res(err) { + // non-arrow for 'this' scope + return cb(err, this.lastID); + } + ); + } - return cb(null, new Collection(obj)); - }); + static addFollower(owningUser, followingActor, cb) { + return Collection.addToCollection('followers', owningUser, followingActor, cb); } }; diff --git a/core/activitypub/db.js b/core/activitypub/db.js index 911e51d06..7bb3275a6 100644 --- a/core/activitypub/db.js +++ b/core/activitypub/db.js @@ -2,8 +2,6 @@ const apDb = require('../database').dbs.activitypub; exports.persistToOutbox = persistToOutbox; exports.getOutboxEntries = getOutboxEntries; -exports.persistFollower = persistFollower; -exports.getFollowerEntries = getFollowerEntries; const FollowerEntryStatus = { Invalid: 0, // Invalid @@ -65,36 +63,3 @@ function getOutboxEntries(owningUser, options, cb) { } ); } - -function persistFollower(localUser, remoteActor, options, cb) { - const status = options.status || FollowerEntryStatus.Requested; - - apDb.run( - `INSERT OR IGNORE INTO followers (user_id, follower_id, status) - VALUES (?, ?, ?);`, - [localUser.userId, remoteActor.id, status], - function res(err) { - // non-arrow for 'this' scope - return cb(err, this.lastID); - } - ); -} - -function getFollowerEntries(localUser, options, cb) { - const status = options.status || FollowerEntryStatus.Accepted; - - apDb.all( - `SELECT follower_id - FROM followers - WHERE user_id = ? AND status = ?;`, - [localUser.userId, status], - (err, rows) => { - if (err) { - return cb(err); - } - - const entries = rows.map(r => r.follower_id); - return cb(null, entries); - } - ); -} diff --git a/core/database.js b/core/database.js index 63e43e110..45b9f0b5f 100644 --- a/core/database.js +++ b/core/database.js @@ -532,16 +532,20 @@ dbs.message.run( ); dbs.activitypub.run( - `CREATE TABLE IF NOT EXISTS followers ( - id INTEGER PRIMARY KEY, -- Local ID - user_id INTEGER NOT NULL, -- Local user ID - follower_id VARCHAR NOT NULL, -- Actor ID of follower - status INTEGER NOT NULL, -- Status: See FollowerEntryStatus - - UNIQUE(user_id, follower_id) + `CREATE TABLE IF NOT EXISTS collection_entry ( + id INTEGER PRIMARY KEY, -- Auto-generated key + name VARCHAR NOT NULL, -- examples: followers, follows, ... + timestamp DATETIME NOT NULL, -- Timestamp in which this entry was created + user_id INTEGER NOT NULL, -- Local, owning user ID + entry_json VARCHAR NOT NULL -- Varies by collection );` ); + dbs.activitypub.run( + `CREATE INDEX IF NOT EXISTS collection_entry_unique_index0 + ON collection_entry (name, user_id, json_extract(entry_json, '$.id'))` + ); + return cb(null); }, }; diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index c7a470508..ea0004d85 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -10,7 +10,6 @@ const Activity = require('../../../activitypub/activity'); const ActivityPubSettings = require('../../../activitypub/settings'); const Actor = require('../../../activitypub/actor'); const Collection = require('../../../activitypub/collection'); -const { persistFollower, FollowerEntryStatus } = require('../../../activitypub/db'); // deps const _ = require('lodash'); @@ -383,10 +382,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { async.series( [ callback => { - const persistOpts = { - status: FollowerEntryStatus.Accepted, - }; - return persistFollower(localUser, remoteActor, persistOpts, callback); + return Collection.addFollower(localUser, remoteActor, callback); }, callback => { Actor.fromLocalUser(localUser, this.webServer, (err, localActor) => { @@ -444,6 +440,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { ], err => { if (err) { + // :TODO: move this request to the "Request queue" for the user to try later this.log.error( { error: err.message }, 'Failed processing Follow request' From d9e4b66a35a869ff9d235406b5d5e988df1e7aa4 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 20 Jan 2023 22:15:59 -0700 Subject: [PATCH 069/233] Cleanup, DRY, logging --- core/activitypub/actor.js | 40 ++----- core/activitypub/collection.js | 79 +++++++++----- core/database.js | 9 +- core/servers/content/web.js | 5 +- .../content/web_handlers/activitypub.js | 101 +++++++++++------- 5 files changed, 133 insertions(+), 101 deletions(-) diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index a04fcaf14..721a5e4de 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -18,9 +18,9 @@ const ActivityPubSettings = require('./settings'); // deps const _ = require('lodash'); -const https = require('https'); const isString = require('lodash/isString'); const mimeTypes = require('mime-types'); +const { getJson } = require('../http_util.js'); // https://www.w3.org/TR/activitypub/#actor-objects module.exports = class Actor { @@ -141,40 +141,18 @@ module.exports = class Actor { }; // :TODO: use getJson() - - https.get(url, { headers }, res => { - if (res.statusCode !== 200) { - return cb(Errors.Invalid(`Bad HTTP status code: ${res.statusCode}`)); - } - - const contentType = res.headers['content-type']; - if ( - !_.isString(contentType) || - !contentType.startsWith('application/activity+json') - ) { - return cb(Errors.Invalid(`Invalid Content-Type: ${contentType}`)); + getJson(url, { headers }, (err, actor) => { + if (err) { + return cb(err); } - res.setEncoding('utf8'); - let body = ''; - res.on('data', data => { - body += data; - }); + actor = new Actor(actor); - res.on('end', () => { - let actor; - try { - actor = Actor.fromJsonString(body); - } catch (e) { - return cb(e); - } - - if (!actor.isValid()) { - return cb(Errors.Invalid('Invalid Actor')); - } + if (!actor.isValid()) { + return cb(Errors.Invalid('Invalid Actor')); + } - return cb(null, actor); - }); + return cb(null, actor); }); } diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index 084d5fd16..1aa9d6170 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -2,13 +2,42 @@ const { makeUserUrl } = require('./util'); const ActivityPubObject = require('./object'); const apDb = require('../database').dbs.activitypub; const { getISOTimestampString } = require('../database'); -const { isString } = require('lodash'); + +const { isString, get } = require('lodash'); module.exports = class Collection extends ActivityPubObject { constructor(obj) { super(obj); } + static followers(owningUser, page, webServer, cb) { + return Collection.getOrdered( + 'followers', + owningUser, + false, + page, + e => e.id, + webServer, + cb + ); + } + + static following(owningUser, page, webServer, cb) { + return Collection.getOrdered( + 'following', + owningUser, + false, + page, + e => get(e, 'object.id'), + webServer, + cb + ); + } + + static addFollower(owningUser, followingActor, cb) { + return Collection.addToCollection('followers', owningUser, followingActor, cb); + } + static getOrdered(name, owningUser, includePrivate, page, mapper, webServer, cb) { // :TODD: |includePrivate| handling const followersUrl = @@ -24,12 +53,22 @@ module.exports = class Collection extends ActivityPubObject { return cb(err); } - const obj = { - id: followersUrl, - type: 'OrderedCollection', - first: `${followersUrl}?page=1`, - totalItems: row.count, - }; + let obj; + if (row.count > 0) { + obj = { + id: followersUrl, + type: 'OrderedCollection', + first: `${followersUrl}?page=1`, + totalItems: row.count, + }; + } else { + obj = { + id: followersUrl, + type: 'OrderedCollection', + totalItems: 0, + orderedItems: [], + }; + } return cb(null, new Collection(obj)); } @@ -48,7 +87,8 @@ module.exports = class Collection extends ActivityPubObject { return cb(err); } - if (mapper) { + entries = entries || []; + if (mapper && entries.length > 0) { entries = entries.map(mapper); } @@ -65,35 +105,22 @@ module.exports = class Collection extends ActivityPubObject { ); } - static followers(owningUser, page, webServer, cb) { - return Collection.getOrdered( - 'followers', - owningUser, - false, - page, - e => e.id, - webServer, - cb - ); - } - static addToCollection(name, owningUser, entry, cb) { if (!isString(entry)) { entry = JSON.stringify(entry); } apDb.run( - `INSERT INTO collection_entry (name, timestamp, user_id, entry_json) - VALUES (?, ?, ?, ?);`, + `INSERT OR IGNORE INTO collection_entry (name, timestamp, user_id, entry_json) + VALUES (?, ?, ?, ?);`, [name, getISOTimestampString(), owningUser.userId, entry], function res(err) { // non-arrow for 'this' scope + if (err) { + return cb(err); + } return cb(err, this.lastID); } ); } - - static addFollower(owningUser, followingActor, cb) { - return Collection.addToCollection('followers', owningUser, followingActor, cb); - } }; diff --git a/core/database.js b/core/database.js index 45b9f0b5f..2b08daba2 100644 --- a/core/database.js +++ b/core/database.js @@ -542,8 +542,13 @@ dbs.message.run( ); dbs.activitypub.run( - `CREATE INDEX IF NOT EXISTS collection_entry_unique_index0 - ON collection_entry (name, user_id, json_extract(entry_json, '$.id'))` + `CREATE INDEX IF NOT EXISTS collection_entry_by_user_index0 + ON collection_entry (name, user_id);` + ); + + dbs.activitypub.run( + `CREATE UNIQUE INDEX IF NOT EXISTS collection_entry_unique_index0 + ON collection_entry (name, user_id, json_extract(entry_json, '$.id'));` ); return cb(null); diff --git a/core/servers/content/web.js b/core/servers/content/web.js index b24968d86..5524635c2 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -334,7 +334,10 @@ exports.getModule = class WebServerModule extends ServerModule { ); } - internalServerError(resp) { + internalServerError(resp, err) { + if (err) { + this.log.error({ error: err.message }, 'Internal server error'); + } return this.respondWithError( resp, 500, diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index ea0004d85..abca78f26 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -64,7 +64,25 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { this.webServer.addRoute({ method: 'GET', path: /^\/_enig\/ap\/users\/.+\/followers(\?page=[0-9]+)?$/, - handler: this._followersGetHandler.bind(this), + handler: (req, resp) => { + return this._enforceSigningPolicy( + req, + resp, + this._followersGetHandler.bind(this) + ); + }, + }); + + this.webServer.addRoute({ + method: 'GET', + path: /^\/_enig\/ap\/users\/.+\/following(\?page=[0-9]+)?$/, + handler: (req, resp) => { + return this._enforceSigningPolicy( + req, + resp, + this._followingGetHandler.bind(this) + ); + }, }); // :TODO: NYI @@ -180,39 +198,35 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } - // https://docs.gotosocial.org/en/latest/federation/behaviors/outbox/ - _outboxGetHandler(req, resp) { - this.log.trace({ url: req.url }, 'Request for "outbox"'); - - // the request must be signed, and the signature must be valid - const signature = this._parseAndValidateSignature(req); - if (!signature) { - return this.webServer.accessDenied(resp); - } - - // /_enig/ap/users/SomeName/outbox -> SomeName + _getCollectionHandler(name, req, resp) { const url = new URL(req.url, `https://${req.headers.host}`); - const accountName = this._accountNameFromUserPath(url, 'outbox'); + const accountName = this._accountNameFromUserPath(url, name); if (!accountName) { return this.webServer.resourceNotFound(resp); } + // can we even handle this request? + const getter = Collection[name]; + if (!getter) { + return this.webServer.resourceNotFound(resp); + } + userFromAccount(accountName, (err, user) => { if (err) { this.log.info( { reason: err.message, accountName: accountName }, - `No user "${accountName}" for "self"` + `No user "${accountName}" for "${name}"` ); return this.webServer.resourceNotFound(resp); } - Activity.fromOutboxEntries(user, this.webServer, (err, activity) => { + const page = url.searchParams.get('page'); + getter(user, page, this.webServer, (err, collection) => { if (err) { - // :TODO: LOG ME - return this.webServer.internalServerError(resp); + return this.webServer.internalServerError(resp, err); } - const body = JSON.stringify(activity); + const body = JSON.stringify(collection); const headers = { 'Content-Type': ActivityJsonMime, 'Content-Length': body.length, @@ -224,19 +238,14 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } - _accountNameFromUserPath(url, suffix) { - const re = new RegExp(`^/_enig/ap/users/(.+)/${suffix}(\\?page=[0-9]+)?$`); - const m = url.pathname.match(re); - if (!m || !m[1]) { - return null; - } - return m[1]; + _followingGetHandler(req, resp) { + this.log.debug({ url: req.url }, 'Request for "following"'); + return this._getCollectionHandler('following', req, resp); } - _followersGetHandler(req, resp) { - this.log.trace({ url: req.url }, 'Request for "followers"'); - - // :TODO: dry this stuff.. + // https://docs.gotosocial.org/en/latest/federation/behaviors/outbox/ + _outboxGetHandler(req, resp) { + this.log.debug({ url: req.url }, 'Request for "outbox"'); // the request must be signed, and the signature must be valid const signature = this._parseAndValidateSignature(req); @@ -246,7 +255,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { // /_enig/ap/users/SomeName/outbox -> SomeName const url = new URL(req.url, `https://${req.headers.host}`); - const accountName = this._accountNameFromUserPath(url, 'followers'); + const accountName = this._accountNameFromUserPath(url, 'outbox'); if (!accountName) { return this.webServer.resourceNotFound(resp); } @@ -260,14 +269,12 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.resourceNotFound(resp); } - const page = url.searchParams.get('page'); - Collection.followers(user, page, this.webServer, (err, collection) => { + Activity.fromOutboxEntries(user, this.webServer, (err, activity) => { if (err) { - // :TODO: LOG ME - return this.webServer.internalServerError(resp); + return this.webServer.internalServerError(resp, err); } - const body = JSON.stringify(collection); + const body = JSON.stringify(activity); const headers = { 'Content-Type': ActivityJsonMime, 'Content-Length': body.length, @@ -279,6 +286,20 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } + _accountNameFromUserPath(url, suffix) { + const re = new RegExp(`^/_enig/ap/users/(.+)/${suffix}(\\?page=[0-9]+)?$`); + const m = url.pathname.match(re); + if (!m || !m[1]) { + return null; + } + return m[1]; + } + + _followersGetHandler(req, resp) { + this.log.debug({ url: req.url }, 'Request for "followers"'); + return this._getCollectionHandler('followers', req, resp); + } + _parseAndValidateSignature(req) { let signature; try { @@ -331,7 +352,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _withUserRequestHandler(signature, activity, activityHandler, req, resp) { - this.log.trace({ actor: activity.actor }, `Inbox request from ${activity.actor}`); + this.log.debug({ actor: activity.actor }, `Inbox request from ${activity.actor}`); // :TODO: trace const accountName = accountFromSelfUrl(activity.object); @@ -346,8 +367,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { Actor.fromRemoteUrl(activity.actor, (err, actor) => { if (err) { - // :TODO: log, and probably should be inspecting |err| - return this.webServer.internalServerError(resp); + return this.webServer.internalServerError(resp, err); } const pubKey = actor.publicKey; @@ -427,7 +447,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return callback(null); // just a warning } - this.log.trace( + this.log.info( { inbox: remoteActor.inbox }, 'Remote server received our "Accept" successfully' ); @@ -463,8 +483,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { Actor.fromLocalUser(user, this.webServer, (err, actor) => { if (err) { - // :TODO: Log me - return this.webServer.internalServerError(resp); + return this.webServer.internalServerError(resp, err); } const body = JSON.stringify(actor); From ce7dd8e1cdc0c7be82554e2a00f0d28ff20841cc Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 21 Jan 2023 01:19:19 -0700 Subject: [PATCH 070/233] Handle Undo --- core/activitypub/activity.js | 5 - core/activitypub/actor.js | 39 +++---- core/activitypub/collection.js | 37 +++++-- core/database.js | 14 ++- core/servers/content/web.js | 4 + .../content/web_handlers/activitypub.js | 102 +++++++++++++----- 6 files changed, 128 insertions(+), 73 deletions(-) diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index bd06f3379..ee06084b2 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -24,11 +24,6 @@ module.exports = class Activity extends ActivityPubObject { return WellKnownActivityTypes; } - static fromJsonString(json) { - const parsed = JSON.parse(json); - return new Activity(parsed); - } - // https://www.w3.org/TR/activitypub/#accept-activity-inbox static makeAccept(webServer, localActor, followRequest, id = null) { id = id || Activity._makeFullId(webServer, 'accept'); diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 721a5e4de..a97c71301 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -15,45 +15,40 @@ const Log = require('../logger').log; const { queryWebFinger } = require('../webfinger'); const EnigAssert = require('../enigma_assert'); const ActivityPubSettings = require('./settings'); +const ActivityPubObject = require('./object'); // deps const _ = require('lodash'); -const isString = require('lodash/isString'); const mimeTypes = require('mime-types'); const { getJson } = require('../http_util.js'); // https://www.w3.org/TR/activitypub/#actor-objects -module.exports = class Actor { +module.exports = class Actor extends ActivityPubObject { constructor(obj) { - this['@context'] = [ActivityStreamsContext]; - - if (obj) { - Object.assign(this, obj); - } else { - this.id = ''; - this.type = ''; - this.inbox = ''; - this.outbox = ''; - this.following = ''; - this.followers = ''; - } + super(obj); } isValid() { - if ( - !Array.isArray(this['@context']) || - this['@context'][0] !== ActivityStreamsContext - ) { + if (!super.isValid()) { return false; } - if (!isString(this.type) || this.type.length < 1) { + if ( + !['Person', 'Group', 'Organization', 'Service', 'Application'].includes( + this.type + ) + ) { return false; } - const linksValid = ['inbox', 'outbox', 'following', 'followers'].every(p => { - return isValidLink(this[p]); + const linksValid = ['inbox', 'outbox', 'following', 'followers'].every(l => { + // must be valid if set + if (this[l] && !isValidLink(this[l])) { + return false; + } + return true; }); + if (!linksValid) { return false; } @@ -136,11 +131,11 @@ module.exports = class Actor { } static fromRemoteUrl(url, cb) { + // :TODO: cache first const headers = { Accept: 'application/activity+json', }; - // :TODO: use getJson() getJson(url, { headers }, (err, actor) => { if (err) { return cb(err); diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index 1aa9d6170..3a221a1d4 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -35,7 +35,13 @@ module.exports = class Collection extends ActivityPubObject { } static addFollower(owningUser, followingActor, cb) { - return Collection.addToCollection('followers', owningUser, followingActor, cb); + return Collection.addToCollection( + 'followers', + owningUser, + followingActor.id, + followingActor, + cb + ); } static getOrdered(name, owningUser, includePrivate, page, mapper, webServer, cb) { @@ -45,7 +51,7 @@ module.exports = class Collection extends ActivityPubObject { if (!page) { return apDb.get( `SELECT COUNT(id) AS count - FROM collection_entry + FROM collection WHERE name = ?;`, [name], (err, row) => { @@ -77,8 +83,8 @@ module.exports = class Collection extends ActivityPubObject { // :TODO: actual paging... apDb.all( - `SELECT entry_json - FROM collection_entry + `SELECT obj_json + FROM collection WHERE user_id = ? AND name = ? ORDER BY timestamp;`, [owningUser.userId, name], @@ -105,15 +111,15 @@ module.exports = class Collection extends ActivityPubObject { ); } - static addToCollection(name, owningUser, entry, cb) { - if (!isString(entry)) { - entry = JSON.stringify(entry); + static addToCollection(name, owningUser, objectId, obj, cb) { + if (!isString(obj)) { + obj = JSON.stringify(obj); } apDb.run( - `INSERT OR IGNORE INTO collection_entry (name, timestamp, user_id, entry_json) - VALUES (?, ?, ?, ?);`, - [name, getISOTimestampString(), owningUser.userId, entry], + `INSERT OR IGNORE INTO collection (name, timestamp, user_id, obj_id, obj_json) + VALUES (?, ?, ?, ?, ?);`, + [name, getISOTimestampString(), owningUser.userId, objectId, obj], function res(err) { // non-arrow for 'this' scope if (err) { @@ -123,4 +129,15 @@ module.exports = class Collection extends ActivityPubObject { } ); } + + static remoteFromCollectionById(name, owningUser, objectId, cb) { + apDb.run( + `DELETE FROM collection + WHERE user_id = ? AND name = ? AND obj_id = ?;`, + [owningUser.userId, name, objectId], + err => { + return cb(err); + } + ); + } }; diff --git a/core/database.js b/core/database.js index 2b08daba2..f27eed515 100644 --- a/core/database.js +++ b/core/database.js @@ -532,23 +532,21 @@ dbs.message.run( ); dbs.activitypub.run( - `CREATE TABLE IF NOT EXISTS collection_entry ( + `CREATE TABLE IF NOT EXISTS collection ( id INTEGER PRIMARY KEY, -- Auto-generated key name VARCHAR NOT NULL, -- examples: followers, follows, ... timestamp DATETIME NOT NULL, -- Timestamp in which this entry was created user_id INTEGER NOT NULL, -- Local, owning user ID - entry_json VARCHAR NOT NULL -- Varies by collection + obj_id VARCHAR NOT NULL, -- Object ID from obj_json.id + obj_json VARCHAR NOT NULL, -- Object varies by collection (obj_json.type) + + UNIQUE(name, user_id, obj_id) );` ); dbs.activitypub.run( `CREATE INDEX IF NOT EXISTS collection_entry_by_user_index0 - ON collection_entry (name, user_id);` - ); - - dbs.activitypub.run( - `CREATE UNIQUE INDEX IF NOT EXISTS collection_entry_unique_index0 - ON collection_entry (name, user_id, json_extract(entry_json, '$.id'));` + ON collection (name, user_id);` ); return cb(null); diff --git a/core/servers/content/web.js b/core/servers/content/web.js index 5524635c2..d10a93949 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -346,6 +346,10 @@ exports.getModule = class WebServerModule extends ServerModule { ); } + notImplemented(resp) { + return this.respondWithError(resp, 501, 'Not implemented.', 'Not Implemented'); + } + tryRouteIndex(req, resp, cb) { const tryFiles = Config().contentServers.web.tryFiles || [ 'index.html', diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index abca78f26..a6d773c99 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -10,6 +10,7 @@ const Activity = require('../../../activitypub/activity'); const ActivityPubSettings = require('../../../activitypub/settings'); const Actor = require('../../../activitypub/actor'); const Collection = require('../../../activitypub/collection'); +const EnigAssert = require('../../../enigma_assert'); // deps const _ = require('lodash'); @@ -46,7 +47,13 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { this.webServer.addRoute({ method: 'POST', path: /^\/_enig\/ap\/users\/.+\/inbox$/, - handler: this._inboxPostHandler.bind(this), + handler: (req, resp) => { + return this._enforceSigningPolicy( + req, + resp, + this._inboxPostHandler.bind(this) + ); + }, }); this.webServer.addRoute({ @@ -102,7 +109,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.accessDenied(resp); } - return next(req, resp); + return next(req, resp, signature); } _selfUrlRequestHandler(req, resp) { @@ -146,12 +153,8 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } - _inboxPostHandler(req, resp) { - // the request must be signed, and the signature must be valid - const signature = this._parseAndValidateSignature(req); - if (!signature) { - return this.webServer.accessDenied(resp); - } + _inboxPostHandler(req, resp, signature) { + EnigAssert(signature, 'Called without signature!'); const body = []; req.on('data', d => { @@ -161,7 +164,8 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { req.on('end', () => { let activity; try { - activity = Activity.fromJsonString(Buffer.concat(body).toString()); + activity = JSON.parse(Buffer.concat(body).toString()); + activity = new Activity(activity); } catch (e) { this.log.error( { error: e.message, url: req.url, method: req.method }, @@ -175,26 +179,28 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.badRequest(resp); } - const activityFunctions = { - Follow: this._inboxFollowRequestHandler.bind(this), - // TODO: 'Create', 'Update', etc. - }; + switch (activity.type) { + case 'Follow': + return this._withUserRequestHandler( + signature, + activity, + this._inboxFollowRequestHandler.bind(this), + req, + resp + ); - if (_.has(activityFunctions, activity.type)) { - return this._withUserRequestHandler( - signature, - activity, - activityFunctions[activity.type], - req, - resp - ); - } else { - this.log.debug( - { type: activity.type }, - `Unsupported Activity type "${activity.type}"` - ); - return this.webServer.resourceNotFound(resp); + case 'Undo': + return this._inboxUndoRequestHandler(activity, req, resp); + + default: + this.log.warn( + { type: activity.type }, + `Unsupported Activity type "${activity.type}"` + ); + break; } + + return this.webServer.resourceNotFound(resp); }); } @@ -332,7 +338,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _inboxFollowRequestHandler(activity, remoteActor, user, resp) { - this.log.debug({ user_id: user.userId, actor: activity.actor }, 'Follow request'); + this.log.info({ user_id: user.userId, actor: activity.actor }, 'Follow request'); // // If the user blindly accepts Followers, we can persist @@ -351,6 +357,46 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return resp.end(''); } + _inboxUndoRequestHandler(activity, req, resp) { + this.log.info({ actor: activity.actor }, 'Undo request'); + + const url = new URL(req.url, `https://${req.headers.host}`); + const accountName = this._accountNameFromUserPath(url, 'inbox'); + if (!accountName) { + return this.webServer.resourceNotFound(resp); + } + + userFromAccount(accountName, (err, user) => { + if (err) { + return this.webServer.resourceNotFound(resp); + } + + // we only understand Follow right now + if (!activity.object || activity.object.type !== 'Follow') { + return this.webServer.notImplemented(resp); + } + + Collection.remoteFromCollectionById( + 'followers', + user, + activity.actor, + err => { + if (err) { + return this.webServer.internalServerError(resp, err); + } + + this.log.info( + { userId: user.userId, actor: activity.actor }, + 'Undo "Follow" (un-follow) success' + ); + + resp.writeHead(202); + return resp.end(''); + } + ); + }); + } + _withUserRequestHandler(signature, activity, activityHandler, req, resp) { this.log.debug({ actor: activity.actor }, `Inbox request from ${activity.actor}`); From 468f1486c05decbe2d17d98af1b84494713bd1ca Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 21 Jan 2023 18:51:54 -0700 Subject: [PATCH 071/233] Use a Collection for outbox --- core/activitypub/activity.js | 35 +--------- core/activitypub/actor.js | 19 +++--- core/activitypub/collection.js | 50 +++++++++++--- core/activitypub/db.js | 65 ------------------- core/database.js | 28 ++++---- core/mail_util.js | 2 +- core/scanner_tossers/activitypub.js | 6 +- .../content/web_handlers/activitypub.js | 55 +++------------- 8 files changed, 78 insertions(+), 182 deletions(-) delete mode 100644 core/activitypub/db.js diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index ee06084b2..46e46d4f0 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -1,4 +1,4 @@ -const { messageBodyToHtml, selfUrl, makeUserUrl } = require('./util'); +const { messageBodyToHtml, selfUrl } = require('./util'); const { ActivityStreamsContext, WellKnownActivityTypes } = require('./const'); const ActivityPubObject = require('./object'); const User = require('../user'); @@ -7,7 +7,6 @@ const { Errors } = require('../enig_error'); const { getISOTimestampString } = require('../database'); const UserProps = require('../user_property'); const { postJson } = require('../http_util'); -const { getOutboxEntries } = require('./db'); const { WellKnownLocations } = require('../servers/content/web'); // deps @@ -113,38 +112,6 @@ module.exports = class Activity extends ActivityPubObject { ); } - // :TODO: move to Collection - static fromOutboxEntries(owningUser, webServer, cb) { - // :TODO: support paging - const getOpts = { - create: true, // items marked 'Create' - }; - getOutboxEntries(owningUser, getOpts, (err, entries) => { - if (err) { - return cb(err); - } - - const obj = { - '@context': ActivityStreamsContext, - // :TODO: makeOutboxUrl() and use elsewhere also - id: makeUserUrl(webServer, owningUser, '/ap/users') + '/outbox', - type: 'OrderedCollection', - totalItems: entries.length, - orderedItems: entries.map(e => { - return { - '@context': ActivityStreamsContext, - id: e.activity.id, - type: 'Create', - actor: e.activity.actor, - object: e.activity.object, - }; - }), - }; - - return cb(null, new Activity(obj)); - }); - } - sendTo(actorUrl, fromUser, webServer, cb) { const privateKey = fromUser.getProperty(UserProps.PrivateActivityPubSigningKey); if (_.isEmpty(privateKey)) { diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index a97c71301..b17f2df03 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -33,16 +33,12 @@ module.exports = class Actor extends ActivityPubObject { return false; } - if ( - !['Person', 'Group', 'Organization', 'Service', 'Application'].includes( - this.type - ) - ) { + if (!Actor.WellKnownActorTypes.includes(this.type)) { return false; } - const linksValid = ['inbox', 'outbox', 'following', 'followers'].every(l => { - // must be valid if set + const linksValid = Actor.WellKnownLinkTypes.every(l => { + // must be valid if present & non-empty if (this[l] && !isValidLink(this[l])) { return false; } @@ -56,7 +52,14 @@ module.exports = class Actor extends ActivityPubObject { return true; } - // :TODO: from a User object + static get WellKnownActorTypes() { + return ['Person', 'Group', 'Organization', 'Service', 'Application']; + } + + static get WellKnownLinkTypes() { + return ['inbox', 'outbox', 'following', 'followers']; + } + static fromLocalUser(user, webServer, cb) { const userSelfUrl = selfUrl(webServer, user); const userSettings = ActivityPubSettings.fromUser(user); diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index 3a221a1d4..9a40c08f0 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -40,25 +40,56 @@ module.exports = class Collection extends ActivityPubObject { owningUser, followingActor.id, followingActor, + false, + cb + ); + } + + static outbox(owningUser, page, webServer, cb) { + return Collection.getOrdered( + 'outbox', + owningUser, + false, + page, + null, + webServer, + cb + ); + } + + static addOutboxItem(owningUser, outboxItem, cb) { + return Collection.addToCollection( + 'outbox', + owningUser, + outboxItem.id, + outboxItem, + false, cb ); } static getOrdered(name, owningUser, includePrivate, page, mapper, webServer, cb) { - // :TODD: |includePrivate| handling + const privateQuery = includePrivate ? '' : ' AND is_private = FALSE'; const followersUrl = makeUserUrl(webServer, owningUser, '/ap/users/') + `/${name}`; + if (!page) { return apDb.get( `SELECT COUNT(id) AS count FROM collection - WHERE name = ?;`, - [name], + WHERE user_id = ? AND name = ?${privateQuery};`, + [owningUser.userId, name], (err, row) => { if (err) { return cb(err); } + // + // Mastodon for instance, will never follow up for the + // actual data from some Collections such as 'followers'; + // Instead, they only use the |totalItems| to form an + // approximate follower count. + // let obj; if (row.count > 0) { obj = { @@ -85,7 +116,7 @@ module.exports = class Collection extends ActivityPubObject { apDb.all( `SELECT obj_json FROM collection - WHERE user_id = ? AND name = ? + WHERE user_id = ? AND name = ?${privateQuery} ORDER BY timestamp;`, [owningUser.userId, name], (err, entries) => { @@ -111,15 +142,16 @@ module.exports = class Collection extends ActivityPubObject { ); } - static addToCollection(name, owningUser, objectId, obj, cb) { + static addToCollection(name, owningUser, objectId, obj, isPrivate, cb) { if (!isString(obj)) { obj = JSON.stringify(obj); } + isPrivate = isPrivate ? 1 : 0; apDb.run( - `INSERT OR IGNORE INTO collection (name, timestamp, user_id, obj_id, obj_json) - VALUES (?, ?, ?, ?, ?);`, - [name, getISOTimestampString(), owningUser.userId, objectId, obj], + `INSERT OR IGNORE INTO collection (name, timestamp, user_id, obj_id, obj_json, is_private) + VALUES (?, ?, ?, ?, ?, ?);`, + [name, getISOTimestampString(), owningUser.userId, objectId, obj, isPrivate], function res(err) { // non-arrow for 'this' scope if (err) { @@ -130,7 +162,7 @@ module.exports = class Collection extends ActivityPubObject { ); } - static remoteFromCollectionById(name, owningUser, objectId, cb) { + static removeFromCollectionById(name, owningUser, objectId, cb) { apDb.run( `DELETE FROM collection WHERE user_id = ? AND name = ? AND obj_id = ?;`, diff --git a/core/activitypub/db.js b/core/activitypub/db.js deleted file mode 100644 index 7bb3275a6..000000000 --- a/core/activitypub/db.js +++ /dev/null @@ -1,65 +0,0 @@ -const apDb = require('../database').dbs.activitypub; - -exports.persistToOutbox = persistToOutbox; -exports.getOutboxEntries = getOutboxEntries; - -const FollowerEntryStatus = { - Invalid: 0, // Invalid - Requested: 1, // Entry is a *request* to local user - Accepted: 2, // Accepted by local user - Rejected: 3, // Rejected by local user -}; -exports.FollowerEntryStatus = FollowerEntryStatus; - -function persistToOutbox(activity, fromUser, message, cb) { - const activityJson = JSON.stringify(activity); - - apDb.run( - `INSERT INTO outbox (activity_id, user_id, message_id, activity_json, published_timestamp) - VALUES (?, ?, ?, ?, ?);`, - [ - activity.id, - fromUser.userId, - message.messageId, - activityJson, - activity.object.published, - ], - function res(err) { - // non-arrow for 'this' scope - return cb(err, this.lastID); - } - ); -} - -function getOutboxEntries(owningUser, options, cb) { - apDb.all( - `SELECT id, activity_id, message_id, activity_json, published_timestamp - FROM outbox - WHERE user_id = ? AND json_extract(activity_json, '$.type') = "Create";`, - [owningUser.userId], - (err, rows) => { - if (err) { - return cb(err); - } - - const entries = rows.map(r => { - let parsed; - try { - parsed = JSON.parse(r.activity_json); - } catch (e) { - return cb(e); - } - - return { - id: r.id, - activityId: r.activity_id, - messageId: r.message_id, - activity: parsed, - published: r.published_timestamp, - }; - }); - - return cb(null, entries); - } - ); -} diff --git a/core/database.js b/core/database.js index f27eed515..0ed3fab46 100644 --- a/core/database.js +++ b/core/database.js @@ -502,28 +502,21 @@ dbs.message.run( return cb(null); }, activitypub: cb => { - // private INTEGER NOT NULL, -- Is this Activity private? + // Actors we know about and have cached dbs.activitypub.run( - `CREATE TABLE IF NOT EXISTS outbox ( - id INTEGER PRIMARY KEY, -- Local ID - activity_id VARCHAR NOT NULL, -- Fully qualified Activity ID/URL (activity.id) - user_id INTEGER NOT NULL, -- Local user ID - message_id INTEGER NOT NULL, -- Local message ID - activity_json VARCHAR NOT NULL, -- Activity in JSON format - published_timestamp DATETIME NOT NULL, -- (activity.object.published)) - - UNIQUE(message_id, activity_id) - );` - ); + `CREATE TABLE IF NOT EXISTS actor_cache ( + id INTEGER PRIMARY KEY, -- Local DB ID + actor_id VARCHAR NOT NULL, -- Fully qualified Actor ID/URL + actor_json VARCHAR NOT NULL, -- Actor document + timestamp DATETIME NOT NULL, -- Timestamp in which this Actor was cached - dbs.activitypub.run( - `CREATE INDEX IF NOT EXISTS outbox_user_id_index0 - ON outbox (user_id);` + UNIQUE(actor_id) + );` ); dbs.activitypub.run( - `CREATE INDEX IF NOT EXISTS outbox_activity_id_index0 - ON outbox (activity_id);` + `CREATE INDEX IF NOT EXISTS actor_cache_actor_id_index0 + ON actor_cache (actor_id);` ); dbs.activitypub.run( @@ -539,6 +532,7 @@ dbs.message.run( user_id INTEGER NOT NULL, -- Local, owning user ID obj_id VARCHAR NOT NULL, -- Object ID from obj_json.id obj_json VARCHAR NOT NULL, -- Object varies by collection (obj_json.type) + is_private INTEGER NOT NULL, -- Is this object private to |user_id|? UNIQUE(name, user_id, obj_id) );` diff --git a/core/mail_util.js b/core/mail_util.js index eac3d66de..0b7aef426 100644 --- a/core/mail_util.js +++ b/core/mail_util.js @@ -11,7 +11,7 @@ exports.setExternalAddressedToInfo = setExternalAddressedToInfo; exports.copyExternalAddressedToInfo = copyExternalAddressedToInfo; const EMAIL_REGEX = - /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; + /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[?[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}]?)|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; /* Input Output diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index 7ef6f3d81..f150db72a 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -3,11 +3,11 @@ const Message = require('../message'); const { MessageScanTossModule } = require('../msg_scan_toss_module'); const { getServer } = require('../listening_server'); const Log = require('../logger').log; -const { persistToOutbox } = require('../activitypub/db'); // deps const async = require('async'); const _ = require('lodash'); +const Collection = require('../activitypub/collection'); exports.moduleInfo = { name: 'ActivityPub', @@ -51,7 +51,7 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule (noteInfo, callback) => { const { activity, fromUser, remoteActor } = noteInfo; - // :TODO: Implement retry logic (connection issues, retryable HTTP status) + // :TODO: Implement retry logic (connection issues, retryable HTTP status) ?? activity.sendTo( remoteActor.inbox, fromUser, @@ -82,7 +82,7 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule ); }, (activity, fromUser, callback) => { - persistToOutbox(activity, fromUser, message, (err, localId) => { + Collection.addOutboxItem(fromUser, activity, (err, localId) => { if (!err) { this.log.debug( { localId, activityId: activity.id }, diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index a6d773c99..c939c9dcb 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -204,7 +204,9 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } - _getCollectionHandler(name, req, resp) { + _getCollectionHandler(name, req, resp, signature) { + EnigAssert(signature, 'Missing signature!'); + const url = new URL(req.url, `https://${req.headers.host}`); const accountName = this._accountNameFromUserPath(url, name); if (!accountName) { @@ -244,52 +246,15 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } - _followingGetHandler(req, resp) { + _followingGetHandler(req, resp, signature) { this.log.debug({ url: req.url }, 'Request for "following"'); - return this._getCollectionHandler('following', req, resp); + return this._getCollectionHandler('following', req, resp, signature); } // https://docs.gotosocial.org/en/latest/federation/behaviors/outbox/ - _outboxGetHandler(req, resp) { + _outboxGetHandler(req, resp, signature) { this.log.debug({ url: req.url }, 'Request for "outbox"'); - - // the request must be signed, and the signature must be valid - const signature = this._parseAndValidateSignature(req); - if (!signature) { - return this.webServer.accessDenied(resp); - } - - // /_enig/ap/users/SomeName/outbox -> SomeName - const url = new URL(req.url, `https://${req.headers.host}`); - const accountName = this._accountNameFromUserPath(url, 'outbox'); - if (!accountName) { - return this.webServer.resourceNotFound(resp); - } - - userFromAccount(accountName, (err, user) => { - if (err) { - this.log.info( - { reason: err.message, accountName: accountName }, - `No user "${accountName}" for "self"` - ); - return this.webServer.resourceNotFound(resp); - } - - Activity.fromOutboxEntries(user, this.webServer, (err, activity) => { - if (err) { - return this.webServer.internalServerError(resp, err); - } - - const body = JSON.stringify(activity); - const headers = { - 'Content-Type': ActivityJsonMime, - 'Content-Length': body.length, - }; - - resp.writeHead(200, headers); - return resp.end(body); - }); - }); + return this._getCollectionHandler('outbox', req, resp, signature); } _accountNameFromUserPath(url, suffix) { @@ -301,9 +266,9 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return m[1]; } - _followersGetHandler(req, resp) { + _followersGetHandler(req, resp, signature) { this.log.debug({ url: req.url }, 'Request for "followers"'); - return this._getCollectionHandler('followers', req, resp); + return this._getCollectionHandler('followers', req, resp, signature); } _parseAndValidateSignature(req) { @@ -376,7 +341,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.notImplemented(resp); } - Collection.remoteFromCollectionById( + Collection.removeFromCollectionById( 'followers', user, activity.actor, From 3f2dcee5a72b3ef0641d039a1a286c6dd5112ade Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 21 Jan 2023 20:57:22 -0700 Subject: [PATCH 072/233] Add avatar support * Default generated for new users (oputil.js tool to come) * Defaults to setting ActivityPub image/icon * Allows ops to configure the look, extend, etc. --- core/activitypub/actor.js | 362 +-------------- core/activitypub_actor_property.js | 20 - core/config_default.js | 6 + .../content/web_handlers/activitypub.js | 43 +- core/user.js | 111 +++++ core/web_handler_module.js | 2 +- package.json | 1 + yarn.lock | 413 +++++++++++++++++- 8 files changed, 565 insertions(+), 393 deletions(-) delete mode 100644 core/activitypub_actor_property.js diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index b17f2df03..1caacd064 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -108,8 +108,8 @@ module.exports = class Actor extends ActivityPubObject { // ], }; - addImage('icon'); - addImage('image'); + addImage(obj, 'icon'); + addImage(obj, 'image'); const publicKeyPem = user.getProperty(UserProps.PublicActivityPubSigningKey); if (!_.isEmpty(publicKeyPem)) { @@ -187,362 +187,4 @@ module.exports = class Actor extends ActivityPubObject { const parsed = JSON.parse(json); return new Actor(parsed); } - - // :TODO: persist()? - // create(cb) { - // assert(0 === this.actorId); - - // if (_.isEmpty(this.actorUrl)) { - // return cb(Errors.Invalid('Blank actor url')); - // } - - // const self = this; - - // async.waterfall( - // [ - // function beginTransaction(callback) { - // return actorDb.beginTransaction(callback); - // }, - // function createActorRec(trans, callback) { - // trans.run( - // `INSERT INTO actor (actor_url) - // VALUES (?);`, - // [self.actorUrl], - // function inserted(err) { - // // use classic function for |this| - // if (err) { - // return callback(err); - // } - - // self.actorId = this.lastID; - - // return callback(null, trans); - // } - // ); - // }, - // function saveAll(trans, callback) { - // self.persistWithTransaction(trans, err => { - // return callback(err, trans); - // }); - // }, - // function sendEvent(trans, callback) { - // Events.emit(Events.getSystemEvents().NewActor, { - // actor: Object.assign({}, self, {}), - // }); - // return callback(null, trans); - // }, - // ], - // (err, trans) => { - // if (trans) { - // trans[err ? 'rollback' : 'commit'](transErr => { - // return cb(err ? err : transErr); - // }); - // } else { - // return cb(err); - // } - // } - // ); - // } - - // persistWithTransaction(trans, cb) { - // assert(this.actorId > 0); - - // const self = this; - - // async.series( - // [ - // function saveProps(callback) { - // self.persistProperties(self.properties, trans, err => { - // return callback(err); - // }); - // }, - // ], - // err => { - // return cb(err); - // } - // ); - // } - - // static persistPropertyByActorId(actorId, propName, propValue, cb) { - // actorDb.run( - // `REPLACE INTO activitypub_actor_property (actor_id, prop_name, prop_value) - // VALUES (?, ?, ?);`, - // [actorId, propName, propValue], - // err => { - // if (cb) { - // return cb(err, propValue); - // } - // } - // ); - // } - - // setProperty(propName, propValue) { - // this.properties[propName] = propValue; - // } - - // incrementProperty(propName, incrementBy) { - // incrementBy = incrementBy || 1; - // let newValue = parseInt(this.getProperty(propName)); - // if (newValue) { - // newValue += incrementBy; - // } else { - // newValue = incrementBy; - // } - // this.setProperty(propName, newValue); - // return newValue; - // } - - // getProperty(propName) { - // return this.properties[propName]; - // } - - // getPropertyAsNumber(propName) { - // return parseInt(this.getProperty(propName), 10); - // } - - // persistProperty(propName, propValue, cb) { - // // update live props - // this.properties[propName] = propValue; - - // return Actor.persistPropertyByActorId(this.actorId, propName, propValue, cb); - // } - - // removeProperty(propName, cb) { - // // update live - // delete this.properties[propName]; - - // actorDb.run( - // `DELETE FROM activitypub_actor_property - // WHERE activity_id = ? AND prop_name = ?;`, - // [this.actorId, propName], - // err => { - // if (cb) { - // return cb(err); - // } - // } - // ); - // } - - // removeProperties(propNames, cb) { - // async.each( - // propNames, - // (name, next) => { - // return this.removeProperty(name, next); - // }, - // err => { - // if (cb) { - // return cb(err); - // } - // } - // ); - // } - - // persistProperties(properties, transOrDb, cb) { - // if (!_.isFunction(cb) && _.isFunction(transOrDb)) { - // cb = transOrDb; - // transOrDb = actorDb; - // } - - // const self = this; - - // // update live props - // _.merge(this.properties, properties); - - // const stmt = transOrDb.prepare( - // `REPLACE INTO activitypub_actor_property (actor_id, prop_name, prop_value) - // VALUES (?, ?, ?);` - // ); - - // async.each( - // Object.keys(properties), - // (propName, nextProp) => { - // stmt.run(self.actorId, propName, properties[propName], err => { - // return nextProp(err); - // }); - // }, - // err => { - // if (err) { - // return cb(err); - // } - - // stmt.finalize(() => { - // return cb(null); - // }); - // } - // ); - // } - - // static getActor(actorId, cb) { - // async.waterfall( - // [ - // function fetchActorId(callback) { - // Actor.getActorUrl(actorId, (err, actorUrl) => { - // return callback(null, actorUrl); - // }); - // }, - // function initProps(actorUrl, callback) { - // Actor.loadProperties(actorId, (err, properties) => { - // return callback(err, actorUrl, properties); - // }); - // }, - // ], - // (err, actorUrl, properties) => { - // const actor = new Actor(); - // actor.actorId = actorId; - // actor.actorUrl = actorUrl; - // actor.properties = properties; - - // return cb(err, actor); - // } - // ); - // } - - // // FIXME - // static getActorInfo(actorId, propsList, cb) { - // if (!cb && _.isFunction(propsList)) { - // cb = propsList; - // propsList = [ - // ActorProps.Type, - // ActorProps.PreferredUsername, - // ActorProps.Name, - // ActorProps.Summary, - // ActorProps.IconUrl, - // ActorProps.BannerUrl, - // ActorProps.PublicActivityPubSigningKey, - // ]; - // } - - // async.waterfall( - // [ - // callback => { - // return Actor.getActorUrl(actorId, callback); - // }, - // (actorUrl, callback) => { - // Actor.loadProperties(actorId, { names: propsList }, (err, props) => { - // return callback( - // err, - // Object.assign({}, props, { actor_url: actorUrl }) - // ); - // }); - // }, - // ], - // (err, actorProps) => { - // if (err) { - // return cb(err); - // } - - // const actorInfo = {}; - // Object.keys(actorProps).forEach(key => { - // actorInfo[_.camelCase(key)] = actorProps[key] || 'N/A'; - // }); - - // return cb(null, actorInfo); - // } - // ); - // } - - // static getActorIdAndUrl(actorUrl, cb) { - // actorDb.get( - // `SELECT id, actor_url - // FROM activitypub_actor - // WHERE actor_url LIKE ?;`, - // [actorUrl], - // (err, row) => { - // if (err) { - // return cb(err); - // } - - // if (row) { - // return cb(null, row.id, row.actor_url); - // } - - // return cb(Errors.DoesNotExist('No matching actorUrl')); - // } - // ); - // } - - // static getActorUrl(actorId, cb) { - // actorDb.get( - // `SELECT actor_url - // FROM activitypub_actor - // WHERE id = ?;`, - // [actorId], - // (err, row) => { - // if (err) { - // return cb(err); - // } - - // if (row) { - // return cb(null, row.actor_url); - // } - - // return cb(Errors.DoesNotExist('No matching actor ID')); - // } - // ); - // } - - // static loadProperties(actorId, options, cb) { - // if (!cb && _.isFunction(options)) { - // cb = options; - // options = {}; - // } - - // let sql = `SELECT prop_name, prop_value - // FROM activitypub_actor_property - // WHERE actor_id = ?`; - - // if (options.names) { - // sql += ` AND prop_name IN("${options.names.join('","')}");`; - // } else { - // sql += ';'; - // } - - // let properties = {}; - // actorDb.each( - // sql, - // [actorId], - // (err, row) => { - // if (err) { - // return cb(err); - // } - // properties[row.prop_name] = row.prop_value; - // }, - // err => { - // return cb(err, err ? null : properties); - // } - // ); - // } - - // // :TODO: make this much more flexible - propValue should allow for case-insensitive compare, etc. - // static getActorIdsWithProperty(propName, propValue, cb) { - // let actorIds = []; - - // actorDb.each( - // `SELECT actor_id - // FROM activitypub_actor_property - // WHERE prop_name = ? AND prop_value = ?;`, - // [propName, propValue], - // (err, row) => { - // if (row) { - // actorIds.push(row.actor_id); - // } - // }, - // () => { - // return cb(null, actorIds); - // } - // ); - // } - - // static getActorCount(cb) { - // actorDb.get( - // `SELECT count() AS actor_count - // FROM activitypub_actor;`, - // (err, row) => { - // if (err) { - // return cb(err); - // } - // return cb(null, row.actor_count); - // } - // ); - // } }; diff --git a/core/activitypub_actor_property.js b/core/activitypub_actor_property.js deleted file mode 100644 index cc866c073..000000000 --- a/core/activitypub_actor_property.js +++ /dev/null @@ -1,20 +0,0 @@ -/* jslint node: true */ -'use strict'; - -// -// Common Activitypub actor properties used throughout the system. -// -// This IS NOT a full list. For example, custom modules -// can utilize their own properties as well! -// -exports.ActorProps = { - Type: 'type', - PreferredUsername: 'preferred_user_name', - Name: 'name', - Summary: 'summary', - IconUrl: 'icon_url', - BannerUrl: 'banner_url', - PublicActivityPubSigningKey: 'public_key_activitypub_sign_rsa_pem', // RSA public key for user -}; - -exports.AllActorProperties = Object.values(exports.ActorProps); diff --git a/core/config_default.js b/core/config_default.js index 53d06d8d1..86852f225 100644 --- a/core/config_default.js +++ b/core/config_default.js @@ -130,6 +130,12 @@ module.exports = () => { ), }, }, + + // path to avatar generation parts + avatars: { + storagePath: paths.join(__dirname, '../userdata/avatars/'), + spritesPath: paths.join(__dirname, '../misc/avatar-sprites/'), + }, }, theme: { diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index c939c9dcb..7530ce76e 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -17,6 +17,9 @@ const _ = require('lodash'); const enigma_assert = require('../../../enigma_assert'); const httpSignature = require('http-signature'); const async = require('async'); +const paths = require('path'); +const fs = require('fs'); +const mimeTypes = require('mime-types'); exports.moduleInfo = { name: 'ActivityPub', @@ -58,7 +61,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { this.webServer.addRoute({ method: 'GET', - path: /^\/_enig\/ap\/users\/.+\/outbox$/, + path: /^\/_enig\/ap\/users\/.+\/outbox(\?page=[0-9]+)?$/, handler: (req, resp) => { return this._enforceSigningPolicy( req, @@ -92,6 +95,13 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }, }); + // default avatar routing + this.webServer.addRoute({ + method: 'GET', + path: /^\/_enig\/ap\/users\/.+\/avatar\/.+$/, + handler: this._avatarGetHandler.bind(this), + }); + // :TODO: NYI // this.webServer.addRoute({ // method: 'GET', @@ -257,6 +267,37 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this._getCollectionHandler('outbox', req, resp, signature); } + _avatarGetHandler(req, resp) { + const url = new URL(req.url, `https://${req.headers.host}`); + const filename = paths.basename(url.pathname); + if (!filename) { + return this.webServer.fileNotFound(resp); + } + + const storagePath = _.get(Config(), 'users.avatars.storagePath'); + if (!storagePath) { + return this.webServer.fileNotFound(resp); + } + + const localPath = paths.join(storagePath, filename); + fs.stat(localPath, (err, stats) => { + if (err || !stats.isFile()) { + return this.webServer.accessDenied(resp); + } + + const headers = { + 'Content-Type': + mimeTypes.contentType(paths.basename(localPath)) || + mimeTypes.contentType('.png'), + 'Content-Length': stats.size, + }; + + const readStream = fs.createReadStream(localPath); + resp.writeHead(200, headers); + readStream.pipe(resp); + }); + } + _accountNameFromUserPath(url, suffix) { const re = new RegExp(`^/_enig/ap/users/(.+)/${suffix}(\\?page=[0-9]+)?$`); const m = url.pathname.match(re); diff --git a/core/user.js b/core/user.js index bacc18b7f..705aa45ff 100644 --- a/core/user.js +++ b/core/user.js @@ -19,6 +19,10 @@ const _ = require('lodash'); const moment = require('moment'); const sanatizeFilename = require('sanitize-filename'); const ssh2 = require('ssh2'); +const AvatarGenerator = require('avatar-generator'); +const paths = require('path'); +const fse = require('fs-extra'); +const ActivityPubSettings = require('./activitypub/settings'); module.exports = class User { constructor() { @@ -508,6 +512,41 @@ module.exports = class User { return callback(err, trans); }); }, + function defaultAvatar(trans, callback) { + self.generateNewRandomAvatar((err, outPath) => { + return callback(err, outPath, trans); + }); + }, + function defaultActivityPubSettings(outPath, trans, callback) { + // we have to late import this crap :D + const getServer = require('./listening_server.js').getServer; + const WebServerPackageName = require('./servers/content/web') + .moduleInfo.packageName; + const webServer = getServer(WebServerPackageName); + + // :TODO: fetch over +op default overrides here, e.g. 'enabled' + const apSettings = ActivityPubSettings.fromUser(self); + + // convert |outPath| of avatar to a URL, that, with the web + // server enabled, can be fetched + if (webServer) { + const { makeUserUrl } = require('./activitypub/util'); + const filename = paths.basename(outPath); + const url = + makeUserUrl(webServer.instance, self, '/ap/users/') + + `/avatar/${filename}`; + + apSettings.image = url; + apSettings.icon = url; + } + + self.setProperty( + UserProps.ActivityPubSettings, + JSON.stringify(apSettings) + ); + + return callback(null, trans); + }, function setInitialGroupMembership(trans, callback) { // Assign initial groups. Must perform a clone: #235 - All users are sysops (and I can't un-sysop them) self.groups = [...config.users.defaultGroups]; @@ -667,6 +706,78 @@ module.exports = class User { ); } + generateNewRandomAvatar(cb) { + const spritesPath = _.get(Config(), 'users.avatars.spritesPath'); + const storagePath = _.get(Config(), 'users.avatars.storagePath'); + + if (!spritesPath || !storagePath) { + return cb( + Errors.MissingConfig( + 'Cannot generate new avatar: Missing path(s) in configuration' + ) + ); + } + + async.waterfall( + [ + callback => { + return fse.mkdirs(storagePath, err => { + return callback(err); + }); + }, + callback => { + const avatar = new AvatarGenerator({ + parts: [ + 'background', + 'face', + 'clothes', + 'head', + 'hair', + 'eye', + 'mouth', + ], + partsLocation: spritesPath, + imageExtension: '.png', + }); + + const userSex = ( + this.getProperty(UserProps.Sex) || 'M' + ).toUpperCase(); + + const variant = userSex[0] === 'M' ? 'male' : 'female'; + const stableId = `user#${this.userId.toString()}`; + + avatar + .generate(stableId, variant) + .then(image => { + const filename = `user-avatar-${this.userId}.png`; + const outPath = paths.join(storagePath, filename); + image.resize(640, 640); + image.toFile(outPath, err => { + if (!err) { + Log.info( + { + userId: this.userId, + username: this.username, + outPath, + }, + `New avatar generated for ${this.username}` + ); + } + return callback(err, outPath); + }); + }) + .catch(err => { + return callback(err); + }); + }, + ], + (err, outPath) => { + return cb(err, outPath); + } + ); + } + persistProperties(properties, transOrDb, cb) { if (!_.isFunction(cb) && _.isFunction(transOrDb)) { cb = transOrDb; diff --git a/core/web_handler_module.js b/core/web_handler_module.js index bd9a86445..eba8352d8 100644 --- a/core/web_handler_module.js +++ b/core/web_handler_module.js @@ -8,7 +8,7 @@ module.exports = class WebHandlerModule extends PluginModule { init(webServer, cb) { // to be implemented! - this.webServer = webHandler; + this.webServer = webServer; return cb(null); } diff --git a/package.json b/package.json index 7a5e6218d..7e4bd4cc4 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "dependencies": { "@breejs/later": "4.1.0", "async": "3.2.4", + "avatar-generator": "^2.0.4", "binary-parser": "2.1.0", "buffers": "github:NuSkooler/node-buffers", "bunyan": "1.8.15", diff --git a/yarn.lock b/yarn.lock index 75869d9d6..b7b82df24 100644 --- a/yarn.lock +++ b/yarn.lock @@ -172,6 +172,11 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: dependencies: type-fest "^0.21.3" +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" @@ -203,6 +208,11 @@ anymatch@^3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + "aproba@^1.0.3 || ^2.0.0": version "2.0.0" resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" @@ -224,6 +234,14 @@ are-we-there-yet@^3.0.0: delegates "^1.0.0" readable-stream "^3.6.0" +are-we-there-yet@~1.1.2: + version "1.1.7" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + argparse@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" @@ -263,6 +281,15 @@ async@3.2.4: resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== +avatar-generator@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/avatar-generator/-/avatar-generator-2.0.4.tgz#01d5db33b86ff32cf274f532ab9def0aaf49921a" + integrity sha512-1XH0LAO6QwtOvv9ImVKr6O0DUtH+QX4B6ReBcfjbUPnFVZMfSgM18jkP8MDsrPxk9UmCGMddxBCxdizU7lbwrw== + dependencies: + commander "^5.1.0" + seedrandom "^3.0.5" + sharp "^0.25.2" + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" @@ -290,7 +317,7 @@ binary-parser@2.1.0: resolved "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz" integrity sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ== -bl@^4.1.0: +bl@^4.0.3, bl@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -409,6 +436,11 @@ chardet@^0.7.0: resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + chownr@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" @@ -457,11 +489,23 @@ clone@^1.0.2: resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" integrity "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== + coffee-script@^1.12.4: version "1.12.7" resolved "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz" integrity sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw== +color-convert@^1.9.3: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + color-convert@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" @@ -469,21 +513,47 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@~1.1.4: +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-string@^1.6.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + color-support@^1.1.2, color-support@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== +color@^3.1.2: + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + colorette@^2.0.19: version "2.0.19" resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + commander@^9.4.1: version "9.5.0" resolved "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz" @@ -494,7 +564,7 @@ concat-map@0.0.1: resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" -console-control-strings@^1.0.0, console-control-strings@^1.1.0: +console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== @@ -504,6 +574,11 @@ core-util-is@1.0.2: resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + cpu-features@~0.0.4: version "0.0.4" resolved "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz" @@ -535,11 +610,30 @@ debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: dependencies: ms "2.1.2" +decompress-response@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" + integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== + dependencies: + mimic-response "^2.0.0" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + deep-extend@^0.5.1: version "0.5.1" resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz" integrity sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w== +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@^0.1.3: version "0.1.3" resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" @@ -587,6 +681,11 @@ depd@^1.1.2: resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + detect-libc@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" @@ -652,6 +751,13 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" +end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + env-paths@^2.2.0: version "2.2.1" resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" @@ -828,6 +934,11 @@ exiftool@^0.0.3: resolved "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz" integrity "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + external-editor@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz" @@ -913,6 +1024,11 @@ flatted@^3.1.0: resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-extra@10.1.0: version "10.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" @@ -963,6 +1079,20 @@ gauge@^4.0.3: strip-ansi "^6.0.1" wide-align "^1.1.5" +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + get-stream@^5.0.0: version "5.2.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" @@ -982,6 +1112,11 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + glob-parent@^6.0.2: version "6.0.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" @@ -1080,7 +1215,7 @@ has-flag@^4.0.0: resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-unicode@^2.0.1: +has-unicode@^2.0.0, has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== @@ -1203,7 +1338,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4: +inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -1217,6 +1352,11 @@ ini-config-parser@^1.0.4: deep-extend "^0.5.1" rimraf "^2.6.1" +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + inquirer@^8.2.2: version "8.2.2" resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz" @@ -1242,11 +1382,23 @@ ip@^2.0.0: resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== + dependencies: + number-is-nan "^1.0.0" + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" @@ -1318,6 +1470,11 @@ is-unicode-supported@^0.1.0: resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" @@ -1548,6 +1705,16 @@ mimic-fn@^4.0.0: resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== +mimic-response@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + "minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" @@ -1567,6 +1734,11 @@ minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +minimist@^1.2.3: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + minipass-collect@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" @@ -1621,6 +1793,11 @@ minizlib@^2.0.0, minizlib@^2.1.1: minipass "^3.0.0" yallist "^4.0.0" +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" @@ -1662,6 +1839,11 @@ nan@^2.10.0, nan@^2.14.0, nan@^2.15.0, nan@^2.16.0: resolved "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz" integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" @@ -1687,6 +1869,18 @@ nntp-server@3.1.0: serialize-error "^8.1.0" split2 "^4.1.0" +node-abi@^2.7.0: + version "2.30.1" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" + integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w== + dependencies: + semver "^5.4.1" + +node-addon-api@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== + node-addon-api@^4.2.0: version "4.3.0" resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz" @@ -1732,6 +1926,11 @@ nodemailer@6.7.7: resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz" integrity sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA== +noop-logger@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" + integrity sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ== + nopt@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" @@ -1758,6 +1957,16 @@ npm-run-path@^5.1.0: dependencies: path-key "^4.0.0" +npmlog@^4.0.1, npmlog@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + npmlog@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" @@ -1778,7 +1987,12 @@ npmlog@^6.0.0: gauge "^4.0.3" set-blocking "^2.0.0" -object-assign@^4.0.1, object-assign@^4.1.1: +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" @@ -1938,6 +2152,27 @@ pinkie@^2.0.0: resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" integrity "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" +prebuild-install@^5.3.4: + version "5.3.6" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.6.tgz#7c225568d864c71d89d07f8796042733a3f54291" + integrity sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg== + dependencies: + detect-libc "^1.0.3" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^2.7.0" + noop-logger "^0.1.1" + npmlog "^4.0.1" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^3.0.3" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + which-pm-runs "^1.0.0" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" @@ -1948,6 +2183,11 @@ prettier@2.8.1: resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz" integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" @@ -1984,7 +2224,30 @@ queue-microtask@^1.2.2: resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -readable-stream@^3.4.0, readable-stream@^3.6.0: +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +readable-stream@^2.0.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -2076,7 +2339,12 @@ rxjs@^7.5.5, rxjs@^7.5.7: dependencies: tslib "^2.1.0" -safe-buffer@~5.1.0: +safe-buffer@^5.0.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== @@ -2113,11 +2381,28 @@ sanitize-filename@^1.6.3: dependencies: truncate-utf8-bytes "^1.0.0" +seedrandom@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7" + integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg== + +semver@^5.4.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + semver@^6.0.0: version "6.3.0" resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.3.2: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + semver@^7.3.5: version "7.3.7" resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" @@ -2132,11 +2417,26 @@ serialize-error@^8.1.0: dependencies: type-fest "^0.20.2" -set-blocking@^2.0.0: +set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== +sharp@^0.25.2: + version "0.25.4" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.25.4.tgz#1a8e542144a07ab7e9316ab89de80182b827c363" + integrity sha512-umSzJJ1oBwIOfwFFt/fJ7JgCva9FvrEU2cbbm7u/3hSDZhXvkME8WE5qpaJqLIe2Har5msF5UG4CzYlEg5o3BQ== + dependencies: + color "^3.1.2" + detect-libc "^1.0.3" + node-addon-api "^3.0.0" + npmlog "^4.1.2" + prebuild-install "^5.3.4" + semver "^7.3.2" + simple-get "^4.0.0" + tar "^6.0.2" + tunnel-agent "^0.6.0" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" @@ -2154,6 +2454,36 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7: resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.1.tgz#cc7ba77cfbe761036fbfce3d021af25fc5584d55" + integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA== + dependencies: + decompress-response "^4.2.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-get@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + slice-ansi@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" @@ -2263,6 +2593,15 @@ string-argv@^0.3.1: resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" @@ -2288,6 +2627,20 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.1.0" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" @@ -2317,6 +2670,11 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + supports-color@^7.1.0: version "7.1.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz" @@ -2329,6 +2687,27 @@ systeminformation@5.12.3: resolved "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.3.tgz" integrity sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A== +tar-fs@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: version "6.1.11" resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" @@ -2407,6 +2786,13 @@ tslib@^2.1.0: resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" @@ -2465,7 +2851,7 @@ utf8-byte-length@^1.0.1: resolved "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz" integrity "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" -util-deprecate@^1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" @@ -2547,6 +2933,11 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" +which-pm-runs@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.1.0.tgz#35ccf7b1a0fce87bd8b92a478c9d045785d3bf35" + integrity sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA== + which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" @@ -2554,7 +2945,7 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -wide-align@^1.1.2, wide-align@^1.1.5: +wide-align@^1.1.0, wide-align@^1.1.2, wide-align@^1.1.5: version "1.1.5" resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== From c5fb1bd685cdbbcba7838d97cd7bb52359c8a18a Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 21 Jan 2023 20:58:50 -0700 Subject: [PATCH 073/233] Add default avatar sprites --- misc/avatar-sprites/female/background1.png | Bin 0 -> 12338 bytes misc/avatar-sprites/female/background2.png | Bin 0 -> 11887 bytes misc/avatar-sprites/female/background3.png | Bin 0 -> 12653 bytes misc/avatar-sprites/female/background4.png | Bin 0 -> 13302 bytes misc/avatar-sprites/female/background5.png | Bin 0 -> 14083 bytes misc/avatar-sprites/female/clothes1.png | Bin 0 -> 3453 bytes misc/avatar-sprites/female/clothes10.png | Bin 0 -> 3858 bytes misc/avatar-sprites/female/clothes11.png | Bin 0 -> 7432 bytes misc/avatar-sprites/female/clothes12.png | Bin 0 -> 7448 bytes misc/avatar-sprites/female/clothes13.png | Bin 0 -> 7337 bytes misc/avatar-sprites/female/clothes14.png | Bin 0 -> 7348 bytes misc/avatar-sprites/female/clothes15.png | Bin 0 -> 7373 bytes misc/avatar-sprites/female/clothes16.png | Bin 0 -> 7305 bytes misc/avatar-sprites/female/clothes17.png | Bin 0 -> 6891 bytes misc/avatar-sprites/female/clothes18.png | Bin 0 -> 6976 bytes misc/avatar-sprites/female/clothes19.png | Bin 0 -> 6924 bytes misc/avatar-sprites/female/clothes2.png | Bin 0 -> 3869 bytes misc/avatar-sprites/female/clothes20.png | Bin 0 -> 6970 bytes misc/avatar-sprites/female/clothes21.png | Bin 0 -> 6963 bytes misc/avatar-sprites/female/clothes22.png | Bin 0 -> 6945 bytes misc/avatar-sprites/female/clothes23.png | Bin 0 -> 6882 bytes misc/avatar-sprites/female/clothes24.png | Bin 0 -> 6932 bytes misc/avatar-sprites/female/clothes25.png | Bin 0 -> 6947 bytes misc/avatar-sprites/female/clothes26.png | Bin 0 -> 5244 bytes misc/avatar-sprites/female/clothes27.png | Bin 0 -> 5132 bytes misc/avatar-sprites/female/clothes28.png | Bin 0 -> 5448 bytes misc/avatar-sprites/female/clothes29.png | Bin 0 -> 5504 bytes misc/avatar-sprites/female/clothes3.png | Bin 0 -> 3855 bytes misc/avatar-sprites/female/clothes30.png | Bin 0 -> 5599 bytes misc/avatar-sprites/female/clothes31.png | Bin 0 -> 5543 bytes misc/avatar-sprites/female/clothes32.png | Bin 0 -> 5546 bytes misc/avatar-sprites/female/clothes33.png | Bin 0 -> 5395 bytes misc/avatar-sprites/female/clothes34.png | Bin 0 -> 5383 bytes misc/avatar-sprites/female/clothes35.png | Bin 0 -> 5358 bytes misc/avatar-sprites/female/clothes36.png | Bin 0 -> 5174 bytes misc/avatar-sprites/female/clothes37.png | Bin 0 -> 5398 bytes misc/avatar-sprites/female/clothes38.png | Bin 0 -> 5375 bytes misc/avatar-sprites/female/clothes39.png | Bin 0 -> 5369 bytes misc/avatar-sprites/female/clothes4.png | Bin 0 -> 3867 bytes misc/avatar-sprites/female/clothes40.png | Bin 0 -> 5284 bytes misc/avatar-sprites/female/clothes41.png | Bin 0 -> 4999 bytes misc/avatar-sprites/female/clothes42.png | Bin 0 -> 5056 bytes misc/avatar-sprites/female/clothes43.png | Bin 0 -> 4919 bytes misc/avatar-sprites/female/clothes44.png | Bin 0 -> 5105 bytes misc/avatar-sprites/female/clothes45.png | Bin 0 -> 5081 bytes misc/avatar-sprites/female/clothes46.png | Bin 0 -> 5091 bytes misc/avatar-sprites/female/clothes47.png | Bin 0 -> 5106 bytes misc/avatar-sprites/female/clothes48.png | Bin 0 -> 4994 bytes misc/avatar-sprites/female/clothes49.png | Bin 0 -> 5087 bytes misc/avatar-sprites/female/clothes5.png | Bin 0 -> 3872 bytes misc/avatar-sprites/female/clothes50.png | Bin 0 -> 4722 bytes misc/avatar-sprites/female/clothes51.png | Bin 0 -> 5561 bytes misc/avatar-sprites/female/clothes52.png | Bin 0 -> 4511 bytes misc/avatar-sprites/female/clothes53.png | Bin 0 -> 4640 bytes misc/avatar-sprites/female/clothes54.png | Bin 0 -> 4412 bytes misc/avatar-sprites/female/clothes55.png | Bin 0 -> 5283 bytes misc/avatar-sprites/female/clothes56.png | Bin 0 -> 4001 bytes misc/avatar-sprites/female/clothes57.png | Bin 0 -> 4933 bytes misc/avatar-sprites/female/clothes58.png | Bin 0 -> 4318 bytes misc/avatar-sprites/female/clothes59.png | Bin 0 -> 5842 bytes misc/avatar-sprites/female/clothes6.png | Bin 0 -> 3867 bytes misc/avatar-sprites/female/clothes7.png | Bin 0 -> 3859 bytes misc/avatar-sprites/female/clothes8.png | Bin 0 -> 3865 bytes misc/avatar-sprites/female/clothes9.png | Bin 0 -> 3843 bytes misc/avatar-sprites/female/eye1.png | Bin 0 -> 4713 bytes misc/avatar-sprites/female/eye10.png | Bin 0 -> 4719 bytes misc/avatar-sprites/female/eye11.png | Bin 0 -> 3919 bytes misc/avatar-sprites/female/eye12.png | Bin 0 -> 6713 bytes misc/avatar-sprites/female/eye13.png | Bin 0 -> 6731 bytes misc/avatar-sprites/female/eye14.png | Bin 0 -> 6725 bytes misc/avatar-sprites/female/eye15.png | Bin 0 -> 6739 bytes misc/avatar-sprites/female/eye16.png | Bin 0 -> 6706 bytes misc/avatar-sprites/female/eye17.png | Bin 0 -> 5275 bytes misc/avatar-sprites/female/eye18.png | Bin 0 -> 5246 bytes misc/avatar-sprites/female/eye19.png | Bin 0 -> 5282 bytes misc/avatar-sprites/female/eye2.png | Bin 0 -> 4707 bytes misc/avatar-sprites/female/eye20.png | Bin 0 -> 5280 bytes misc/avatar-sprites/female/eye21.png | Bin 0 -> 5236 bytes misc/avatar-sprites/female/eye22.png | Bin 0 -> 7348 bytes misc/avatar-sprites/female/eye23.png | Bin 0 -> 6667 bytes misc/avatar-sprites/female/eye24.png | Bin 0 -> 6898 bytes misc/avatar-sprites/female/eye25.png | Bin 0 -> 6340 bytes misc/avatar-sprites/female/eye26.png | Bin 0 -> 6382 bytes misc/avatar-sprites/female/eye27.png | Bin 0 -> 6518 bytes misc/avatar-sprites/female/eye28.png | Bin 0 -> 6261 bytes misc/avatar-sprites/female/eye29.png | Bin 0 -> 6507 bytes misc/avatar-sprites/female/eye3.png | Bin 0 -> 4696 bytes misc/avatar-sprites/female/eye30.png | Bin 0 -> 6356 bytes misc/avatar-sprites/female/eye31.png | Bin 0 -> 5716 bytes misc/avatar-sprites/female/eye32.png | Bin 0 -> 5720 bytes misc/avatar-sprites/female/eye33.png | Bin 0 -> 5703 bytes misc/avatar-sprites/female/eye34.png | Bin 0 -> 5724 bytes misc/avatar-sprites/female/eye35.png | Bin 0 -> 4168 bytes misc/avatar-sprites/female/eye36.png | Bin 0 -> 4471 bytes misc/avatar-sprites/female/eye37.png | Bin 0 -> 4036 bytes misc/avatar-sprites/female/eye38.png | Bin 0 -> 4072 bytes misc/avatar-sprites/female/eye39.png | Bin 0 -> 4056 bytes misc/avatar-sprites/female/eye4.png | Bin 0 -> 3302 bytes misc/avatar-sprites/female/eye40.png | Bin 0 -> 4062 bytes misc/avatar-sprites/female/eye41.png | Bin 0 -> 4439 bytes misc/avatar-sprites/female/eye42.png | Bin 0 -> 4453 bytes misc/avatar-sprites/female/eye43.png | Bin 0 -> 4116 bytes misc/avatar-sprites/female/eye44.png | Bin 0 -> 4030 bytes misc/avatar-sprites/female/eye45.png | Bin 0 -> 3984 bytes misc/avatar-sprites/female/eye46.png | Bin 0 -> 4038 bytes misc/avatar-sprites/female/eye47.png | Bin 0 -> 4260 bytes misc/avatar-sprites/female/eye48.png | Bin 0 -> 4284 bytes misc/avatar-sprites/female/eye49.png | Bin 0 -> 4345 bytes misc/avatar-sprites/female/eye5.png | Bin 0 -> 3707 bytes misc/avatar-sprites/female/eye50.png | Bin 0 -> 3990 bytes misc/avatar-sprites/female/eye51.png | Bin 0 -> 4006 bytes misc/avatar-sprites/female/eye52.png | Bin 0 -> 4017 bytes misc/avatar-sprites/female/eye53.png | Bin 0 -> 4011 bytes misc/avatar-sprites/female/eye6.png | Bin 0 -> 3702 bytes misc/avatar-sprites/female/eye7.png | Bin 0 -> 3712 bytes misc/avatar-sprites/female/eye8.png | Bin 0 -> 4708 bytes misc/avatar-sprites/female/eye9.png | Bin 0 -> 4725 bytes misc/avatar-sprites/female/face1.png | Bin 0 -> 171408 bytes misc/avatar-sprites/female/face2.png | Bin 0 -> 152441 bytes misc/avatar-sprites/female/face3.png | Bin 0 -> 161547 bytes misc/avatar-sprites/female/face4.png | Bin 0 -> 127489 bytes misc/avatar-sprites/female/head1.png | Bin 0 -> 5596 bytes misc/avatar-sprites/female/head10.png | Bin 0 -> 6655 bytes misc/avatar-sprites/female/head11.png | Bin 0 -> 6683 bytes misc/avatar-sprites/female/head12.png | Bin 0 -> 6821 bytes misc/avatar-sprites/female/head13.png | Bin 0 -> 5773 bytes misc/avatar-sprites/female/head14.png | Bin 0 -> 5646 bytes misc/avatar-sprites/female/head15.png | Bin 0 -> 5669 bytes misc/avatar-sprites/female/head16.png | Bin 0 -> 6888 bytes misc/avatar-sprites/female/head17.png | Bin 0 -> 6894 bytes misc/avatar-sprites/female/head18.png | Bin 0 -> 7019 bytes misc/avatar-sprites/female/head19.png | Bin 0 -> 4863 bytes misc/avatar-sprites/female/head2.png | Bin 0 -> 5632 bytes misc/avatar-sprites/female/head20.png | Bin 0 -> 5400 bytes misc/avatar-sprites/female/head21.png | Bin 0 -> 5324 bytes misc/avatar-sprites/female/head22.png | Bin 0 -> 7944 bytes misc/avatar-sprites/female/head23.png | Bin 0 -> 8355 bytes misc/avatar-sprites/female/head24.png | Bin 0 -> 4965 bytes misc/avatar-sprites/female/head25.png | Bin 0 -> 7035 bytes misc/avatar-sprites/female/head26.png | Bin 0 -> 4167 bytes misc/avatar-sprites/female/head27.png | Bin 0 -> 4899 bytes misc/avatar-sprites/female/head28.png | Bin 0 -> 7304 bytes misc/avatar-sprites/female/head29.png | Bin 0 -> 7053 bytes misc/avatar-sprites/female/head3.png | Bin 0 -> 5737 bytes misc/avatar-sprites/female/head30.png | Bin 0 -> 6442 bytes misc/avatar-sprites/female/head31.png | Bin 0 -> 10872 bytes misc/avatar-sprites/female/head32.png | Bin 0 -> 4831 bytes misc/avatar-sprites/female/head33.png | Bin 0 -> 5295 bytes misc/avatar-sprites/female/head4.png | Bin 0 -> 5492 bytes misc/avatar-sprites/female/head5.png | Bin 0 -> 5426 bytes misc/avatar-sprites/female/head6.png | Bin 0 -> 5411 bytes misc/avatar-sprites/female/head7.png | Bin 0 -> 8995 bytes misc/avatar-sprites/female/head8.png | Bin 0 -> 8828 bytes misc/avatar-sprites/female/head9.png | Bin 0 -> 8697 bytes misc/avatar-sprites/female/mouth1.png | Bin 0 -> 3159 bytes misc/avatar-sprites/female/mouth10.png | Bin 0 -> 4164 bytes misc/avatar-sprites/female/mouth11.png | Bin 0 -> 3981 bytes misc/avatar-sprites/female/mouth12.png | Bin 0 -> 3956 bytes misc/avatar-sprites/female/mouth13.png | Bin 0 -> 3992 bytes misc/avatar-sprites/female/mouth14.png | Bin 0 -> 3993 bytes misc/avatar-sprites/female/mouth15.png | Bin 0 -> 4281 bytes misc/avatar-sprites/female/mouth16.png | Bin 0 -> 3967 bytes misc/avatar-sprites/female/mouth17.png | Bin 0 -> 3979 bytes misc/avatar-sprites/female/mouth2.png | Bin 0 -> 3607 bytes misc/avatar-sprites/female/mouth3.png | Bin 0 -> 3461 bytes misc/avatar-sprites/female/mouth4.png | Bin 0 -> 3305 bytes misc/avatar-sprites/female/mouth5.png | Bin 0 -> 3841 bytes misc/avatar-sprites/female/mouth6.png | Bin 0 -> 3333 bytes misc/avatar-sprites/female/mouth7.png | Bin 0 -> 3658 bytes misc/avatar-sprites/female/mouth8.png | Bin 0 -> 3453 bytes misc/avatar-sprites/female/mouth9.png | Bin 0 -> 3966 bytes misc/avatar-sprites/male/background1.png | Bin 0 -> 12338 bytes misc/avatar-sprites/male/background2.png | Bin 0 -> 11887 bytes misc/avatar-sprites/male/background3.png | Bin 0 -> 12653 bytes misc/avatar-sprites/male/background4.png | Bin 0 -> 13302 bytes misc/avatar-sprites/male/background5.png | Bin 0 -> 14083 bytes misc/avatar-sprites/male/clothes1.png | Bin 0 -> 5879 bytes misc/avatar-sprites/male/clothes10.png | Bin 0 -> 4898 bytes misc/avatar-sprites/male/clothes11.png | Bin 0 -> 6058 bytes misc/avatar-sprites/male/clothes12.png | Bin 0 -> 6172 bytes misc/avatar-sprites/male/clothes13.png | Bin 0 -> 6078 bytes misc/avatar-sprites/male/clothes14.png | Bin 0 -> 6105 bytes misc/avatar-sprites/male/clothes15.png | Bin 0 -> 4651 bytes misc/avatar-sprites/male/clothes16.png | Bin 0 -> 4820 bytes misc/avatar-sprites/male/clothes17.png | Bin 0 -> 4820 bytes misc/avatar-sprites/male/clothes18.png | Bin 0 -> 4757 bytes misc/avatar-sprites/male/clothes19.png | Bin 0 -> 5490 bytes misc/avatar-sprites/male/clothes2.png | Bin 0 -> 4849 bytes misc/avatar-sprites/male/clothes20.png | Bin 0 -> 5352 bytes misc/avatar-sprites/male/clothes21.png | Bin 0 -> 5190 bytes misc/avatar-sprites/male/clothes22.png | Bin 0 -> 5206 bytes misc/avatar-sprites/male/clothes23.png | Bin 0 -> 5132 bytes misc/avatar-sprites/male/clothes24.png | Bin 0 -> 5174 bytes misc/avatar-sprites/male/clothes25.png | Bin 0 -> 5124 bytes misc/avatar-sprites/male/clothes26.png | Bin 0 -> 5155 bytes misc/avatar-sprites/male/clothes27.png | Bin 0 -> 5160 bytes misc/avatar-sprites/male/clothes28.png | Bin 0 -> 5096 bytes misc/avatar-sprites/male/clothes29.png | Bin 0 -> 4802 bytes misc/avatar-sprites/male/clothes3.png | Bin 0 -> 5020 bytes misc/avatar-sprites/male/clothes30.png | Bin 0 -> 4796 bytes misc/avatar-sprites/male/clothes31.png | Bin 0 -> 4783 bytes misc/avatar-sprites/male/clothes32.png | Bin 0 -> 4815 bytes misc/avatar-sprites/male/clothes33.png | Bin 0 -> 4817 bytes misc/avatar-sprites/male/clothes34.png | Bin 0 -> 4809 bytes misc/avatar-sprites/male/clothes35.png | Bin 0 -> 4573 bytes misc/avatar-sprites/male/clothes36.png | Bin 0 -> 4593 bytes misc/avatar-sprites/male/clothes37.png | Bin 0 -> 4584 bytes misc/avatar-sprites/male/clothes38.png | Bin 0 -> 4283 bytes misc/avatar-sprites/male/clothes39.png | Bin 0 -> 4262 bytes misc/avatar-sprites/male/clothes4.png | Bin 0 -> 5278 bytes misc/avatar-sprites/male/clothes40.png | Bin 0 -> 4272 bytes misc/avatar-sprites/male/clothes41.png | Bin 0 -> 4274 bytes misc/avatar-sprites/male/clothes42.png | Bin 0 -> 4254 bytes misc/avatar-sprites/male/clothes43.png | Bin 0 -> 4216 bytes misc/avatar-sprites/male/clothes44.png | Bin 0 -> 4629 bytes misc/avatar-sprites/male/clothes45.png | Bin 0 -> 5411 bytes misc/avatar-sprites/male/clothes46.png | Bin 0 -> 4266 bytes misc/avatar-sprites/male/clothes47.png | Bin 0 -> 4536 bytes misc/avatar-sprites/male/clothes48.png | Bin 0 -> 4650 bytes misc/avatar-sprites/male/clothes49.png | Bin 0 -> 5076 bytes misc/avatar-sprites/male/clothes5.png | Bin 0 -> 4268 bytes misc/avatar-sprites/male/clothes50.png | Bin 0 -> 4502 bytes misc/avatar-sprites/male/clothes51.png | Bin 0 -> 4584 bytes misc/avatar-sprites/male/clothes52.png | Bin 0 -> 5170 bytes misc/avatar-sprites/male/clothes53.png | Bin 0 -> 5383 bytes misc/avatar-sprites/male/clothes54.png | Bin 0 -> 8599 bytes misc/avatar-sprites/male/clothes55.png | Bin 0 -> 4411 bytes misc/avatar-sprites/male/clothes56.png | Bin 0 -> 6355 bytes misc/avatar-sprites/male/clothes57.png | Bin 0 -> 4552 bytes misc/avatar-sprites/male/clothes58.png | Bin 0 -> 6536 bytes misc/avatar-sprites/male/clothes59.png | Bin 0 -> 4929 bytes misc/avatar-sprites/male/clothes6.png | Bin 0 -> 5739 bytes misc/avatar-sprites/male/clothes60.png | Bin 0 -> 5608 bytes misc/avatar-sprites/male/clothes61.png | Bin 0 -> 5349 bytes misc/avatar-sprites/male/clothes62.png | Bin 0 -> 7583 bytes misc/avatar-sprites/male/clothes63.png | Bin 0 -> 4852 bytes misc/avatar-sprites/male/clothes64.png | Bin 0 -> 5378 bytes misc/avatar-sprites/male/clothes65.png | Bin 0 -> 4407 bytes misc/avatar-sprites/male/clothes7.png | Bin 0 -> 4850 bytes misc/avatar-sprites/male/clothes8.png | Bin 0 -> 4826 bytes misc/avatar-sprites/male/clothes9.png | Bin 0 -> 4857 bytes misc/avatar-sprites/male/eye1.png | Bin 0 -> 3815 bytes misc/avatar-sprites/male/eye10.png | Bin 0 -> 5977 bytes misc/avatar-sprites/male/eye11.png | Bin 0 -> 10305 bytes misc/avatar-sprites/male/eye12.png | Bin 0 -> 7200 bytes misc/avatar-sprites/male/eye13.png | Bin 0 -> 6304 bytes misc/avatar-sprites/male/eye14.png | Bin 0 -> 6682 bytes misc/avatar-sprites/male/eye15.png | Bin 0 -> 7546 bytes misc/avatar-sprites/male/eye16.png | Bin 0 -> 5273 bytes misc/avatar-sprites/male/eye17.png | Bin 0 -> 4046 bytes misc/avatar-sprites/male/eye18.png | Bin 0 -> 4012 bytes misc/avatar-sprites/male/eye19.png | Bin 0 -> 4045 bytes misc/avatar-sprites/male/eye2.png | Bin 0 -> 3734 bytes misc/avatar-sprites/male/eye20.png | Bin 0 -> 3985 bytes misc/avatar-sprites/male/eye21.png | Bin 0 -> 4036 bytes misc/avatar-sprites/male/eye22.png | Bin 0 -> 4081 bytes misc/avatar-sprites/male/eye23.png | Bin 0 -> 4031 bytes misc/avatar-sprites/male/eye24.png | Bin 0 -> 4028 bytes misc/avatar-sprites/male/eye25.png | Bin 0 -> 4009 bytes misc/avatar-sprites/male/eye26.png | Bin 0 -> 4028 bytes misc/avatar-sprites/male/eye27.png | Bin 0 -> 3986 bytes misc/avatar-sprites/male/eye28.png | Bin 0 -> 3999 bytes misc/avatar-sprites/male/eye29.png | Bin 0 -> 4019 bytes misc/avatar-sprites/male/eye3.png | Bin 0 -> 5695 bytes misc/avatar-sprites/male/eye30.png | Bin 0 -> 4028 bytes misc/avatar-sprites/male/eye31.png | Bin 0 -> 3985 bytes misc/avatar-sprites/male/eye32.png | Bin 0 -> 4001 bytes misc/avatar-sprites/male/eye4.png | Bin 0 -> 5698 bytes misc/avatar-sprites/male/eye5.png | Bin 0 -> 5874 bytes misc/avatar-sprites/male/eye6.png | Bin 0 -> 4117 bytes misc/avatar-sprites/male/eye7.png | Bin 0 -> 4580 bytes misc/avatar-sprites/male/eye8.png | Bin 0 -> 4354 bytes misc/avatar-sprites/male/eye9.png | Bin 0 -> 4091 bytes misc/avatar-sprites/male/face1.png | Bin 0 -> 183895 bytes misc/avatar-sprites/male/face2.png | Bin 0 -> 167154 bytes misc/avatar-sprites/male/face3.png | Bin 0 -> 147669 bytes misc/avatar-sprites/male/face4.png | Bin 0 -> 179594 bytes misc/avatar-sprites/male/hair1.png | Bin 0 -> 4909 bytes misc/avatar-sprites/male/hair10.png | Bin 0 -> 5123 bytes misc/avatar-sprites/male/hair11.png | Bin 0 -> 5311 bytes misc/avatar-sprites/male/hair12.png | Bin 0 -> 10242 bytes misc/avatar-sprites/male/hair13.png | Bin 0 -> 6128 bytes misc/avatar-sprites/male/hair14.png | Bin 0 -> 7402 bytes misc/avatar-sprites/male/hair15.png | Bin 0 -> 7233 bytes misc/avatar-sprites/male/hair16.png | Bin 0 -> 6563 bytes misc/avatar-sprites/male/hair17.png | Bin 0 -> 8322 bytes misc/avatar-sprites/male/hair18.png | Bin 0 -> 9368 bytes misc/avatar-sprites/male/hair19.png | Bin 0 -> 5317 bytes misc/avatar-sprites/male/hair2.png | Bin 0 -> 5335 bytes misc/avatar-sprites/male/hair20.png | Bin 0 -> 4787 bytes misc/avatar-sprites/male/hair21.png | Bin 0 -> 5261 bytes misc/avatar-sprites/male/hair22.png | Bin 0 -> 4784 bytes misc/avatar-sprites/male/hair23.png | Bin 0 -> 8350 bytes misc/avatar-sprites/male/hair24.png | Bin 0 -> 4371 bytes misc/avatar-sprites/male/hair25.png | Bin 0 -> 6867 bytes misc/avatar-sprites/male/hair26.png | Bin 0 -> 7177 bytes misc/avatar-sprites/male/hair27.png | Bin 0 -> 5389 bytes misc/avatar-sprites/male/hair28.png | Bin 0 -> 8958 bytes misc/avatar-sprites/male/hair29.png | Bin 0 -> 5703 bytes misc/avatar-sprites/male/hair3.png | Bin 0 -> 5025 bytes misc/avatar-sprites/male/hair30.png | Bin 0 -> 4902 bytes misc/avatar-sprites/male/hair31.png | Bin 0 -> 4661 bytes misc/avatar-sprites/male/hair32.png | Bin 0 -> 5245 bytes misc/avatar-sprites/male/hair33.png | Bin 0 -> 5295 bytes misc/avatar-sprites/male/hair34.png | Bin 0 -> 5258 bytes misc/avatar-sprites/male/hair35.png | Bin 0 -> 5187 bytes misc/avatar-sprites/male/hair36.png | Bin 0 -> 5193 bytes misc/avatar-sprites/male/hair4.png | Bin 0 -> 4660 bytes misc/avatar-sprites/male/hair5.png | Bin 0 -> 5238 bytes misc/avatar-sprites/male/hair6.png | Bin 0 -> 5680 bytes misc/avatar-sprites/male/hair7.png | Bin 0 -> 3313 bytes misc/avatar-sprites/male/hair8.png | Bin 0 -> 5014 bytes misc/avatar-sprites/male/hair9.png | Bin 0 -> 5114 bytes misc/avatar-sprites/male/mouth1.png | Bin 0 -> 4223 bytes misc/avatar-sprites/male/mouth10.png | Bin 0 -> 3221 bytes misc/avatar-sprites/male/mouth11.png | Bin 0 -> 3250 bytes misc/avatar-sprites/male/mouth12.png | Bin 0 -> 3881 bytes misc/avatar-sprites/male/mouth13.png | Bin 0 -> 3966 bytes misc/avatar-sprites/male/mouth14.png | Bin 0 -> 4021 bytes misc/avatar-sprites/male/mouth15.png | Bin 0 -> 7674 bytes misc/avatar-sprites/male/mouth16.png | Bin 0 -> 3983 bytes misc/avatar-sprites/male/mouth17.png | Bin 0 -> 3963 bytes misc/avatar-sprites/male/mouth18.png | Bin 0 -> 5830 bytes misc/avatar-sprites/male/mouth19.png | Bin 0 -> 3993 bytes misc/avatar-sprites/male/mouth2.png | Bin 0 -> 4966 bytes misc/avatar-sprites/male/mouth20.png | Bin 0 -> 7524 bytes misc/avatar-sprites/male/mouth21.png | Bin 0 -> 3955 bytes misc/avatar-sprites/male/mouth22.png | Bin 0 -> 5409 bytes misc/avatar-sprites/male/mouth23.png | Bin 0 -> 5648 bytes misc/avatar-sprites/male/mouth24.png | Bin 0 -> 7535 bytes misc/avatar-sprites/male/mouth25.png | Bin 0 -> 6674 bytes misc/avatar-sprites/male/mouth26.png | Bin 0 -> 5398 bytes misc/avatar-sprites/male/mouth3.png | Bin 0 -> 5019 bytes misc/avatar-sprites/male/mouth4.png | Bin 0 -> 6033 bytes misc/avatar-sprites/male/mouth5.png | Bin 0 -> 6283 bytes misc/avatar-sprites/male/mouth6.png | Bin 0 -> 6133 bytes misc/avatar-sprites/male/mouth7.png | Bin 0 -> 4752 bytes misc/avatar-sprites/male/mouth8.png | Bin 0 -> 3485 bytes misc/avatar-sprites/male/mouth9.png | Bin 0 -> 3567 bytes 339 files changed, 0 insertions(+), 0 deletions(-) create mode 100755 misc/avatar-sprites/female/background1.png create mode 100755 misc/avatar-sprites/female/background2.png create mode 100755 misc/avatar-sprites/female/background3.png create mode 100755 misc/avatar-sprites/female/background4.png create mode 100755 misc/avatar-sprites/female/background5.png create mode 100755 misc/avatar-sprites/female/clothes1.png create mode 100755 misc/avatar-sprites/female/clothes10.png create mode 100755 misc/avatar-sprites/female/clothes11.png create mode 100755 misc/avatar-sprites/female/clothes12.png create mode 100755 misc/avatar-sprites/female/clothes13.png create mode 100755 misc/avatar-sprites/female/clothes14.png create mode 100755 misc/avatar-sprites/female/clothes15.png create mode 100755 misc/avatar-sprites/female/clothes16.png create mode 100755 misc/avatar-sprites/female/clothes17.png create mode 100755 misc/avatar-sprites/female/clothes18.png create mode 100755 misc/avatar-sprites/female/clothes19.png create mode 100755 misc/avatar-sprites/female/clothes2.png create mode 100755 misc/avatar-sprites/female/clothes20.png create mode 100755 misc/avatar-sprites/female/clothes21.png create mode 100755 misc/avatar-sprites/female/clothes22.png create mode 100755 misc/avatar-sprites/female/clothes23.png create mode 100755 misc/avatar-sprites/female/clothes24.png create mode 100755 misc/avatar-sprites/female/clothes25.png create mode 100755 misc/avatar-sprites/female/clothes26.png create mode 100755 misc/avatar-sprites/female/clothes27.png create mode 100755 misc/avatar-sprites/female/clothes28.png create mode 100755 misc/avatar-sprites/female/clothes29.png create mode 100755 misc/avatar-sprites/female/clothes3.png create mode 100755 misc/avatar-sprites/female/clothes30.png create mode 100755 misc/avatar-sprites/female/clothes31.png create mode 100755 misc/avatar-sprites/female/clothes32.png create mode 100755 misc/avatar-sprites/female/clothes33.png create mode 100755 misc/avatar-sprites/female/clothes34.png create mode 100755 misc/avatar-sprites/female/clothes35.png create mode 100755 misc/avatar-sprites/female/clothes36.png create mode 100755 misc/avatar-sprites/female/clothes37.png create mode 100755 misc/avatar-sprites/female/clothes38.png create mode 100755 misc/avatar-sprites/female/clothes39.png create mode 100755 misc/avatar-sprites/female/clothes4.png create mode 100755 misc/avatar-sprites/female/clothes40.png create mode 100755 misc/avatar-sprites/female/clothes41.png create mode 100755 misc/avatar-sprites/female/clothes42.png create mode 100755 misc/avatar-sprites/female/clothes43.png create mode 100755 misc/avatar-sprites/female/clothes44.png create mode 100755 misc/avatar-sprites/female/clothes45.png create mode 100755 misc/avatar-sprites/female/clothes46.png create mode 100755 misc/avatar-sprites/female/clothes47.png create mode 100755 misc/avatar-sprites/female/clothes48.png create mode 100755 misc/avatar-sprites/female/clothes49.png create mode 100755 misc/avatar-sprites/female/clothes5.png create mode 100755 misc/avatar-sprites/female/clothes50.png create mode 100755 misc/avatar-sprites/female/clothes51.png create mode 100755 misc/avatar-sprites/female/clothes52.png create mode 100755 misc/avatar-sprites/female/clothes53.png create mode 100755 misc/avatar-sprites/female/clothes54.png create mode 100755 misc/avatar-sprites/female/clothes55.png create mode 100755 misc/avatar-sprites/female/clothes56.png create mode 100755 misc/avatar-sprites/female/clothes57.png create mode 100755 misc/avatar-sprites/female/clothes58.png create mode 100755 misc/avatar-sprites/female/clothes59.png create mode 100755 misc/avatar-sprites/female/clothes6.png create mode 100755 misc/avatar-sprites/female/clothes7.png create mode 100755 misc/avatar-sprites/female/clothes8.png create mode 100755 misc/avatar-sprites/female/clothes9.png create mode 100755 misc/avatar-sprites/female/eye1.png create mode 100755 misc/avatar-sprites/female/eye10.png create mode 100755 misc/avatar-sprites/female/eye11.png create mode 100755 misc/avatar-sprites/female/eye12.png create mode 100755 misc/avatar-sprites/female/eye13.png create mode 100755 misc/avatar-sprites/female/eye14.png create mode 100755 misc/avatar-sprites/female/eye15.png create mode 100755 misc/avatar-sprites/female/eye16.png create mode 100755 misc/avatar-sprites/female/eye17.png create mode 100755 misc/avatar-sprites/female/eye18.png create mode 100755 misc/avatar-sprites/female/eye19.png create mode 100755 misc/avatar-sprites/female/eye2.png create mode 100755 misc/avatar-sprites/female/eye20.png create mode 100755 misc/avatar-sprites/female/eye21.png create mode 100755 misc/avatar-sprites/female/eye22.png create mode 100755 misc/avatar-sprites/female/eye23.png create mode 100755 misc/avatar-sprites/female/eye24.png create mode 100755 misc/avatar-sprites/female/eye25.png create mode 100755 misc/avatar-sprites/female/eye26.png create mode 100755 misc/avatar-sprites/female/eye27.png create mode 100755 misc/avatar-sprites/female/eye28.png create mode 100755 misc/avatar-sprites/female/eye29.png create mode 100755 misc/avatar-sprites/female/eye3.png create mode 100755 misc/avatar-sprites/female/eye30.png create mode 100755 misc/avatar-sprites/female/eye31.png create mode 100755 misc/avatar-sprites/female/eye32.png create mode 100755 misc/avatar-sprites/female/eye33.png create mode 100755 misc/avatar-sprites/female/eye34.png create mode 100755 misc/avatar-sprites/female/eye35.png create mode 100755 misc/avatar-sprites/female/eye36.png create mode 100755 misc/avatar-sprites/female/eye37.png create mode 100755 misc/avatar-sprites/female/eye38.png create mode 100755 misc/avatar-sprites/female/eye39.png create mode 100755 misc/avatar-sprites/female/eye4.png create mode 100755 misc/avatar-sprites/female/eye40.png create mode 100755 misc/avatar-sprites/female/eye41.png create mode 100755 misc/avatar-sprites/female/eye42.png create mode 100755 misc/avatar-sprites/female/eye43.png create mode 100755 misc/avatar-sprites/female/eye44.png create mode 100755 misc/avatar-sprites/female/eye45.png create mode 100755 misc/avatar-sprites/female/eye46.png create mode 100755 misc/avatar-sprites/female/eye47.png create mode 100755 misc/avatar-sprites/female/eye48.png create mode 100755 misc/avatar-sprites/female/eye49.png create mode 100755 misc/avatar-sprites/female/eye5.png create mode 100755 misc/avatar-sprites/female/eye50.png create mode 100755 misc/avatar-sprites/female/eye51.png create mode 100755 misc/avatar-sprites/female/eye52.png create mode 100755 misc/avatar-sprites/female/eye53.png create mode 100755 misc/avatar-sprites/female/eye6.png create mode 100755 misc/avatar-sprites/female/eye7.png create mode 100755 misc/avatar-sprites/female/eye8.png create mode 100755 misc/avatar-sprites/female/eye9.png create mode 100755 misc/avatar-sprites/female/face1.png create mode 100755 misc/avatar-sprites/female/face2.png create mode 100755 misc/avatar-sprites/female/face3.png create mode 100755 misc/avatar-sprites/female/face4.png create mode 100755 misc/avatar-sprites/female/head1.png create mode 100755 misc/avatar-sprites/female/head10.png create mode 100755 misc/avatar-sprites/female/head11.png create mode 100755 misc/avatar-sprites/female/head12.png create mode 100755 misc/avatar-sprites/female/head13.png create mode 100755 misc/avatar-sprites/female/head14.png create mode 100755 misc/avatar-sprites/female/head15.png create mode 100755 misc/avatar-sprites/female/head16.png create mode 100755 misc/avatar-sprites/female/head17.png create mode 100755 misc/avatar-sprites/female/head18.png create mode 100755 misc/avatar-sprites/female/head19.png create mode 100755 misc/avatar-sprites/female/head2.png create mode 100755 misc/avatar-sprites/female/head20.png create mode 100755 misc/avatar-sprites/female/head21.png create mode 100755 misc/avatar-sprites/female/head22.png create mode 100755 misc/avatar-sprites/female/head23.png create mode 100755 misc/avatar-sprites/female/head24.png create mode 100755 misc/avatar-sprites/female/head25.png create mode 100755 misc/avatar-sprites/female/head26.png create mode 100755 misc/avatar-sprites/female/head27.png create mode 100755 misc/avatar-sprites/female/head28.png create mode 100755 misc/avatar-sprites/female/head29.png create mode 100755 misc/avatar-sprites/female/head3.png create mode 100755 misc/avatar-sprites/female/head30.png create mode 100755 misc/avatar-sprites/female/head31.png create mode 100755 misc/avatar-sprites/female/head32.png create mode 100755 misc/avatar-sprites/female/head33.png create mode 100755 misc/avatar-sprites/female/head4.png create mode 100755 misc/avatar-sprites/female/head5.png create mode 100755 misc/avatar-sprites/female/head6.png create mode 100755 misc/avatar-sprites/female/head7.png create mode 100755 misc/avatar-sprites/female/head8.png create mode 100755 misc/avatar-sprites/female/head9.png create mode 100755 misc/avatar-sprites/female/mouth1.png create mode 100755 misc/avatar-sprites/female/mouth10.png create mode 100755 misc/avatar-sprites/female/mouth11.png create mode 100755 misc/avatar-sprites/female/mouth12.png create mode 100755 misc/avatar-sprites/female/mouth13.png create mode 100755 misc/avatar-sprites/female/mouth14.png create mode 100755 misc/avatar-sprites/female/mouth15.png create mode 100755 misc/avatar-sprites/female/mouth16.png create mode 100755 misc/avatar-sprites/female/mouth17.png create mode 100755 misc/avatar-sprites/female/mouth2.png create mode 100755 misc/avatar-sprites/female/mouth3.png create mode 100755 misc/avatar-sprites/female/mouth4.png create mode 100755 misc/avatar-sprites/female/mouth5.png create mode 100755 misc/avatar-sprites/female/mouth6.png create mode 100755 misc/avatar-sprites/female/mouth7.png create mode 100755 misc/avatar-sprites/female/mouth8.png create mode 100755 misc/avatar-sprites/female/mouth9.png create mode 100755 misc/avatar-sprites/male/background1.png create mode 100755 misc/avatar-sprites/male/background2.png create mode 100755 misc/avatar-sprites/male/background3.png create mode 100755 misc/avatar-sprites/male/background4.png create mode 100755 misc/avatar-sprites/male/background5.png create mode 100755 misc/avatar-sprites/male/clothes1.png create mode 100755 misc/avatar-sprites/male/clothes10.png create mode 100755 misc/avatar-sprites/male/clothes11.png create mode 100755 misc/avatar-sprites/male/clothes12.png create mode 100755 misc/avatar-sprites/male/clothes13.png create mode 100755 misc/avatar-sprites/male/clothes14.png create mode 100755 misc/avatar-sprites/male/clothes15.png create mode 100755 misc/avatar-sprites/male/clothes16.png create mode 100755 misc/avatar-sprites/male/clothes17.png create mode 100755 misc/avatar-sprites/male/clothes18.png create mode 100755 misc/avatar-sprites/male/clothes19.png create mode 100755 misc/avatar-sprites/male/clothes2.png create mode 100755 misc/avatar-sprites/male/clothes20.png create mode 100755 misc/avatar-sprites/male/clothes21.png create mode 100755 misc/avatar-sprites/male/clothes22.png create mode 100755 misc/avatar-sprites/male/clothes23.png create mode 100755 misc/avatar-sprites/male/clothes24.png create mode 100755 misc/avatar-sprites/male/clothes25.png create mode 100755 misc/avatar-sprites/male/clothes26.png create mode 100755 misc/avatar-sprites/male/clothes27.png create mode 100755 misc/avatar-sprites/male/clothes28.png create mode 100755 misc/avatar-sprites/male/clothes29.png create mode 100755 misc/avatar-sprites/male/clothes3.png create mode 100755 misc/avatar-sprites/male/clothes30.png create mode 100755 misc/avatar-sprites/male/clothes31.png create mode 100755 misc/avatar-sprites/male/clothes32.png create mode 100755 misc/avatar-sprites/male/clothes33.png create mode 100755 misc/avatar-sprites/male/clothes34.png create mode 100755 misc/avatar-sprites/male/clothes35.png create mode 100755 misc/avatar-sprites/male/clothes36.png create mode 100755 misc/avatar-sprites/male/clothes37.png create mode 100755 misc/avatar-sprites/male/clothes38.png create mode 100755 misc/avatar-sprites/male/clothes39.png create mode 100755 misc/avatar-sprites/male/clothes4.png create mode 100755 misc/avatar-sprites/male/clothes40.png create mode 100755 misc/avatar-sprites/male/clothes41.png create mode 100755 misc/avatar-sprites/male/clothes42.png create mode 100755 misc/avatar-sprites/male/clothes43.png create mode 100755 misc/avatar-sprites/male/clothes44.png create mode 100755 misc/avatar-sprites/male/clothes45.png create mode 100755 misc/avatar-sprites/male/clothes46.png create mode 100755 misc/avatar-sprites/male/clothes47.png create mode 100755 misc/avatar-sprites/male/clothes48.png create mode 100755 misc/avatar-sprites/male/clothes49.png create mode 100755 misc/avatar-sprites/male/clothes5.png create mode 100755 misc/avatar-sprites/male/clothes50.png create mode 100755 misc/avatar-sprites/male/clothes51.png create mode 100755 misc/avatar-sprites/male/clothes52.png create mode 100755 misc/avatar-sprites/male/clothes53.png create mode 100755 misc/avatar-sprites/male/clothes54.png create mode 100755 misc/avatar-sprites/male/clothes55.png create mode 100755 misc/avatar-sprites/male/clothes56.png create mode 100755 misc/avatar-sprites/male/clothes57.png create mode 100755 misc/avatar-sprites/male/clothes58.png create mode 100755 misc/avatar-sprites/male/clothes59.png create mode 100755 misc/avatar-sprites/male/clothes6.png create mode 100755 misc/avatar-sprites/male/clothes60.png create mode 100755 misc/avatar-sprites/male/clothes61.png create mode 100755 misc/avatar-sprites/male/clothes62.png create mode 100755 misc/avatar-sprites/male/clothes63.png create mode 100755 misc/avatar-sprites/male/clothes64.png create mode 100755 misc/avatar-sprites/male/clothes65.png create mode 100755 misc/avatar-sprites/male/clothes7.png create mode 100755 misc/avatar-sprites/male/clothes8.png create mode 100755 misc/avatar-sprites/male/clothes9.png create mode 100755 misc/avatar-sprites/male/eye1.png create mode 100755 misc/avatar-sprites/male/eye10.png create mode 100755 misc/avatar-sprites/male/eye11.png create mode 100755 misc/avatar-sprites/male/eye12.png create mode 100755 misc/avatar-sprites/male/eye13.png create mode 100755 misc/avatar-sprites/male/eye14.png create mode 100755 misc/avatar-sprites/male/eye15.png create mode 100755 misc/avatar-sprites/male/eye16.png create mode 100755 misc/avatar-sprites/male/eye17.png create mode 100755 misc/avatar-sprites/male/eye18.png create mode 100755 misc/avatar-sprites/male/eye19.png create mode 100755 misc/avatar-sprites/male/eye2.png create mode 100755 misc/avatar-sprites/male/eye20.png create mode 100755 misc/avatar-sprites/male/eye21.png create mode 100755 misc/avatar-sprites/male/eye22.png create mode 100755 misc/avatar-sprites/male/eye23.png create mode 100755 misc/avatar-sprites/male/eye24.png create mode 100755 misc/avatar-sprites/male/eye25.png create mode 100755 misc/avatar-sprites/male/eye26.png create mode 100755 misc/avatar-sprites/male/eye27.png create mode 100755 misc/avatar-sprites/male/eye28.png create mode 100755 misc/avatar-sprites/male/eye29.png create mode 100755 misc/avatar-sprites/male/eye3.png create mode 100755 misc/avatar-sprites/male/eye30.png create mode 100755 misc/avatar-sprites/male/eye31.png create mode 100755 misc/avatar-sprites/male/eye32.png create mode 100755 misc/avatar-sprites/male/eye4.png create mode 100755 misc/avatar-sprites/male/eye5.png create mode 100755 misc/avatar-sprites/male/eye6.png create mode 100755 misc/avatar-sprites/male/eye7.png create mode 100755 misc/avatar-sprites/male/eye8.png create mode 100755 misc/avatar-sprites/male/eye9.png create mode 100755 misc/avatar-sprites/male/face1.png create mode 100755 misc/avatar-sprites/male/face2.png create mode 100755 misc/avatar-sprites/male/face3.png create mode 100755 misc/avatar-sprites/male/face4.png create mode 100755 misc/avatar-sprites/male/hair1.png create mode 100755 misc/avatar-sprites/male/hair10.png create mode 100755 misc/avatar-sprites/male/hair11.png create mode 100755 misc/avatar-sprites/male/hair12.png create mode 100755 misc/avatar-sprites/male/hair13.png create mode 100755 misc/avatar-sprites/male/hair14.png create mode 100755 misc/avatar-sprites/male/hair15.png create mode 100755 misc/avatar-sprites/male/hair16.png create mode 100755 misc/avatar-sprites/male/hair17.png create mode 100755 misc/avatar-sprites/male/hair18.png create mode 100755 misc/avatar-sprites/male/hair19.png create mode 100755 misc/avatar-sprites/male/hair2.png create mode 100755 misc/avatar-sprites/male/hair20.png create mode 100755 misc/avatar-sprites/male/hair21.png create mode 100755 misc/avatar-sprites/male/hair22.png create mode 100755 misc/avatar-sprites/male/hair23.png create mode 100755 misc/avatar-sprites/male/hair24.png create mode 100755 misc/avatar-sprites/male/hair25.png create mode 100755 misc/avatar-sprites/male/hair26.png create mode 100755 misc/avatar-sprites/male/hair27.png create mode 100755 misc/avatar-sprites/male/hair28.png create mode 100755 misc/avatar-sprites/male/hair29.png create mode 100755 misc/avatar-sprites/male/hair3.png create mode 100755 misc/avatar-sprites/male/hair30.png create mode 100755 misc/avatar-sprites/male/hair31.png create mode 100755 misc/avatar-sprites/male/hair32.png create mode 100755 misc/avatar-sprites/male/hair33.png create mode 100755 misc/avatar-sprites/male/hair34.png create mode 100755 misc/avatar-sprites/male/hair35.png create mode 100755 misc/avatar-sprites/male/hair36.png create mode 100755 misc/avatar-sprites/male/hair4.png create mode 100755 misc/avatar-sprites/male/hair5.png create mode 100755 misc/avatar-sprites/male/hair6.png create mode 100755 misc/avatar-sprites/male/hair7.png create mode 100755 misc/avatar-sprites/male/hair8.png create mode 100755 misc/avatar-sprites/male/hair9.png create mode 100755 misc/avatar-sprites/male/mouth1.png create mode 100755 misc/avatar-sprites/male/mouth10.png create mode 100755 misc/avatar-sprites/male/mouth11.png create mode 100755 misc/avatar-sprites/male/mouth12.png create mode 100755 misc/avatar-sprites/male/mouth13.png create mode 100755 misc/avatar-sprites/male/mouth14.png create mode 100755 misc/avatar-sprites/male/mouth15.png create mode 100755 misc/avatar-sprites/male/mouth16.png create mode 100755 misc/avatar-sprites/male/mouth17.png create mode 100755 misc/avatar-sprites/male/mouth18.png create mode 100755 misc/avatar-sprites/male/mouth19.png create mode 100755 misc/avatar-sprites/male/mouth2.png create mode 100755 misc/avatar-sprites/male/mouth20.png create mode 100755 misc/avatar-sprites/male/mouth21.png create mode 100755 misc/avatar-sprites/male/mouth22.png create mode 100755 misc/avatar-sprites/male/mouth23.png create mode 100755 misc/avatar-sprites/male/mouth24.png create mode 100755 misc/avatar-sprites/male/mouth25.png create mode 100755 misc/avatar-sprites/male/mouth26.png create mode 100755 misc/avatar-sprites/male/mouth3.png create mode 100755 misc/avatar-sprites/male/mouth4.png create mode 100755 misc/avatar-sprites/male/mouth5.png create mode 100755 misc/avatar-sprites/male/mouth6.png create mode 100755 misc/avatar-sprites/male/mouth7.png create mode 100755 misc/avatar-sprites/male/mouth8.png create mode 100755 misc/avatar-sprites/male/mouth9.png diff --git a/misc/avatar-sprites/female/background1.png b/misc/avatar-sprites/female/background1.png new file mode 100755 index 0000000000000000000000000000000000000000..4d1921bfda374bb9deaa0c44620723f53ed4722a GIT binary patch literal 12338 zcmc(Fc|278`~ER@vSumkRLUA{2r*MxCWMrw7($XIVq)xDM1+Z?NR}+gF2$HoWJ`z$ z*>@rPzJA|lc%IMme7~Q6f3IJ!S2btOIq#V{_w~N+>%Q*$k&c!c69W$e1VK!fFv_|R zL_vW6($Ro-e9L9Nf&VCQx@s4ooJPLi;DE~N{N?iylpn#kX+{l>>F;5#;~Y4UR{+a5LBiEZ+s=u;e_O!n0=Xhy* zEbiO_zeS^*%VtF2TJ`OPg@&Dd8@5qf=Qhs?E;B}zvU;1`FuY@8VqDlEzQEYv;L;$I z8)vuE_+s?akJAlZstSc*$#bV23W%c}-|QB0ntKyo*oHSXc1VY+ja)57ygmhLyFs`4>S zN4Mi;5!+7o_Rc{}0thzf5|b(v$r22uY#&4ry3JXAZ?(}u6v*Rk^b9E`(TQj$8-D7@ zuUtv!f(!{=!?pWd;AE<(q^=?HK9^|LEhPdE<^$ISCZVe=Ni>nXJ`j~}p;+Ek<)%yb zIr&7B+jD32X48UAa!-jSkI78xC~NC)QP4rwr262)@+ylh@i$u0Z~O{>4XQGT$6WaS zO!LFsPlw+}1EYC;Qt~inPbz-(f1~Sioiu3LpX!gu@OfxAWXbCgdfIcU!kk;bi}Mge zz+rc{%Kh4@f~9*)^J3J0ttRU#0p(N5#A~t+I@{c zLv)bn9Ue6l>$+dz#5D|C>ACp1Vl6yJ^Q7$=j%Lwh?ebuOKx=3A`yHlP*jH~fSoxRB zM@QqznLIwWU&y@Syy|{j|JcUm<*qxq8KM2XCx1P;L+O6z#xM7&rsLXu zr+>{An`-!dw-m07VV)vRU0apsXZT_^KeBEzbn#L3n9Rc~9~s9;ZH96@N{SW^WzB{z zjZ6*FSi#}g@(}7=o}p0lX!B>{+lqo^-jWMn#+pqtQnTHklQdV}7yU>{PV)W+X1(%MbS)9aF>74R%N8NSmY?Zk9cvG9k;}Ts{ud7Bz zhf+D?u=`A7o-G^xnV)}EZ8klV+Bf0p;?CWO&&(g>^Wdq^aXW;HwGDSum`gJ34>>-+ zupWVz4!NGQx}y7~*|av2biI9hYutf~z!hV4*FD7eR@4Ib<>h+mdz66k#>6dm?yV`D8uY#;`^59nCqn zMLwv`kIHwLk{QYf;)m*v7eW}Dd=_*;CN+dW{}S2HfzhIWjdpr*fCFJ1ua7i}kx^VNg3n^&Tce{wEFL zyx*|?2@%42+i3=&ohcn8aV->a-Y*d?BX_@6Qo_Y7T0mwPX*T`xpvwJ_@ocSUftAkt+1bGo&sG0B0nERB0K}dGHSo29e2T{}U!7&+* z=7qqUfF)2DL&iCpjU0xgmumP|I`vp^OEYapgPAu_&5c)%^QZFhEl03@>|<(x>Y@%R--0slu=C?o(m2xI1IhqnJfWmyYJy*Wy34l@r*5;`gDfxRb|J z7t>ri)@E^X{{D!t`W&_X^;;vtG93x-gK(1&*%77WpY_fFAH4XK9p|f{xlmRp2lI1#tap;Jw18OkE&8h#)MIB_j<`} z9QO1gUe+vcTbo*xG@jA(KBNEALYvj`Tj(Pezb|rlPDYOXeEBL$9GM*NjOVoTTRSYg z7Bf5Dph&k)NJ#J=gi)M@F!o8*Xk8WXreDzZafkx>~Pqe`M_Nw_)lFldtk01gR&o~h?Y4>0!oFhRRs7%T+yaY;OK zs^aS(36LSS7A&~+?PZUW^328UZyQNj;$2UgVS}7_X~aoqyw}LzzTV@Y#=yv@X6g%3$x@;6se@(T$;hakq6=cL|DIQEtj$ z1qlKM`gMFfExc7y+vCY!8}RegVES%WHO78(oyPfRJ_AG;N`Bd*d9 z@EyDZH9eJ^u7!1N@zTsce6M^mNOb9_a{RQi%(rvySBShvfDh;S(MdWPNfKw7{myW@ z{>HIQxj$W2+eSkt#_*9+E4Uw|d!+_|n;pXy!z`_uTpFZnKE|)=Na$$Z`@*%RljXE* zh&rJ7li$&;p=LZG;TN%FXr!vD+A_CM>P&fP;?C$*0R>j?_3ldJOlGE68u_Q3I!0z+ z)9aR8E*Qp{ei3rX@!a9?8_=hciVNm)y{R&Y7GJK5y0BEjr&66B($EmJb@dA`7J`8iVAJ1d@aJ zUUE<)%(T!l2*q4N`w9KHo|5N8N#M};(H~l&osc1PjK9Ou_yjpXk#Xf9)`jZUNkC=X z?H{C@$F4(2C`BbK0G2b$Dq0{nP%lY7D6f=-D3FlQvNkHGDTwp{Nyehv=7F04`D$FG zyvQy$099|Rx(7xFI;-PyGYkEwqzO9+25?(;W3Ud;YBxj1*KW>WM$U~>`nHN*h7f3| zmWK8L#;lF{*#=9dBXbJsdkRgY5mW%{oT-Xm!;2^2q>-B5b_L#YbPTt8oH-yWkcZU7 zIrp}M+qk`?4bnM7eed|Z-@O;+ZAU}l%U}q@vZ&ZG4*Z%un7_zzRs&m%EUI>Qlv`d5 z9p225n+tCi&37&Zq>R#(xz-PwW~J;{D(v#)ozHJvf=c|qm^lO{D6O18?VnJ-d&k+o z+cKf$Ngke`fui;&b+B#k*9dbzbN|ey5>ib`2}yo%J~pCxassm&hkX}TZxSlCs@3ti z`1^OWpbG6ikLNz@UeTP3*k#MYKbz`XDVJRoHqUxE`tYvJDKsDHw(JYcCEX^ie0vwx zb~w`8ZA`?rbk zc1omVmtfiA2y@f7>rVMR7cGZ>9Qz5k(3P3rO#BpxB8QO7|~9%-^DmV=yap~5p{PN zRsHPpQa=ba0Ns+H3sj5XY>%}xh+&G*^kpSVAWi2 zI2nMn7u6F32XSU1$-?+s`HbSS(EF$dSi`mB@1~=@O}C=`lNNE1kgN|}1-xg9fU5xO zid2q$sR@(--BnzsE@t_RnO<74fC+WYQ*VlF@j(<+BL z8m4BBZJ>%cTUF{D-nhx|Zt=p8>^-8h9GB+U=};MS`IVQFs6D z#3N>JL-}dxCqw5Up`uR{=G@N!L}j)Mi3MJ-o3w0@;T?QRsty@P2K>@rH<#4)GNWn` z$QhM>e1~9V6EQG#baSwvN-`k9wz+6Eif*0xhv;J2%8By*x+bML*fgc?=}${uthR~Jo_)diZ zjmEZ*J!UnPO+j;zlti}S)a%*TF}Nf4rOwy;9Gcp`{1EH2WH@#7ceG5x+CVznY}m5H zfUUywg%@=Oad`dt>tUSj#k}e5kGI<1E0%_CAI>R0jM~*DcuDh&Ba*pm2UH%?`Q9=; z3%F7MkL+fi{qArdRm3h*xV8^y>T47j-A9S&dD(`w1QI^lFXfbq2qA0zdpS%L zX{oM&L#$!N8~u$|m$GgwCBtt~t(nX&G8o*Gim#VhITNW zm~KURygQ4jJ%2&=fcoy1xZAHYe;q==q<9^FNPw1pBZ^&|`r_{~^~CR^r{N`G%5--p zIfx!mN43*1A5EbCTMWF-ai{(J0K%9>IM+~T?-w*4YjmET)OsbG6rz%QYx-G)Iy0!G#Ci2{ZE>l)L(|z&`T`Ij4T7*o$QaG4d@=8lw77x;%UT&DB4R z9%CKV^>87jI@^===C?`4voyn1$%-! z$V7dA>D$=6IwROT89GQ@^ONruYLzVf^tcB)L2)m!?HIEW%1IZ${ov{K+$Dys05@x> z0AJbOdFSHBKt(}SV^G3my+@q(YuUU?`+$VppOu*7RuA$gL_GVzurBE#yJvRwK$Q=2LAx8x#+ia@KKk7HN#V8HIYy8Cf0S}b!bdu`vIa{Et6VNZ?A zW~?rQ|KGR&Ro|TV)65ANlV7>k#RS*hlfD;Ny`9dx);7idN5eg-*tH*kM3t|a>sNQG z%``9Dh`OpRLb#iVhHXq^mvf$8g~i>*#y9diQfFT)jV9Fa8#0p)dfThS)jC|zE1n|V zv2ZikioUFhA_#N$`(7$)a;JkF8;sVjNZhO9T)UFx^riF>%aSS{-ox^x2aey3Xlj&| zQ~-5yc%qNBTSS#)kYL8cxH%;MvdSuvUuv|=wONwHTgCxoo!9F6A>Ct=KZK6y%pc+2dUCw!KD&uijUC#g0lEhRD1!aGAL~>QtH@e-gg`nR@JOAM zy!ps@4zBOrVrT@so9rU-z!mw_Cq~h?r9fr|C?Hvhm-lToaIN7Bu2HkB*l_t&UUdft z&>mv8-PL(E)5K5sSd-b&@0i2lEKp85ZBXG#!sh4)5G{65nOVy2P+Gl|{1 zwaFkXk#BkA25QlcyJBNUk)J+@JJ`48L|>;1Rq&DN%bsr(i;qaws})xB$6wLtio!95 z)hp4#zTg>yXDc_RY*vW}Q8)bhEN%2>sA@~CUWN63oyeWa7p#al7V?AcdF8(6AB&b| z8svnlPn>G#tm`(AxL3`!q>QgpTx&M(=8Th)n&FSf8dD%UxtY;)ja2Kxr)fZae~1aa zPo0W-{?;*t^U-5d0+is1k%M(ELt;g_TJYZU>I0y(`YT-bUa8&_sOY2GrNa+%PRuDb z`^d3@FnY5GDi~hObY#2lorVDM@xTj$3v@Zp8TQ~wC4vO3llmY7g8U=ET@!rndkDcDL`&>tQ@6J$|KNb(U(x(gx zaAgBHt%{3#sEs{K7A|2Fn5RU0KYK_I>W&wZ{)LnR^UYQGE-fVrjFulnxTSrc1GD45 zzzVj?@0wx?ApfHS0DEXJDnT?rLPef=-_qH*couXSj#I(Uw_oP&SayR-CW+#}l!L73Bad7Qj=x{`#QZkTmDVv$Wv;mZLWz4664exkiRL6l10r zMgbwTpG{ zYt`h>XZv$Q6nozZfu=b}1G_yiDQ1cVM^#J&F+3mjAfpZZqEk0HA+$i>f|XHk^`woJ zII6HPHL3LsTDs*{Ns@8?I6Of3$Sg^d zl~`CaTnMO=@C^f?_vgXDD{pg+Q6~kNx$0^lMCc56coL zG+~%SRMfivFF%$bfEfNV;<(@gWFvw&=NcmiJ-<6kNH8T+)3hbW1t`L zUt+M&EbtqCO8+Ruo{4kb@7h1MP}VdF+ru)j20T>+eEYx8UNk(kz)#Y<1X1k<|KGsK z+^{!Tx#(KeqVK*z2)FzYqOWNSvDvozBx37_0uOUG3G(?{a#xJ0$H|pR$or zj2E{TVTOjoI8C6TZ{}+G?T9T_?=y2RRTHOVbnK(YCi!p{uFprm+_JaMA&zEmif|PV zhHQ%H%MJE^sYz$kfUQKe!b0qgp1EmQx2{yQ69Y#;$sGch+}eX`nVhdHTTQnnT}6u) zoits9X&Uf6=Z;Y#sjQ&+acXVu|D#zVCfPKw`Er|&wIm?IA|ox5YBQUCwx`?zFpKXs zsbz{_i}zqd1}n_kbNWC+F~5ODcokTL^Ugr2L-sddRgt3S6~Kcj13lLOUsSg5%r*&r zT!hOZe^T=3R;NFa^fq@RQ+v_Kw@BT02!Ef^2SV(I@+Duc{N^4e$hZ09OkPr65)gyE zwfI7vBI~3>il%=P-G9_0f$$)}8Gnn(n)4ez{?*|NfI9zWg8*wUe$e&a(Ym+Z?wRX{ z6g~dE#;$}smBP9CyR!R8oBziz(_&LSb{ac>SU5w?*@K z=W>Iw=TTB&mhB%8tX!0BG-~jvLKql75v&p;Z#%C1R<@XS&&T0SQaRIS&z){B22RcT zP5XQ~epbhh7qd7^H*MTqI4uSx#LelJJ&qYFa4`SwnfckGV5Xu8%VZx#!TO>5*#!q! zs4}kY%1I)B{wGd@VYU3PoEyVqPG5A@j7=6!f}(RDVGRnd34bUEMe;s{0(?z*W_y7D zMI0OD@a`Ji7qq2UXAm!cmwD#X9MOJ&0lX8+!7VDGR>ls3 zpN)`#5U^)UjSm@r)nhn~ey4|+{q7UAQRh|FhlfMP>v{|!D&KvIwfHsAgeOPg zdJ*;WyB~XgGL`Hb*ZxH|lBvMX)Cyl28ZMrjoft+Qg5BAwpzCKb&rv$TAoo5MJNU2I zQp?KSV^?&x0B!otY9oVd_}pt62DP3!M$#kRxu6e&eep%_Se-&XoCXm*Jr{_fU^DYAST$ zh$@a&awWtXy z+=_OOX6~)6PPb5g7L=f*q%8MfkOFYf7A}2!$~)&|ysWn`HrHadIBRB0Wjf3(rN965 zir>3G2-X!GuI%bsi{bBu9=%xG95->4{PQVtp_@u}UmSsVCN2|{(A@k&4vO>|fP`4s z@klD9v+O>Iz^4OYbi=^R2Bl6WXgy&SOb%{~2NG!_GvDh{UgG)zrZqlrdXqlbR$Z@62{tLJ%wVhq>n=Pv>~8aJ zKY&h)cMOcs)C@@ghLkogQ($cHiK#4>49+|dpOe(z@LGHXhoW<^UZ!{W)g2I913s3t za&k;-Uvr0$i%n9VjNB&mE;aE9orzbqf}OXt=)Zf|3hzO`I}Wt-CL(T(BTfP17}XJ2 zC7Gqa@&$I%T2zn;&$J-~3>AVicZp;4C2!%Mg^2a2T~>s1P%_2S(+8A(qm{DD$2@P( z>%rC+-x&HV7!`p@6ZDh)YWV5WIlm_?_Bo@9bWc3>X5LLsKbP*`-Qui>nJ=8b)fvuJ?sg&uZgxSg_%)@SFsu-Yd`+#?&q(oTPFZn6YRpN(_ z_-?Tl%L#0j_&(#GD*}^v3xs&s$QjrabC@Yx$Dw4$6!_awG~X+`L4$2<^ak$@13U8M z&KIS%v-|frih1T0wr6g=@kO=eMrHeFsCIyElUae?TkG3#V8wACcah)p2`x8P^v?2)&3c}4Z}&j?E*L1+lS{POpCZdfi9Y*yW3d?A9gZ9Rf_4;#T{~+ z0VY34x9uDKKSR87+mTy;+C)Mt8OQF`(>5b7Qv8DGkwu>QA;Y-Kl}UDv!({2b*16viYk9Kmgt@+y0bzj8he!RDzq(WH%Y` zHr9}($Nyw-m#feI<9D#jzreIjeBOfz%{zG)2Zpvf*G6v@n&0oB9T>Z?Nb@t)v7>4h zr?}2F$;=l6zFuEQj%|@e(X;w8CR23_;uL8%wYO7?w4(X)Ha?c|UgHc$*~=!omh$c; zlNtjeZ%ur4Zgl}Eh`8G>`>QhmPc(=;6HAi^_S%6`BJQ?xjW{Ey+fCx*9K2T+b4DA| z&$%Es`IwMfw&+GPA3Bu#A+a=tDNS0%pQuNEu1D-goL}%_d_pdHYD9J3n!a1zDA2v% z6yMs{brb6;o335T*zOT67{+P!seR9gsW*A!zEhqcLZfE)gr!QXN^lpvtoJu|XQ zi(YSo)c5+-Lnoj*MNKHulnvmtEm)zSv;`p8av>=ZU7$`y9jWa`0Bke3>)#;PU}lNc zQxMH639N9*_PfQM7UiSOAbwrbfGwT}lXDNlrdVD9-1n4}j_F<(I8$e01xk!S&Q+G_ zSq@BEphw|&Vz0xr_2X)D%W~ivXdy^7Hc00-HcIcXqPop?&Yo`nIM+HodOWI>9}ERp zU{%%_L+cyVG{j{{JhGc6MxD0rv>Oz=PzHoYH-`$O_8CRTdwnD=f>|JU`}x=SfhoBh zcy!IcTtZ>2dhNMw&h`j)@r1$dn5FEi-X4*?J#*%CQOOWD1#3(xE5mSfo~fFYY0&SW zZ6)tTKi6R9AEDzoAGQ%C={HhTXuh;M8nlz}42cT;a|L*27ABgWo(FIZdbtF_m60I0 zdludyEciDkm&eA_B40dQn$EleVZ2qs-~q{tIsl6TB9PD}3l5AD7(UBHh0st(UY!sj zTuY;)j=UncUL->BY<$UsQ6vER1MM?d%-?8JedE_kJ7(uKcxe-EW$cMbB0YGCiNk_9 z&2?vckp7)y;R(>Yh(sj~m~^d^;^Em#eWPxeU47UyQiYdff$Pr&OHGKt)cBYTN!8D= z2huk9m=5N*Hj^iLVMQn%_=Cx$jOTe4HNGV0X@ewM?Lu9qV?u)|rF77BR`Lj}Fc!9yhEUy`zBD*<@ObFpAFt4tV8dIVW0fcx_Sbz z-pSLTAeSG5qW)u5-)*@T@}Cs{LLUr-W^0==r5-V}23=)bO5Q%vtg+-HN%gNH>;t3% zOYI5_k`<@7$CFcSgZa~*g-Kezq z=6qA%sGujRHXF{Io8 zt*nCgtZkr>7?~dhP<#6GQpp=X*b{jw;Jt^xG+(5)31lH=Ts{1IyR^u$a3aQ-hc~1NGv|B3W<3(&JY;$L^pmz1ENoS8}2QEe3Ss~834hZQMRRfCy^3ve?#1n8I-K-n&b41Lc2xF;1ZFx1~m zItwaS>1?-@bry2_fML3;d|WrUKGzsdGk%-q&z2sxW78fnSGb`3`g?Z^IH=p zcqi_;F`{clBP#C-u7SEDOmMLc`t!@UgV`9ezpv8^|0|1tLZqbA^?xcQN2dwc2A^!3nE zPH*NQ6KfwqK1=hWh0%f#<0%eZ)YQ!8$REEjug%eMbA4GfR3 zkH(Vb7e*To8rfZWyq+FR9%xJ#7zOrqaKrpuxs}xp=*RP9r~5xl%0ocl&m|Qt<(vyQ G{r?BEgQKYc literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/background2.png b/misc/avatar-sprites/female/background2.png new file mode 100755 index 0000000000000000000000000000000000000000..defbd1877ec1788cc3ef8f775abc575f8feb5ba4 GIT binary patch literal 11887 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/background3.png b/misc/avatar-sprites/female/background3.png new file mode 100755 index 0000000000000000000000000000000000000000..f4e41e89bb50639f6a5111293a45004d83f8c6d0 GIT binary patch literal 12653 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/background4.png b/misc/avatar-sprites/female/background4.png new file mode 100755 index 0000000000000000000000000000000000000000..68396b9206ae754f7c6d2131df99b40a1eb6600d GIT binary patch literal 13302 zcmdVBcRZEx|37>k$Cf>dbciG?LdZBo9Vsh&CWP!{@0k$}C6y$iWQC0EC|g#tx9seh zdB3lt`t<$$?)&@4{nvf>csQNwI@fi*-`DkizMil3yuwtKuac9VAcY`^ToEI$4nYVk z{6|a(_V`tawt)W-PU=_Xpqy5gS+Id`A$vm>g7Tut_Dl%CHi-j9*9n3sKEr>Adi!)U z2)YoVC@-twX0(tv``n;5E@y-6_#|tm%!12+9g=~NE!q8+km#*q@jK@qMao|c48k&T z3ZD->emUt|&;6X#Mb6hf;Z02pDIq7RjkOjBHx6{7_j})^XCzXOlvNe7-(JXA+|^aB zwLEOAQHk19+HUMH#@yb@GY%S}+&}lz=SNTe$NiN{H7~gqyS^kX9((GeZAFPy|E_M4>C*i9>lO0Jr!KZe;{^q`q>7jmH zTWb~Br0cwsg4mW`LUU7LM|rMFk)0vZfXuA__6g@*Q`d(30(aA`-(eDNOmLM^9(b9@ zld?)vK-@$m5I3Cy6iZ1DspHc@>N8g$Vo1>^u-5-a87B)S=5)0`oq4zes@CNZotAqO z(htH$S@Emu1i$kFAC&E@eqCtNdA2U}sx^BTI{Yp>l&X3NVaAa7C}NVP;vpdC&E~_oTx?|n{#pV-m}}QWFucMIzFml501Md zu4obiz9^7d_qQVaASx*Td##Isd5z{71M~cxn+Oz`B81g#ipaeFv56y1mj(L0D~G}~ zvn`K|=Z4A?N5&^3#%bYFL_T-;Xb(BRC{fWn4%WH%_Mbl(4xdi>xKCnjWnD<7xYwuG zFKx?bn^agamSSm?|D?#bScy*4v98~*@?I6c(Iuw-9?IGA!Ljy!J9ga{#d+#;Gznfs zd4~dZ1V=c@KFn^im>vmUE!!wbdEqG?uQ^{+w{kK%!+Cz?-n9<=xCC)}sbB-j|wYcKaUpec;JS>?;#b?U|AD^9Z-s`9oIEvM{iOC zyo(*9whgGOCFOdi^JyF^yXCEWL_WDa=A!{>!tbSN`yAk){^4spsbt19-=GU9QO% zh+eU_Z_DO0Q;?T+s}C9*qK!?reX$c;J&_-leEvD*DdKRj?H)Alx+eIzjW=p?BzUGQ z(&@`|xaDH)uX!ikT>d-O%{|X87j|}BLmQ5!_Qv~7a!#7u)e9vH{>FIN6af}LI)8k> z$Nm(4bd{C}EX^wj%kK6u0xUSk=d@9@&`Cjx)P|T*^tGG1sk!0m;6s?355hy2mY2uY zoEs8XAWuzakRwk$ukd(`zqIQ*utEfCo^FIYC7%8pcZzlRtdKt;N`d=Y_>6giGmPid zAzcXHFZEM2yM)5}V?(_zbh;;L0k=m++jc{xZKA_97uaAMNqa$U!fekr z8f0N1Mxy)|~zw={L<{$y_gZg#Y zIo^|LizbVd4tq5f&)que@&xYeog(7wIGC>1bSO8kcuvsK%M@8rBC?e97?|-F+c(z%)A8DDXeB<>S7_sx_C4eW>-qK4sru=BOWQ9ZQ|D=pra)z- z)OEJ!T-;`#SoWpoon%&rTO%r)k_XI?Ivy>=PQ?P8(IrTIGlc+s%?}TKZFKCA0nli0 z=}BNNG%TbP9AhTg*83QfxVQNjlgUej&UeYd@AxV|)ri@yBcGp}?=R3}r`#@$r%GK!zY&IzVE(;jA2IqjnM5x1O6hvCwvZ=M7(RIn5O<}x& z4xb4NxJsQ^mV0fnZXD-^N^KrKnwb>0Qcl^Lc3_7sl|=VA_@Imc-U)1lMMcqRsS*0q zY0VZc0&Y2j;?9z+_7)gPb56JMN+GY%sursr$jA)5itG<5Q|rd><=0<)A^ zK5U^)b)ixf@1@hpcv9-S^DHdf^lvuZ zEh6h)uvsW$Aii(@=0=Vt-jM#c)=hD%=#B3o>cuiXSFyFUu0eCNWtVNeTR2Vlm?{Ju zY!=Rj5=T1~Y44T~xt}I}uiGU}68C5)qi~`84woB&S|8IY>sXR5^Y=DBk<@Sjn=Ap} z_mS^yBxN7kJY+JK$q1Wu3m@T&0-oog!M=BNhg__6iI+h|4;6(n5_so{lionJkk4oH|Pi;Hf|%WjAfk zsAb2N2s@sK&xu8-?xGBfcVc0qxPJwoNd4eSAhH@jyj!5?0~t75k?0tA3Zw3Q*o{1* zV7`aV{Yij50cP>IfMFU<8j>{5r*Oo0Q+{N7Tmb}#c$Z0eWV~z5!xaRySL76mR;KL6CWUGr>(yUL zB0xbwWx1lykg)Hfz$aP_BhV{0$2!#=(w!K{K3AN5dW_TXYE9GPWSFgG#iLi} zx}<8zQKxCCbbH0IF$)E;AsGY<{bJ#ELDC^RTk0|wj|e(0$3n8y%g%#BzDU$7J8Y>Y zL!qAr_=q{p`IK{WABJD#MFpL+^%<6+kv2a`a#dx4Jm1a3-ty4Ln5nAVm}X&iKUvCC ztiWE+{+6t8_qtL4=fN?@p`CNSX7TwXDfxmw_$;f0ud>ZhE}CX-5*2UP0Y5X+uX8Bu zs9EPKI;>3mKfG4Qp#B0P$S*`)bT118$ety4v{UcdNn5WA0H? z0|UuX4rcf0yTcSd6MQMZH&{~`(HG3wADQO!ZE4=ku)2N22}-rx?}pt5V>gUGW4c?V z0m<{zuys^^jW^V3%+*=yItL+8klDWYCvog5LkYLSYPPfzc@T_v3acCik{y@B!JO8V z`DqZwQL!}CVNI9?2Hc38pt#`Gimsy9Z@Z)KdpC*e(_znVa>~^*- zBwx5|A*Kkf?yG(q_jsJ}Ld}MM?QN7uK8Om+FSK?wY4pq@yKny{(S@c0KxlS1)w^1P zMpR&tEZ@z_*fN`BZ+qi%tY!8C`?c1U_HtJ_nvGp9Iq&Z~48|Y29|fe_JRIISuf4^x zWi&AoF;T^vEysIsJiSUAc$3Nn>G<72)BT(CdHn5h&qNIcvuUi1yV{GRgSAq>zFB#+ zxqc95xS+H}pu0Czw`#ncwJ}T|w6$zITqv`*|0p(HMy!N1YQFok0f1`9F6-3Xlf0KX zY7zT~-n3q|2yI-=ANl(EIjr zcEHLs5PJa0vW}$W-X#cSev$%#NoEE>yn$|8$|xQhNAIw;HbaV#dXWztOgM7DOaDsU z9<1Aa6-N-W``3EFOoi`fBSe($|M?GSi(>98%!9~wMTW&ML z$#_ty^);(9nFmO2Bq;K~I|Ln(Zbh zS%|06`9aQQ*3=O@?!S2yCQdVdnxkppPJ@$>4%Ks6)u?G1@h}QZEE+y$z1rWchett} z5Zf<7LMHdZSS15zx7e(CMcxj$c@CI*1KxbY z=fZ5y3Dd+ds{vT^rAKF6I3&GM4K*i*4Jq0KicA=jqV!9jG6?FRS=Z5?4F^Fp zXM4pn7o+_3N?Z-)t2L3fOJv*NDUFWGd%l(C<6M3<{eH-AsgthdtmNcc{arE=66E~)axDn~xme@2j|KY>G4XSolt zAD!&0QJ`Ubf5ujIhSoDqJ00FZOSg1z7T8{w; zfsr9_e(TR)t6;aITeR}Tc0LVI1BZFEID|lX`_V&<*A;NdV&k-&*l%AdLj>ogk8jS= zbzB%R0DBE}qynfYIGj!%RbVJA6y(XHcd$8QuG^0NRDf?OwACEr6oq)Z%cetM%3>`c zBA~)eb>2X(PH~-LF-2+k1d-6pV`eZcgzwk8(esUGunf&Mc>!$Qe+Gh`jAn}xvWT)= z39PLPy`=Uthqy3y&d*F%1Fzx8mqOwOU|!6fYnjah77yA`Kdovi4ckC4LEn~qmnqkL-n{TYL~INW zOF}6I%$405^WF81d{i?{*Aomf@k=j$Yt4L2iNqVuf%QlE;duO7@CHA_mxj7f+GYKO(2VWjx;fO8V$!T?^i1s5Vzz2b#$2KG zyil=(_mv8Muk3f-*#Pn=m{v=)!U_cL&WL+@A2%ZO1=Bm-ZFLujE3tVgiqRohQ#9x!~+_9K+&kZ=Y({?2#G za^&*Zn`wjr-;O^WK*GzLb(7^aVa&hcyMxgF=`mZoG5Z@ks-xuHyY+E~0-=cfi|s#EaPBKe`^i z-zYkN3e=I|fy~0{Q-(c$mFzo8gDu?k98jQweDpQ{3zDn-6jyHg65f9e+j$&Sh(k{7 ztJ5ZGu5xYXmP#xI%d7DfS-`_inF2 zp?8ON#BvDm44+v&vW`P<-RYmz%jld^;^O)q{F)H!bT!~y|HbH_9VG33^IPGSo}$h@l=aB;C*?3%m~NE59P#vpT%$5y1Rq{n>Gb?4!G zk?*A&js|4%{WKz=GMDPDcG*x#v)}7iS8A!-F~7&3@couUWK@#Per`-_bBWz|Cqbe( z(Fhdh^0F@(c=qg7`{3D`-7#}OJ)^X{i&QkRJ-mJOmiyEk3=(H5KQn1DsIyG6NKb>w ze%g=J&uk6_HF`Nf_^6)|2B~AN22#lifBmeOUQHx?x0L#!R!F*85#8xwf#cHV47~#Ll%XFBX-_h=M+0 zA9Z6%JE;zZB5pi-3c`#}KKXxK+phCq%)}$g&$dq* z;M1XqnyV5SGqv4XlKGO>3ftPuj2pX4vTNw=a-q|@rt zM~YyLNGkg~esgZR7ukCv?krg{X=pZSw7H6QK$P!Y;Ku=hY~A6#B}J3Tx9`uUM4UOz zodqsM)G32f937*=LnYqrV16-sI+&B&Ev9BJZnSyCrLS(FY>Ck?mn@U^7s$o#eE)vC zl(zmes1QiJEy0z!T{y+C!xhQrWI-2+7)lORrcT^_o{z?DA#m;j>)(PnN`Y(&ys?Hl zx^nNY>kmmX{Lbuw&982X3#i%%^8@38@L@8KowWJm55SfXRve8>-9RR#8vp_-->6#y zRiHf-Ch(=vgwNLMY~0%Do5PT@T&g6EywkzotHcA5jeZZTM-3qMxd+Nh`inK!=%>wp zm8T@~4G}w|=0wnY`C70U4vj0lU5_&!6^YNhzNe(-T`f())e+B5U&xy~zBPD47)rfL zVP-=iPrq_ySm~{t>G=E5op9MNw%W4&b5{?$A@yg=JnR9$?_vGv-o_Icc@u@o>5ntz zXkJ^mz_-EZ6f8Qx^k`>%CC>1i+qM`akF6U=v7zxW39W!Amq4P-9pi{17RIaSg54Tc zSu~uEp{GPZNiTTBX}&*r?l>+Y6eG&-vadcTX!hd%^3f85lpyZOKTg=qRK?fyRR0B> z2M31)ARC_}e?Lo3*2|s=Q%j1j8b>=|9{$IR2437;zqpw!bpgVIR}iN0tUr!lcU-Wb z*y`Zr{i_5=zX6E;>%9Np47*N(vS%eRRVx6w!A{_#HLmX_QV+e0&m)qfJA} zJHVwMN6UAd2>k*5>OHWux6UMm0?=zyRb5WEt|H{qJf)+oXO;0VwiKyFGNqeFl>wmu z{z`nT%{$#KOW97COXMihg$UD+Pw=o_Pa&!y_A6BGPa?n*<+zE2eOE#$BNQ;hcWr&U zq_l+SFFVThhnLph0^!Raht+WFOW;NKA$ZD4|ErVYo!7rmRop6$`0LsrkedGg|59R% zelMh0>QauvD^OHu+)3dX&yQT|2uv=Qy1q~#P`Y(l>&upC z)RqF{7gpxegyW4Dm}*#_wp!HohnjBd-OTDM6f_{iFBSTBrsrJDrUK|rYR;_AF+G~A zQJW7t_!ENr?7F3oh=iUUmtvkS-S1FVmi+=^x`FuBV1ztwsK^`7?QPjJ@cdAlm#KE$ z_sIY6!Z`P@1sciCnWon>oUX1zR>x40`;bBxBtI^%@#GZO<$X2_iu9?Z7Wb?YPhZ^u ze@M;pL!{t4P#vS4Eki!z6Z2%&;2mdK86AO6)(%FP5_gu$Fd_XOm(L)vox%)|EDPdC zHyo2yrnhnj2O}F>$QBC#`z znf0M8fUdiH-2c<+!y~o~S}0uWeO`*J1N{|zm`C%GUwl}jKvnHeUil9xthv25Z<)-< z{PP$hH9+n_R}qooy>QEtpOx(ErEY+Njk0dmt$t)?g%{jS_-;Y@zNnBM z#K%nDQnuFf3%v9zi9=Jn6fJZLX>zE95{kUk>KFxR|!)mYGvIHmM1^sB4#aoaIe08<~+>-RRDUbf4s zwKBHqzSEEN=_*wr;zcX!*sT=Yh(Ta01P=Q zdp|bZ(t`rKtuT=K&Sv#2yYdt(GU$N)(r5qmi<2B4@ALxO=}_T?%=Hd@Gva82J^Fqd z)9WW7b_aHdqikfS<|c218;@~75(!$!m>7Z4m1w@HBZh5hEWVTGh)PXhICdP0EeV0k zSw*kla#jF=@xl+VhO^iy&Kz&O8k- z*4Rk6FkuzG7rrDKg+Moj&pGu5D^OS5(ogVU7AVVYLI;dm;~Vd@Ac)~+*SsI0pP59I z{s@O7Dv*C2iNjXI-AWxdEY=CNfBzVmUMa34!OhhL@_(wrUJ6G^T-g*ZHXXBZ?Q*Fm z{SPKHzW;$B0@Ol2IGu*8rK-rj6h92Ll#+Zgk6~AR(or`9SFFV_NFG&Ez#YI9gn3_2 zZe1BFTzz&y8l|qI%idq#)#&ts zTw!8wN$1|+E8TU)Q1v8d;hGj0g5rdSW-PGH{fU%RuAxpf_9WtZndEdPA zbeAjvSDq*Th8LH!E%v(-x}G?ZOpWUgxKDoaf`p2U)v2=)se*pOoAo>?qJCYVxL3)d z@THL*AM+w~oiWCMUO?${D1Vee_=p9UQI#~2-`N7rC=7z3vIdt4E z=F|}~$`548Q*&8!iHUM&0Qipx4&TizZSD70_^?hBqSr|!xcX@+YXK}!;84w}B%|iGvZQi0 z6rv4D2&e}pJeF=RT}uy7o5{0N-7#XiJ9fJq`+eZ@uf!dl=JwA9g?8RARBrt7gt!*b zcwX;4gXFKGb*WMnzUJB+Ekm*lZNn$~eScC;d?VuMcqvZx9MmDEvR}uhXD55{rW#9g zhBei_lNJi~vdOm9WV4C66wf+8@-*{T_ZM0EyAOWYH5+y+6Q_Mx|EsKsE3CT{eyFi^ zeyi|}Ua@qm^EbShBKgRBxVpb;^GpG|t!QLYLEF+dq?rx$>mA@fCT6rA5@YRK&VE7= zJsxiZy|aah@D3Y#s?+qO-#U@95*~Jt?q~Et;?80QH=54+BEX?q#fu!omtf;$Z^vWE z(5gY6g1)+^4-uiC!XRvZu@(zP8Vg}`zvAHvADCeVumZXorN@Ak(>(wU*bh#rxvQ@C zzn;*DscCXOcDEfzGNP@GYDnsJp5=1KYOT?PLtEZZ(6s6-Y?tOs$(%9<3ZN`jn4~x^ zenO!3sl5PnnvX#ME0-V`!daKGcasF2QSF?Qe7MEDi1p+$&+-Oksql!(b6)(J-NDfl);DtP zEUXVRto*NOd$D{wXFr?WUMW_`{6I@T%KCQa!2;-Y{%QM%?DUNUPnCEIuarkRO&zo! z)XORgAG)6xp3c6w9Bc|OtyocBzatXZ;JoynH=MZ$BiX|f8WSnFGdNC0OQ`8J%Wiu6 z^)ZFRg@pR;x?N8)xqVOWq-W7UZ8qn*;pmk^JT+wVpB`xGgOdNW|J!onVy)Jkwyw`r zEiT9aJU8@0DWTm}$9C2AcJI-3gd%7zarCF=*xut|=NDx|YwZ^5KNV}JkVz>!+??E<8gRN>+80Ilj>)U04&;1L~Xeh|pWI zNUYZ@2((#ol>1E0<(4Ni+;YxF|Dqk$CX?FWpBb8p{=??vY7 zI=`%7d0Q;$Pp7jfz)i;*oJuB))xMcRsIEo3LZ}K%c+%i7*RbQd6j#-^_S7tlQWA_5Ek)gI_ zM+y!ChIwyTE0lUt4=3ro78!(V?n|eCk*!(1e@p~hZV?KsViYYZZT1=N|EH!#05ROm z`M$blxFKfeC4%72lJj5DJ5n{gzcj|-(NTB?CmiiOsmsFg17*^A{KS#!6bOIHcyM*+ z{6<*={+qldiJ$}gv!*FM%;6b3zG-v?pnp8g z(s0HJ`fH)WkDKla6QDyVu>+^dPB)CNT$0;ZAIi(l<~Z0aYp?V|J%p*cUpq@`QGA~K zCzm8aN4c}ci0OX#hGym6#7=xTZsh_=tEWun_yy+XU|D+OUY*L_tH)DV2Z!4(g=Ek# z+?O-u%ThOlg?XoVg?Y?&aP>Q_fKI zogA3(azRdODHw@3c}Pa zl@LA9UsdzoMyKa6VKi1^A~*8*%rw&xTsC9Oo}b#-%xsPJ?KLZyvPcS!Od)+LF?!-i zDKtMsTix^G_Cnpic~?nD(WV^#x2dW@k-oKUdlv?D9U&I8R~ptTFYRgVaZ_d;v9MVg}IbD5E-0Pm|!y>i4(;)_YzBw&2Vz zMpezsL&0$hZp(6r(ZMP$Ys2}gq?wXwe#k~fue9A|Se&TXE)T^n=RyqyR4Tuv2u8Qk z{pr5r%*$gUCG@4EW`y34X>nEx4lAiWOH*7YU$Kl1h#D#oJ5d0D`;Nl!AmthpXc|_W zQl?@gM1M~CpUcAqm9S}R0C1NxK~AXPx1F9oG>J~A7a%IqfL+Qzax_AMh>cD|_==Y7 zkfNIo_y$p_>m(SF{NoRLft3uWdgjCN%B&AHKiq6nymBK5mR>J-i~-0$F&u0%4<}&c zmLMs)o_DrB;>g-c`ksUK9*EylbGzkZ=Lc!6S&NNcs~qVRZai0Uq)B`zTRw^puC^1`ocR#M#AuYrCYAt4;0M zuxT5Xd9uNm(yziUh_*66$ZFd$Q4|(cUfTpxWG9>y**JfpJYHpXJi|G-?9QlKaPHYt z13xo>+*`jcqkgrj&|0>vdHS!6b8>L4gjbK*G19Q0@QhxW8c@?~^p8(`)OuIYR_BP* zB?AfP;Y5|L(!lE~5ZT``JudGu5O!ZtGGi%k@x~j2h(b_1nvSVI6cLu3ciNR}KI0f4B#RBY_y0 zPUV5&GH0pKcdnjuCX{Q$lwthu=XQS-5&4wl&vOw{Y5pAchmJF&eeOQGN^J@}#+i*? zhA{SVxjcoQes(Q+gNB2tsWNSR>e{;$kkxeqdN$e}{abIghrAxTBji_x>IC1|{|YZ* ztY5}G1MgpYwAqHnho+D^Auaf$fl?F;8}ao``?%Ok?*t8s9cm8F$3@G zzNT(acjvbfqR7;m#Ki|Jgai)6wrHpMJU`wS*_W*L;-V9AR>bmJSrX&?BGp< z5EzVFHL{mm{T(Pc_$(SlhuPs*5QxRpbrc0OWJ-tpVZ%}EtD7Rv=&eh5CaqKUEj06b z_);H8b;XI`R{^e-wg54if;~Vv>Bus8bwT|4V$Hd-0-z%WuO^h5#o*ops7-XhVgrM? zj{}tv(8IBifCwlS|JkhbBDa3t#eLpsbm!fS;(}*z;N*ZxFxXY5uAp)NM;fJ{P5DNd znjR`oE%m`oe1Qw6VB;vE1?g?jqnQM{8W8wtnAL*wVxQl@Jpd1W5$q6=Z)HmO0L8x7 zWYMF;((!BxPFT)gzO?wV-uHCGT;oVim+w$!*xSvVg0`VDAs?S4j(*0??1Hyj?+f0u zVC79Ggx{YuuriY22bS@YuoM~y+)8Sf zn&PcaYp@gF|vP=>%i NMFnN~9JyNo{}+46M?C-l literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/background5.png b/misc/avatar-sprites/female/background5.png new file mode 100755 index 0000000000000000000000000000000000000000..011ab4f67e3c0b08087278a7747a979fa3805789 GIT binary patch literal 14083 zcmbt*bySpl7w$_VNQeV?5SUR>2?Y#FYEaOjyQHM#&??fcA_4~)Km?RfLK^7~9YB;+ zB!+HKx`*ce-a*ef-*>;Y?jP5+7$@GE_qX?cp8f1+g49%Q(b2HcKoCSHkCD}YAQCM6 zM@4Wca9XKw4q zT4#zq)X@=ZkJ9ft{U$0S>H6g}Do2}A&@{q^6w{}anRmzrzI##`2aum0BE*^0S07v6 z&F^W7GIkl*shOUe-rbOzp3Afz-V%_p{NCEL8?tY!cW>E5(eCY*zSLU(sAE>`nS5kS zA~K8(;lSn{Uhg0*eV`#OI-nyWYgYO?k?K`oK;S2nbNRkkr1|=u21d=F;VNm`mAGWB z<@R9Z&)A&!%jdEyy|P<`m2!@pObdFX)jJ%S$ zJZ-KoBr?#xr(E}_U94+&Z@ui}Xj&3}?9$AwGgJY!#~Y-=-Zlq%iMuH=H%yPsE$(T* zRiI!XkfA#$&p`52N1!0zrx2I@J}FjKh!nhuf`S-)QlmuwexDJF;47A+;ggI44^lbc z;bNB}4IfWDcvj3piiR)=+tfnXA`kfCwxAHU{t=VhTG0`uW0E;B^yrRHNQeYg?gHh} z@+l`3((*}3YV}=g;Lmo8`of=GG?*}lQy92R2@W%4pNaU!lVmkGqe%CJ4U@ZiDkZN& zgE}P-V>&5z{t>B+|HL(m&%#4R_I`Hbp(c`rp(1;|`Jp2A`vsxV_EmP{^J5c&G~^VI zNXrE+AZl<{Xd-*|CU=siY`aI-5%@K^AH?|0$f^^a?ypAnbL_!YdZthBRTMKARgxMV zg{HVX`uOEsO!H|&jP#5K2AajNnskbZ-gUpq4+zvSGHz{MbH2>HeEP z??<%?n$Tva&Y!L%Q#1`}ZKtCQMIPPBt#`O8EfUI!aNu+T!6PJH+C@k2+Q|@(kDr=; zyIhBJJZE?=fA|$rRa~;~l7?AWY+{;S$n^K_Z7s{$ocNsgDcbKON=J2z9WV7?yJ5b- z*S@|u=-us`HB(-W^kvN?%=mQU^_DLsv-wKB^j6B6YJA)+)i)hyv%jBJTv{WCFp#*p zSKsG&P|dyJezf{y-(ycD?fSc`>T$Cd?W+UJo7g#r>INRy;Hr>IsyFrXkly+5Rr(lx zj$glV*2T5%>k{%}U0q!c2y5J~#E_|E}}F)mBuuX3}j zZgFY1p%!R&c+s06rfj-6a5rQAiZ6|(ufRc0lhyR%^(}|Q()=;=n?n0u7j|NFTIdMN zp091CrnOcH!{?7OxCWVpG^Y341U@m4&2KmV5th?fkyeGs@AX2wuU>Pc(N3bAjqfQE z?@b9FEm(AUG;U=s5RMmUX*Xh7TeQx8iT76SGHsCMlPwK>f#+Qv&l2w9UHZd-!XdwF zwItS=$+LTRE=C*a(&m5#7Z}PiC;7wH?x1Sw-bm)MhG*9z!rSw_c?J zy?W}Ql7w;d-o_#upUtOGqEqJ9EUH2mzNuoeKK#MnoHu-JicQ`o@fb^Q8bDkW=O8W) zE{KcM1>&Lu&oizHMIc3^lg%% zAg&&V%##`ZT$7#|AmResj&8VX-PBE_0H3IKKW4*>v0Q~BUXBxAhsU4xxGe)7%ov

a@Mp)CM5;a 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes1.png b/misc/avatar-sprites/female/clothes1.png new file mode 100755 index 0000000000000000000000000000000000000000..b22ca900846d35d3441caa9193b5632090db96f9 GIT binary patch literal 3453 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgF}}M_)$< zhK>E)e-c@Ne9i)o$YKTtzQZ8Qcszea3eY4WPZ!6KinzCTeY1ldMH(JTuUM<1#=6*P zb!*)P4VNR=`n&4yuH`Bm36PZoV&t=}95l#6+@_eQfF3x|rx3?H?{Pm})TK7UuRaesC8 z)6)yC%5~U^SL=UEIJ7wVBnwB+@yCk)9_^8l67T0vwAX z@%N1}*A@1zJl_lU;{sq9akBnle`G)5HP?*$%$^noI+oiHlvv5`t=(Hu{wwGG=bPP& z`?G8P`R(^uS^oI)q~Kfe#`@#>Lcd&(E!*!QS*`ai?#;o?r}yr-7PrrayHM>>&JoFz zwWrq3b5L!3`}Xa{i}&7M-FtIG)t7`V*SuR! zM@zqz%;~g{E_Bn9wcoBfAv(cqcJH+ApZxn1>yq2^F8>!YI%<2)Wlpb!@=pJqSA|yq zgYnSB%oW>XRyTx5S>@gC2ZoTx>4kG%MlxMGKj*XBR2CK&2P59E)3QY;csU=>{VgaU zz?f+{#n{%{;n&RKdrKyPG%Qp~s0cxAW0b$4)JS@JaC+!r0jm+9v!CwqZ3%xtSVy_L&j>B7g`{(_=&i_EE+^Hdf7 zp0Ugi@&sy7xg3zcGmLSiNy(jU@{Ejv6Q(&^Uf#^IWWMEdUoBAjNRfJ_dtFOmYFpp! zZ_2=^zf`1=UNx=Zi}CY4o~j@XKF)ieMzJorbfNHe9mr2nd{2GO3r(ndHphG=C@oEb e2SWC}Z{p08V>mAKE9wBdObni`elF{r5}E+Wil4^- literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes10.png b/misc/avatar-sprites/female/clothes10.png new file mode 100755 index 0000000000000000000000000000000000000000..819444e830ae6cfc563dd223c8aad17f2f7b6d47 GIT binary patch literal 3858 zcmeH`i#OD17{`Be!60J{p%`YD+$S7o%P{3fVpzGAOSxp&*4Y)Kkr||BMjKNUQp!=Z z5=t&}tP;bxjjS+xDtEDA8i~QUq-L1t?XIS> zR|Nn7H4mbzKL9{-b_}5?J7I7S^vX6!g1@^9P~ETpQ5L|XosT&K06SY%N>Y%;%JIaL z2>^iX*fGdUa>Y+Fr`*HU`9xCq!n-iCR)DTjJe7CQH|n|@=t4`j98X%juH&XgQS}cw zbMS#n)b(_9o8yZid9x5L(`84&6n%+Ne&ovRI zmA&efru45&3eVcr{gP)5g(FZ{kO4sCj{FnkN{~|^r$A1DoB}xoati)06kr{hp7tkx z$m%1F$Jlg7AUj`BePSkfUxb+e6RL8;@^;VQul0?%tW&xYHN`!>%;xvHO%?-lnxsAg zDjj7Wu^itc&}L;)S28oyo9*y+0~@o_&f;jk&-iF}F3m*$rH#|2HJJzx}5@_l#8kn6^*7Cx}g&f)tFa5nbK-SSa z9`tje;$V{@q$0TXP*xw9RDI?XTIXqrh6~ zHX=;fDiD)1vn{P#7yvu=&ZlRO0P{;4=M)6HYp?7B;l$)2uBB;?C#WPVMtrhwh6nGl z#DZ`ZV7~a3CV=}Z54WSSP~!o#I1(z@{TCB~g7{CYE%qpvqET3=E2H$3OSsnq4pinM za>Uj2AaCq#2B7iZm2X+MXq!zG=wrC7t_JpTevXc&Sq;e1tGPf@&K-9tT?jNWun3rN znCVe9Llrlp3{Ojv8VaTYXw!*Dc!anLU07*L`Buu^4D~A-j*+L~h_khz(5`n#VzqL+ zm~MYB8b|P*`yk-O6e*Qx{>jlS2x&AR3%3IAX85GDAFY*@jittIUlQ_@y1pvvV7526 zk3@ViPh%$_qM~;(ev6_dy?a9<(4{l8*$yZSF&xv~+6Ig6Af%dPT~-!SLSdVvdBj8O zEJ+9JQ>P9D8Vh~Jx1qm(bcE~^+88f+Td-X0!`&8HTShf+BWomUs|CxGPDPw}M=f;> z3u(N9oT(eJE;LM~hyw36ae2x5!gvWmbnnf=N^^p!IE5@NZ`e^a zHj~M&^%kji*bN5w?Yxmrbvz$Ala4DFYlr_nwn;N|x;1&wX2~ts)F8L=JbD(zf{2Hg zhG%ceW|B73k4M3b&tu75-eF25m(UyKpe5+0{cT_|iY)cl0lrX7NU#ISkQ%*3qWQHy zc?i?M_LxE-C1Ylu5Wa*EOL}|<-l#g<{`%tV;lKiz14@v`0Q`&<&XnLE!2Av?BXV4M zMvDuYFZuLJKc$jXbg&&L-BS~JpUxKXCYiua3JSx*J#|fJ)y@}tfDB^`gXWDJ!}v2} z<{!aZK06|t1<`%7o~bhRUA>k;lZ>>CEgmI@1oxOS2VkY-q~0p86m}B6Tnh7Im=(hZ z=Ve;{w*$^fkk>i~nWBmg8`koM&LA7^H;FwSG=Uua_+VS^`;)ZkH6%yJk-_1cD|Q!M zypWxdIK}k0FlQo}0{2k^j04qArgBbZqP2mOBC#smNq_LFgx;?hA#uM N<#E*8wb~^j?H^p9h-d%+ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes11.png b/misc/avatar-sprites/female/clothes11.png new file mode 100755 index 0000000000000000000000000000000000000000..637789a0ff6f23c4fad101b205f038cc3f8c4d2a GIT binary patch literal 7432 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes12.png b/misc/avatar-sprites/female/clothes12.png new file mode 100755 index 0000000000000000000000000000000000000000..67dd06eb462ab7409f09638ccf6215ea93d12043 GIT binary patch literal 7448 zcmeHM_g7O{*Txuyz$jHgq{JaKK@=5Hfe;6zhoU1$3rz;;O-MqEaZo^7Kzb3CDhQ!T z4WJl7KtVtVQWA&IA;eG;AV9t_@A}GG-@o7wcinSOdG=oWo@bwD-y3IXZg`AelAni% z=a{jP{w*G!L%4&B??8f#Y>?lSIDA52*h8K}0N}62 zuOR%|3BOqIiv_<}@QVe%Sn%I0K)C~RItx6H7i**qo-%nO%MxYHJB1x$82Ohf90K59 zz}Cx3N*M4jUs|8k+T1qnt50*MSYnbb6=K|ERpN@0oD;f_&!Xz<&ETivB|b+~`1 zdp%{u#!cyRMaPVSkkev=8M<#sAbFedWGGdOj*jYaWci@K-`ZpEH|%xk>LNFiWt3=5 z^N5%h=i;YU35Lt$KJ&Kg*V`d76Y+3Npa3H_khYK=oRH#Djw;iC_>Kp_xU)DGX?~rC z50l;YT^uXWPP=zbaepoQUT4%L@=50D(oQq?kUgz9%uG$J_ zPR(<4bJP!p!*q=g^_e>MOX9SYmV@A6Ua5#1V{{a#sKI$GhX;#2GOa?+hu}INJj;TOFXLeS&tUwbZoGdu6Zwq5 zANh-cx89(xN&jU^30pkUG6 zz|hM;gJ_r;7;1Dk&(Z|^G48S48JM#cK*Xr#U!ZXC$ES6LXDMQL1>TCiaFq`LJSr!Y`GU4^eRjiM9``o45BZpVp%X$cCRuJ@w(M5U@~&)waTar`=`H& z;r^Dm@o3OS*O#8?Q#ySgqNqEfGV=&~!*hx_&x!#@tE_|)%j6w>y z$5^^zBz!QHt6CGx#?0l3!?cdtj{W|>_jeXyy32IBVaL_-QM%VMvZ3GV1>vlNlBgaU zt`wg5wHA4wv|@RDf}T*fdIiu^!&^)l;UvPWt88=U!@zjxZtO&7l;H7Vt+dy2^}5~b z8zV0tJh@nMKBXu*ItO@*FO5_Lon6RRL#^(=F2-~O_qwqt8t%74n(6(@$^PuRUe@6~ zzYFYBW_uh$1(mT*a;ouUjMKHFwrEJ7vzg~785}2@s4KCQwtwO&sGvccj?HhS`0ZWU z0_}Ct;+Xz+kdXyCugD}=WvBt=D$e4A=e7^RU7S*V8p1LhLFtJ_N zMRB)EG$yL3JM_oi0hllY^i%PAl7o#MI#@XwMQlP~mNokV`&-D7Z)Dk1tSBZE!u;?m|1<-Y>QN%^ zfBoKWbEMo46qIfFl5VBmClp7lGi3}9*lea6ZHkOEs`2c057IZktkOl%VU3=wRPt26C1T;>SDAC9|C{J-dp)2yWAAa z_4|0y+E;!fE~F*%-I`eW0JbQ%y*vW8IVEq|vv1AmTi1QXgMAG1j642;_f1jJgC#Y4>pXC~V{a9g&>;oBmz> zdzXgl^)>-hz^RDF8ut{Sq&INwLqR5jHJoTq!fdD*53y5bSSo&>98yOb<%1PgqYU`G z43!vhWxkQ(UHhYrRr`*ZiH{-p`1Y<4!q0AzXYQ5DVK)A<6SAZ-%4Y4he_LDqj=xDW zQI5FztTCcaYTm$B5JE^K4Wr^8-0^+k=Ghbuj+x>FtbO<1-+!!_)bgOOi(Jv*v(UD- zy~TkQclb^ZxS~V1yG_{iiy`oZOTpuIb{>ryjiIGVIxqV_H_T;J4SqR?_mdnEqnC

@R@Ru{?W^VN)3@;b z<>#f+KRJZ8P1C3=RUsRl0X0q!zVFI))Nj*BzHOXnmhN7iD4FAvBeG1!?7Ca*%}L8D z!*i>bU5>!Pv!11OtxgzU?fx}&!LM`gccCrPwf3aP?*sS8MhDk-;=21jmR|o$rv?!_ z@2%&M*^fZ?vyv#)#sKA^^sbr&BkU7Xu%chY+3bj)%T>n*BkoYddSSQC55otEVOo!C zCwN)9Oz&p+`)K7F^fTrHEtg+q9KJo~)P-^8xUJ;|@zWeHqw#f}QChs}N1EDDD^kpw zZgOeW-SFurit;#Nbk9)P@1V;L0NVye&ppy%!L}m$bir&1a#rCdu|izB4T>-A>B?Ob zP@q|TYdn%kc@Q|#S?ttX*A|b=ZfQB6?U86mi1{`c(!1Em6#%yX>$e%WRVv^o`b-Xb z(j!)!kVFvu)Y%i>UPm864H|$$JpGNp6+vG9D+5{~2M7OAQ?TEw+v zhd_{AcSp6dlImN$AH}S_uAcyXQ~S#GqFta*%$l}WtOgnu%TRtZ-ug=Nrci( nME z=!OQsSUT;%`f30FST}%!(QV#00X;t9f5D4NpVCAjU*PV{U8dPATCDx=P@Feu#Z7YUp{O4o)Juo>obeYgfvuAL!}xUyPh- zz9q9K&upddcYDr8WwG3h*2W49vzzJ#i{Djeb+*jKkokW2UnB*fUeK!_Rec4EKP@w7|4}mBXQG<#St8 zHKj+RmdmVsO>-v3nf@|US5(rTw{xhZ^dZUsVyCsCVf)O?I&(F$`&{?##Ca3bRl@wX zJaVdTR=&8Sz_%4X%dVyk$?g&AO<8%tA54EVyV=>zH@vOy_wx3mDRZ3cv!#~?1iBl4 z3~d{d_gB`E)30nGws#LQ>CBy>6?}{N?sXZ`eyf?IXi~6w7qkB`!A zp?uCmM>>+7VnnDd6YpajWs=WtWTN*ro-ILdPwAGkEiB5kTAO`8zb`aML{Gp;geCG& zi5iHwnfmSu;G+fD0&aRdPwTqc4R%hua-sS^oF*A`rTl2Tca}we@KY+$3Hog1av}S3 zHKpHjTCCSO3E$y+w!3j6T_Ce+z&ml1f^Rz0QwMQ*>f2A8;+-I4RS`b)jXH8LJ5EqH zzc20fh}bMqa(d9oN%HhkW6aRzAS;CI7#5TRoL)0_9+Sr@vfw8Nq{FSRuIB6Y1l?{9 z5^d5M$bF-zy`?_{EeyX&`FK{wY25w36Tvug`%z(#eXurE4Kg4it8)=Kl(xhy(RqEA zM$2no$_r7{{)tla&SF)vL?{qpI*AxAXFDw{+BdUI)?#=Ue_@+|J>@FNu_u)F`5+M7 z-h4tL9!2Hl3?Y6yd+76?mG~_1Vp}+R>oDVJfJ`?D`kRPR6|GVa(6i~;C)<8+dgqa% zkl<~pn#=`PO*6pu;NhOZQ(VdP`tM8%@eCG~84t6mCI{it0UN{z*sxEVf1q%uv{eB^`%qDc~Fm(jnM;*R_^3xJmIIe|#_SsN&cAAPAxwg8R*% zM&o8o1f46oE<&eBii5n!mvwg{fs*I2Vtc-XRcsS)>bJEfQBV<7+#p;!k1MelkKFma z1Egv04do;qoB>~JIu#AFZXwp8p)X)*ylzZ1waIk~rQghQ>q=TDI)oeUvIos?-!cIXX0 zQ$}E((2av))?}I+kX_}$egnb$-qVDeZSU2Yz92~7$PGup1Q!!1axEv<&TibkE0OLc ztr=y#yd`}yy0)5|JXQH;-_4B<^1?BsR?@js*i`d58C34WAN5VmRBn-gM@; z%tQ-3JTqe1>3Ko@!o&DS)af6mOe<^3d^*6yx>EO*t;n35T&h>JZ7JT>NgWUflE3f} zR>*yyVvIYUsx`F0r>{rfj!>C32zNN$(IcNl#&1G*92T3{QR&?85;{8$wYLXW(p@GS(DuF6nRKyBDA*upZV{jP574j#$YDl z&P_l3CTwlhfT?+lYtbj=P2Z8X+>~%Keb?(WcE-cgLeBDqu>Y(1QwAVNjG(I|_O7VT zz_X!t#I-|mIG<6j-pT0<1II0YC{<=WPd+Fzw2qC)oIOw|1YqjLz&}$HfvHe5@o}lD zQaTN2t(D8=?(Tb;ih1-nvR)>i-N3=m>$hg+}P{*E$JDCiMqSYRmnf4(|Rx zGQcfFQed_DdR~HV2QIvS27_>Q#l*ED=7p0NxSnfs0sdzK2x9+p@^A{bX7QQFjeofN zPRzRDhcQ@$o1kb?x56a^B(V1c5OU@&v->^a1^N~omp=*)_k;o}^5I|wT>g2)_bBg_ z%zDSm;h)z6@~D3(PY-)ev{E7mGlL@Y!dWX#bEps8K#opc5||`|NQjG!K5in;IJ*A6 z-6kwI3r3Fkv_%+wI1s8~)%p+66>tinV-2f-z zIjATyj1`yojhvKSXMQ#yyc_f5QU8GWHLTSBcp!tpxv8zY2BoavodL5Nos`J&=!*C} zSQyhg-0f<=c81cI+>RB^Jx6c9&zG<(lNvNQ7YQ`{mz32E6A@)TpLo+8%zIuE8ByRg kXt01T@DKS;;Q$Q(v2L?Xz3;{So5^E*(_Fvm59de!1>~}c4FCWD literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes13.png b/misc/avatar-sprites/female/clothes13.png new file mode 100755 index 0000000000000000000000000000000000000000..4565f55af1e74ed322aa2bfc85bda8a99d9e1f86 GIT binary patch literal 7337 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 NKpL7GlwG+U^?w&Nbk+a> literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes15.png b/misc/avatar-sprites/female/clothes15.png new file mode 100755 index 0000000000000000000000000000000000000000..13391ff1af3868145bc1313011bbb589ea9eb4c7 GIT binary patch literal 7373 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 LzgDGp^Wpyj9DiTU literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes16.png b/misc/avatar-sprites/female/clothes16.png new file mode 100755 index 0000000000000000000000000000000000000000..3bd1732a41d2dabd5cf4798d7b2db3be6946ab2d GIT binary patch literal 7305 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 CKS@FW literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes17.png b/misc/avatar-sprites/female/clothes17.png new file mode 100755 index 0000000000000000000000000000000000000000..a1e91cf89074ba529be544bdd90b548b79ab40f0 GIT binary patch literal 6891 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 udRg;jzVsB?&dEl&DbZh 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 NbRwlt_hj zrLL4OyNJTpiO^xmz4^M3Z}*_Kxj9W@+|~W@{ss4(z0P@^_w)6Bzs~E2*ZcMO;dSBI zQFpZNdR+hj&>m!xF93i!UmU5ezTt@Xbg2)J;p=_~sC;QYqYe;JF5WHxAmr;UQ?=AF zDuEop004uQFAlcHm(kSXcMp;aB{f7g>=JG6ht-*Te@_M+PXwi*)K4M=b3aT-f*7DcSU0_fG&9rc2qLCkpP3o%(AfHlkK6-W6ltaa&uN z$&zlEjq@S%S$pHolfheA!8_`q1JU*0E=c8|hnQqQnbW=o#J}mWT zsmzPgW2PtiN|v~jJy54eLW{B3x7RQ2;OjAO>ihR+%K|Ej8`&dEPI95>g?GDPm5r=b zSYV?JsBhN8@l#m6?#AsGvqo9;PlaYYGct~95{1t)L^o}mofFx|`2=+Sjm4rS^6j-- z$}-pRjn#X?6U5MhJzLo!KjkU798&1iyF51kr)1N~Hn&yP^Bc|CjHsL9W%HH3yNih_ zmPtD-=NX%?i*Y_86^+J}Co#75B|aRJ@0VB1$XSXCRrgV%>3E`$9p3H=BaK=n)IrOX zy7{91g~Br`oSZ7c$Vb!BZBy}Wf$X#UlqYclh+fk~5M+l2-*22e+aP>RESpe{`WJiQ z3UH|w=GIQn68Oo%*P!dr(&_s4P_va+SC2C{RJ{sTHS;~g7kv5!2JIIDCu55cEJQd* zKa*jy355YI$d#4qnK8tbI~zyMM&dtPbJ@DJ@X1dPTCBBrz#9BJZJzPWej9G_R$Btb zx{=^K7<{dI_68S;k>zp#2dT{wcz2q!9d+h9;)H4S`3NOdDRe^@aH9nX1kY-l&GBB2 z8Bgf}aY|!x%$W58|vhQ zg#EZwAN@GG%0auMS!b4?Inj!~o8$}o7A6ZE!WG3dZHEx#o||bVOB>*mZz-}X355+t c3X>QC8-Bt^zeK;1p#aq8arh{y@=#dDKa`b(@&Et; literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes20.png b/misc/avatar-sprites/female/clothes20.png new file mode 100755 index 0000000000000000000000000000000000000000..bdefa9ad7033128a2f01bd47b629bf5245c979b1 GIT binary patch literal 6970 zcmeHM`8$;D-!>y+>^0eADlIBob_P?zi11LzS`?KnnT(z3$&z)V$dbZH9(&o%P_iV; zpqT8Lv1>5KK4!ePp6~ZPj`#f=`r*Fr>$;BXbAFaN&(B?_k&Ue)iD&l~2e9UTfV|W47 z{{gl8yt~cDCQdZIeDPX<6Ll;&-eDk+ZDnle)w-+aE*pid?Z-_|SNaMM7x@U%K>Y4U z84KP|E=q#*v)s>N$(F-lM=QMU^&?#a3TAc_lCg zeEdKkSNB@h(3qm0CsJjTSw&N}54g zII?LSUQgYyyIS6i-oFjN&U8b0+*E#)&1JTPk{mU;f7= z!N`w&a_9h;sl1?o?TgOAtgWhre6)?TG`=Kt`2NUVv42apNp)K@F2YooEiYTB-E};T z6u$atVWS~dEXf4@-E7=v;Ch8(`Vlo9DJ?;mA_f7!NfmN~p^w}^3{tE1ey)Hzd2w|s zi#+DeD-w(5V>fPtwzrZ8NKw=tYea?wFYy%OrVGXvF>@9+^u+i)jLxF~W0W)+f;!yd zsa%*uAq&K+_!SPBGFrL%0WOV5RWFw}Ivg#s#rF=g`9J@NI;6hYY) zhvENif&8z9=|f1T!CJ^A+;5{0!ynm#b1;xH7SE}i7~N35DtB|<2 z@qh&;yeAy%JqFfAz9b>e0?TN^F~rSe518)LZ1b4Pf{0qqWFptdVel)M;_lHCX1AtQ zUs7dZ`|qzCQHW@+Gq6Cu+rjd=nV6~nvjd3{LptSo`f#CQ5Dt(1og^AfeeHjEpHwOO zsVZ{D7cMN!x)ZCfjMdC(wYtp`g!Q^%Dh6@ccL^&rDG4V1*`7KJpH5ZVc)g(3W=9FZ z`M|#{KN`qL8gnF&8(oAIAv{+i*AeoNkyp}o4u@~!RR>SohwJD{2?Tt*m9X9xAm$N& zTKw-VTS~xrRySXP&b86UmYXEAA@snbN%VOxxl-=_Er#JT>6)vOt`Gi4_Fcw_CZB%{ zDXl%WO|Dw4CYb`xYE9Z43q{S5)$Vs0k=4ceBdaU*)@}aN!zupII;k&F1||vuBRU$D zN4WhDK51m|OK-V7Y4UTl$0<3b%HYSJ(KMz27V2J`3W62#BteGcD%ujfvf~g)VKW&|8BfG+_s71zk(gzb9cWtj9qnoR*K*F@=)=wt zbFW5LYXNb$-z1@g=I*MayHKaFOA2%jMYl@DB@)*nERxbp_%)Z%hY1vFezJ=0?9Uv#y*=8wTpF@ha(`M|uk=w+CgblK z4;_i5J@Se+GvJEHn^xh8^+?KfBH2D^XYItmx#c3(M5}XAezl$Lw_r+c{%jO=rnW68 zK5eK*ia8%m$yhBcQ{5TTQhNQg~^=<_6#R6{6-e|% zVWk)qz0x4TyT)%ad4Pt|9o>aG19O9QClyH@usbw2Xk{y(TLYC}AMxaATI}MLncUdk zF+ibjRSEY5<^PUl_4v-E8d`PO(H2$g6SB}UmleV?3A1yWYd_Fc@fdJ2$pA${9OCDy zKXljdO=cOUHfG!u$E!n z7Kw|N@m1NY0eVTq1fJtmq2c$dshy3Qvrld6@9JQim+YP%EdFYfIP5T*F%C4Yaw+6) z5WS5f^_0Zy)4_i4^@_fV!+X*KmeSi}c|9Sxa@DTSi+ns+Le)Igz4g`s-=z^{ z6K@YUivJ?7R@1JwU)I#SalQo%<+E!4bPVo_Y0S2~=WQMyXl!1Ge_sGE_lHn>m9qT; zh#%u!n-}4(KXVtei+7nOW7iO|JCaDI-KRVKjt zYyD;G!8WG7dM_!w1yLC81)}ywd8x1((!Hd$^2)+Pf0QMtd&8-dwXY8o#tUs*W-r(1 z3;&{hY9hr%51tYW1Qw+tf~(^#TWG~B0aeQUYmVfdQT30?QA8gC_`!;Lxw zfCbIs`)laH=at3rEEZg6uH;x9lum_fn8aa*Qll5wS( zm}~wz_L&6wJbE$EL65&O$drq@6u3JO;2{-ER=∋p4V;BQwpGCW>rKtGbsK)863K@tyhV z5f6iEJB?`+a5W*T#&P7dqW|g6x**0J%{5O)*?_h;1fo|rDrVy}`CBL*dMuxk%7qv@ zS>k%ZdrSU-z>Sg#HLVAq2DHyjgjQ&~@fu8M@3BJZbyvT+9*aHrJ+i5aW))eYnf>0n z-8Phhwka9$*z=+#m}Z6ENj)`o9TD4;P)lfHytccyULV(7+j9+ZA#MrmfBMv~X3QrK zDQkq?t_8{Bciq8JYwVft!sXq?q1aE8Lq^^r_6^J8$UXxZD7I05u)TpTuJ&B%+-^DH zGKfP)_0}qD%3IQz1Gg@t#BSUz08HjGIdzU;zaQvmh%ikPL&76pP_(ZBNA;lCdlsB_ z69&Ni;<#Sq_3y9rN|I(2HdNS+zgjq2?T$?#_!NuOv?e3+Y7F zfRj_FAjm7;yv~==d@^!eeoG}0xKlA;OOra~qDlGl1?85mO6@E+n5Ohz%H~y&@l~yY z^4K#l&56hX$3+Zo=JOm2f?U0*HOqGfR>++f0gOuDJD84_iQ8MR@jejb{neRJkyH=Z zJz26i@_yJ$49?)@3}HVHU%nPz8PzDQx+XE?%t@HnCKUU9>N-M;5b^7;ad?0Ysn{na zL%`LMoo2jNnTKlIH+td=^j_nH9J8fmsC8TP-kKxOEK`8~2;{zxWMw;VG#_8{21ud| z+&|CJ;)R#hbm2^@ZUE6nJ`?H_Zm z+xL<-M{AjdaO(-fiP&;yM$~$*->y_~z2jXVnhqfjTra!7w**j>WD3&*=4;R_+0>)c zHZrF=NYNsvREb#y^xPhK`ISPeydM8))cUw&ht=TcK(9-e(KA8g@jK7~8J&KoZjswu?`k-yWX4EDVvQIiFc1(mo-RlNQ6{Zn6z&bOQ z&~y>t3Ks7}8B53+5Nfgm0Z_`=MC22i)02HCr5M!1$F(up8PaaBS6R}7m&^8P*WbaN z8-bgN1}57%5l~yiLqbAL9(!%Kf*D9QH=@`HZ7f>gpttyKMsVR*w|3-<448Z_`e77s z3;z$08;qkHQOft13uk{|p$n(wWsnm4Jibdb%)kxcC$L-5A>{NDh~QtpzmJn`(p&uS znqkLo8XbI)>6``5ji}UYdAm8&jj%l2!h1W&{bNfopw)f$q8p$Au210-ZmL0Ub`3^Px7AV;6it$>andE+bbhj=xJ2a)@^Zu?)05bV4=Y+{R zhWftPkmq5UX0^J!)1$q)1$wVe^h!H@eY`rugSLI9c*_8|8TgwS#s{5*AYDM|^r@n% z#)S3>Ne7W=Yi>FDWT*g~w%jHht~N+C%04U|M-iG>&*;GAJFLYerlcoH<+WAB>}4Mw zPF_tH(bWLHRsZQAbslo{vSWoQV=Iw8c%TDhe80unA3l0|iJKDQdDr8Tz0~k~;bBk? z(dbep@Z+J|T8y2>vx0hV0+=Py5witb1W4;xR*rR^n%A)9%put|zp^Y*T>jxr)?@f5A#S*vAhsn9`Q+zSU^ z37@xxmR;U_N3cAlf$vtwL{1_5OmK7u=plh{QoV${fRG4hu(sd z4-tnp_mAcs4LyQ=j{6HSER-TUf`Xhonf+mTAKXZL=Pcl#ay;m_4>#Cbh+TohC>Jx!>Lo>akIv+mD1!a{*j7r)i+VLGc zhF%ubTSIeucvPm1zVJxo>Ff+RupX{`%HgEUDB+NN-V^)Ag)T*T;pg{t<6PiG`Pb-H zep=RF@G`ikiKs}Yin=sVfSBb6owvGY^J2~3_w;6gH#XxA#Cemzc%Try2Ud|6Odx24h($ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes21.png b/misc/avatar-sprites/female/clothes21.png new file mode 100755 index 0000000000000000000000000000000000000000..eaf7bc28ec01edeaf0fc991fbb7e498b7eb476a6 GIT binary patch literal 6963 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

UUUpiE}T?t`bVj zX*C=B;6CMVi2HFVy{_8#;l}x2V99SJ06r=BI40?fRyR+ea8Mf{q?6h4jDqm;HwW<^ z7W;Sr&>iCMjTohRBB&=3Z`==@Mf*H2&sFS0|I3s5L{)L%2GFexfsBv?R)C>$A4&_; zfmwIRaiAuSx!ui(l$xxUfBdzutB|Y5j{9@`6wkY_YvLBg3DqHFHIi2I664^rReb-^B#SH3q)`UxUG5Himtr$E MFuhc)cl*Kr01PBd-T(jq literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes24.png b/misc/avatar-sprites/female/clothes24.png new file mode 100755 index 0000000000000000000000000000000000000000..cb97fcd46bab0d541e7713f2a0c00f3b64ead1cb GIT binary patch literal 6932 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 UxoaqlKUqwMdM4K^u0446A7;OMzW@LL literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes25.png b/misc/avatar-sprites/female/clothes25.png new file mode 100755 index 0000000000000000000000000000000000000000..3483ee8facc78a5fb3afa57d90d1c3d6aaff426a GIT binary patch literal 6947 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 H-+cTZ6(xNb literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes26.png b/misc/avatar-sprites/female/clothes26.png new file mode 100755 index 0000000000000000000000000000000000000000..7d8e0588170b0df9cc13fc2c9f8d4f90883a3370 GIT binary patch literal 5244 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 E9}y$Zg8%>k literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes27.png b/misc/avatar-sprites/female/clothes27.png new file mode 100755 index 0000000000000000000000000000000000000000..6927e28552d53724dc4f91420661ae1adc1416b3 GIT binary patch literal 5132 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes3.png b/misc/avatar-sprites/female/clothes3.png new file mode 100755 index 0000000000000000000000000000000000000000..db2250191dfb7b3e44bb6fef25d7c9e290c93c17 GIT binary patch literal 3855 zcmeH``#02i7{|ZgZ=<;&GqRCp&BSb!wrJam&=(V9!(_x*u`v{)+%*m}&4e}O9$hw4 zBSWQ7XtgYsTta3Qx)>AM3E3gUj7!sw-M?bbna?@T`8@B>c|Ok%&+~qrKkVwLiP6UZ z0HEnaA=3Z=%w7%DTICC;aZk7M0;6e;c0hR#enKe_LAEZo0PrA7eZ^l*snHRXAENfakv^gUlX6+u0HjUw{r^$E9jlE=}w?>P8(B0Abd*OH2Kg3*fj1GP;9$eHY zIB0+3eNX9_qCr-$-y+DbDG2}}1PV)pIjTf81eFt16sRarQJ|tgMS+Tf{|g1<*PHy9 zW!}Mc_I1>NKa*^*%Wul#8q+=tlK?IT)3+9hTo^c+lr?o%(=|Dcyjl^luf9EiKPT0i znDN^eo=j0oOSPX0=Q5v9vCAwT<$b%i>aFnE3QHoYdKvd{e$+Z{R=zhunkT$GTOc*C zPt2MZ2bJ9zns^Ya5IYDb6!DW+#lJk(Umkk5EbFduH2lokv-AnEZ40*a{=&T-uIx*! zT{k3SV^JBl)a9nqxy2XA$(=Q&-RXAQJYoFlv+7TP*S}VqMVi+|Sas2_J#M>M%JP#k z#d>9p+DrV9dy4XdHY_!@QJ3ysNy^g-HQw-eNQ9`~3k^oa)GNI4=sGRhADGeXWpCoz z4tt2q)X_FDCnG4wbcuw9B1ro51ju+({wm}UNbALnR-#36gNCi!H`9E0C~PbbKCYGy zCp$)t_+!c*rnGR^^B{=KL1Ak+0G9;1dnpC!x@94m!@=FWwhKDzEYw@0IKTh%q1NLb~3@r!|=XEndYfd_K zoINK?ZHaVE))X`d2mVIVD4Mf0g1ye~266QKQM(P)Q zi*JqfwxU|0u;bWZsXzNSiv@B2nV>I^6H8{gBvl!26`_MGGHTE!dUNQ?BAt0ZOc3JO z%qD2+%q-IL7c0VrKFc%C@3K4(WU^|j2xnvyJqmHZtR-{>FHAGm(s-thjm>S6LNj+y zj#uew9qY6?kRu`ByQUqwJo8`A3&zTIqtv{~y|aa_L%XLdg_j3EPbI!eRqU9TtfZ}v zkB<7QKcY}XxMn@z;RbyT-LDv8$3!h1b$2Z(KqxF(MCbDv4DpGFk1wQD_w9XJIA4W!jgz1{_jD0EwNjEnz9Zf&aDg#b{c~qquQ;L;oC-R{2msO={9K524YF25BJIg=9Q7F>9CG7v;5vq6X9hz)H=#io9@av5L35xiL^m_zbqZ4HI- z8i|21y`!baHMxO6P-rtIEnigzn8fLj;5_Q8`SiG?d8Icyjkzvs0{duNE`-t|rK!C+ zfU>__zXIAy%3b1Y-7d*(DghZ5GIs67g^e$!1YSM9i=;|E?1Mi&y}Z-ew_3l#^i#3v zrv&S(cARd5H?pXG)G!l4w)VJo@Trixdb34=a#&E{XNf2)^QCS}JmVYj#XR9zkUZba T@lnuC0OfHy=t?fP^E>wsGUS7O literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes30.png b/misc/avatar-sprites/female/clothes30.png new file mode 100755 index 0000000000000000000000000000000000000000..9140601a4f13673d9288f0df8b5c08c9199bcf4d GIT binary patch literal 5599 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes32.png b/misc/avatar-sprites/female/clothes32.png new file mode 100755 index 0000000000000000000000000000000000000000..eed37172246c6ecc2b3c73650da955ad6c72bddf GIT binary patch literal 5546 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 o?WaP%%suzIFSSOwYTT!-fHq<P6O-$(ol{r~^~ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes34.png b/misc/avatar-sprites/female/clothes34.png new file mode 100755 index 0000000000000000000000000000000000000000..b00e7a2189aec0057d52cf0e7cccfc2a85a71e2b GIT binary patch literal 5383 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 RGe0juD03ULS0q_lE!g literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes35.png b/misc/avatar-sprites/female/clothes35.png new file mode 100755 index 0000000000000000000000000000000000000000..1dccf58b644a01de3cedb6b8bb90794a87d85ca8 GIT binary patch literal 5358 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 V=~ukX`4xmfOpGkhRff)g{u7H&fc*df literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes37.png b/misc/avatar-sprites/female/clothes37.png new file mode 100755 index 0000000000000000000000000000000000000000..f1c091bcbdd5d8ad3d189ab32bb959e4777cfcc1 GIT binary patch literal 5398 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes39.png b/misc/avatar-sprites/female/clothes39.png new file mode 100755 index 0000000000000000000000000000000000000000..8fd9287139bf89bdde1858da81386672aa9b06dd GIT binary patch literal 5369 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 B`$qr( literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes4.png b/misc/avatar-sprites/female/clothes4.png new file mode 100755 index 0000000000000000000000000000000000000000..dfc2e0387cf54387062a069abe942a87458974f3 GIT binary patch literal 3867 zcmeH}iBnTo6vmTBgbP1FHpvyChk2oDLv65IkfK{lZflnNLWLAE5ag98YH zMX3-NtwLBuAcRd*pvqn=A{uMi_ka+Bgg}G+D>{=qbLM{M%$@Jd+V?cAe%7x^DDwLNqcmZ@Iht<=0wL)-;+{{2yN{&`|1fsG^i z4Dsu(*ZMZxb-=_g`_%}6jI`=DRQ#Yq=7#CU)TG`rQ0lN^_c|orKx-h~Gp&~UUb)Xz ze^s$4)x??lW%fjScz@xm-V_yG1QG*63>X}c3E3scCP7Ali~<=2G74lA$SC-~PypQk z@@t;f4w@(5$m;?V2^jHc*Xj05$v`5E37~E#4{?LoWKR4~kLvX6#mD8f)|jz8^Cgrd zEO>_Am_j>9L{Y34A~<`-O89G|+pXa{Uq9k2^`;)1?pRv1TK5)onx}Afer}DrKTt4b zmbhg9vFmxm8$tLyzj0~0a{d0N_HH`e)=J{I5G8I1k7wi6kBBa<%_{D71x>v8H`?BB zG)1nv&(EzsOYZ`E2suSI`8v9P)9RiDQumQ-fPknTV~kv&Si7$)d3Y?&FizX`xV+~& zGmu6&L9S@SY_fvb5$|xtZ46)qoZ8?}$JOCD%R1$({LoHVA=^V^+;xPO1DwZjy+fFq zpa&dh{RNrbbP7(M+Z^X2lTsqVWU|8^JN|pu|yeN-@5NSU`4Cp8vE|pH@ ztZ@efQhF8#{U!ZBlNG;7vdRHd9Q2=u>aNE(nHw?_jfDd%AuUzOyRGk3`IU0_SH}=b zAYdhevaR>t>G)^G)hr5C1R+@EHH#Awz*0-Iii)_Y%HuQn!2 zKCVvPk@KtXZ_;zp-BZ8t!L>iBhx4wYIyIrms=n`6Q?m-;^isQs&}}oE>V3UMatT>4 zz-b1nviMqZU=UZoW$EmtGcELm!FyDY3f@feEMi(W$BrcqqV-f4x9`TE$YOHsxd-c4 z2E!DMv((W5q8TwNI!2G&`P7(DXuBeMhj+83~p%v#n(q<>nsQKHBF zWsDIjCvo1za(j)xkk`W!Z0{4(7I=I~Q{$N^k?2#~&RaJ(+fLfhNNuPKl#oi|M;Ez{=mhF3=h}hh&l>)*H0OmoKEiuEOIoJ)qdX`ZQqCET z?N&`Nkv<<56*DZ>l$+S7+BBp+4wElUP}`{PaAA1w1%X5JW8O)NLPVO}>`?>e!^1{+ zjO|v>Vk+GtCJl)Z=61{h1vN>j%ak%S}bP{GOuG4{)28+@?;c< zx>62U&EbvVrEzLAwsP2A4@)Id<)LFaj2@1X>WiUiu(^kWc6YPp5P=nTuCc(CaP`I8 zXvgsq!4uOXL6WayYQy&G&)@hLHL={&QDxc91m?PN=zy8Fo+1XG8%Z;HxgNl99WK{@ iX-Pu~HbY(y77Nk#14({O6Ko1hx||(O6RS>My!9_$W{`>i literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes40.png b/misc/avatar-sprites/female/clothes40.png new file mode 100755 index 0000000000000000000000000000000000000000..168583735080cc010ba13cea84a6da96fbfb4a75 GIT binary patch literal 5284 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes46.png b/misc/avatar-sprites/female/clothes46.png new file mode 100755 index 0000000000000000000000000000000000000000..c0312af11b9813d28cce332d8fc0ede4fc447ece GIT binary patch literal 5091 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 Y1RRo={PYF*PY1eea?QBH@b<(100A^}O8@`> literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes48.png b/misc/avatar-sprites/female/clothes48.png new file mode 100755 index 0000000000000000000000000000000000000000..f7d5ad50ad8de4408ee12d8eb711a222a986fa72 GIT binary patch literal 4994 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 Oi1kG~i<0x+fBX+mRYI}= literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes49.png b/misc/avatar-sprites/female/clothes49.png new file mode 100755 index 0000000000000000000000000000000000000000..46222ca3ed2e06b444981439acda1321d20fb941 GIT binary patch literal 5087 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 BV59&5 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes5.png b/misc/avatar-sprites/female/clothes5.png new file mode 100755 index 0000000000000000000000000000000000000000..1376e7d669be9daf1854dc5ff8fb18977da04e5e GIT binary patch literal 3872 zcmeHK`!m#Q82|2ChedW>1}C>INoA2sxei|<>ryTwA#yF6ViDHCW><_2Z92KPtUXal z$SGu5)w(9Pj82Da>yRRLS=U^a^VQ7xBhJkJ@XY%>&wQTGJoCPv&kye{_p^@sr1nbz z0I<&qXYUCBu-v_n`~~WeUY+cN4%l^1M?0W)Ky4N(5aG6GYyqJDj`Vi0I8-B}alY39 zK(>7^VBPq~VNlZGWN+)0c#+3(yXNJfCK2tosM(ou4(U}HnRD&PABJ+SGPj4b^yJ|Z z)UMYVCk;KcKBT+ncxWZA@IR#A)HvkFKRsnzcY0;wjY`e_6Jya6LCgWHwtn`72|Xg7 zzC0Qx8@aj0+nVoNXfgiO>RZpg3Bce8Ni+r|i4xHzh?F35fyf0S7l>RSa)HPN{}&hZ zxRvYBo|wKk$KX^L_ApQ#ZH=+@+|HeEwj>ZKp42|Wo8!%ns*DZwmVGYi!em-Ur_SKT z7&WNSuYV1tNi?wa~*@T9NyfB?Z(Cv zcUMyc1l|qqrhk7bp{9=KN4-L<-EbqY7Q^QWr-%gWHZujMWD{l*Tw8(i&bx`_ubRBD zF2w7ltglqZ-?l9yPTUdd%w5n`mDSfTF3!k%N=j_LBHaO0sd225HXjl3*mSp>KY>9} z-21B%$5iPJIr#|(VppdXDS;v0kFGvgkVe0`8y@X%ab6}jGJmH%=J0%SZmg1Aokajy z1v7`BEFL*%HEAx6V|I4u7Y2ePpGMudQBP9dE6U5XIB{$+5)J#E|AR1%u#i74CWnDn zJUH+r2tF$%iH02nht+p$X`my#;2DAf%tlC>7lBOpWenV&RAIRjU{0nYpuQYNecu5I z1>AX%1P%R1hTcQPnWU?^Vgg_g6#~bc;^r&N;C`Zp-=kxXljFoEIf)!;7mA|N!81)p z^;KTX_@4YicMP9}ZmMJH&PyzjTLer-h@7cc4s0o?au+v~dDSl4I0OYp6!@0Mqn775 z@3x1zT#bw0hIAY1N6oj$ifcz(DQu43x9yEd-guytF#1$PwX)5~i@Cx6S9qan@>7HB z?*%KnC~}v6TFh7U7|ReaYTRPSpfVb_Itm1X{a_!MC7Ev~HtM0CsI$`EZKpc$cj1(Z ziVTlG^n}5Y_fyl+KuDS(P1cUvn7o|&q8#dI&_{LMF|#x}v5s$PqYqMDg|P`?OHBrJ zT3d8fNEbD|P5LcSX|2D*Rd`RQ%*Li=xu;HfD`vjEU-+`Y&2)YJ-PTUGrA{hkDrC82 zH56{oITT$9ZhJLsuGScV8gq&VKPq&q3ibJK zZfI@Bq)<1+@E@Dbo2pAqefc^xUtgOgA0Z#H{fXDN_#?A`Hmuib*Cb5VEbP#ziYk$s z>QHKS)*&lFN+HlxG&1KP%3(xkxtWLYfw)2i;1AJY-~$`J@$5t#;w!=B`S0!+DE zn7$9BC-#=cSHgk ze3Xtr;2ur}dk>X9PqX4G8>6T1ks#q+#z1s{hc!|%*R@k?(2Y6pq4c@Biw{IsDOT~_ z`!L71HQiaTkiCcbVS3RR?cxJXXk(}Ey&i^5Ch)VaKAbFJ%e>`{=et4sPWJz^NsSyO zj&TyR1NEI4m_pwEP?A+Ezbu?>R?omU fOF@Fu#V01PDbzf)SA3 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes53.png b/misc/avatar-sprites/female/clothes53.png new file mode 100755 index 0000000000000000000000000000000000000000..418b1e338ed34cf8a6d4ddac1b2aff53c4236a9c GIT binary patch literal 4640 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes54.png b/misc/avatar-sprites/female/clothes54.png new file mode 100755 index 0000000000000000000000000000000000000000..80179478bdafb2b55d70776c0e7b08cc30e7d6c3 GIT binary patch literal 4412 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 Z3Kfu!;*lP&8vbzvfuXLMP6fg#;_sU*tA_vp literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes57.png b/misc/avatar-sprites/female/clothes57.png new file mode 100755 index 0000000000000000000000000000000000000000..d6539fb58a0921971e6268fa610f9111b6850885 GIT binary patch literal 4933 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes58.png b/misc/avatar-sprites/female/clothes58.png new file mode 100755 index 0000000000000000000000000000000000000000..b6f4afa7a685bba24ddf887f0ffef33f2e79310a GIT binary patch literal 4318 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes59.png b/misc/avatar-sprites/female/clothes59.png new file mode 100755 index 0000000000000000000000000000000000000000..3d9b60818082640c17bb6c6151e9843ec800a186 GIT binary patch literal 5842 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 TGwkxkqXE!XH&Cloc^LX%K>gY} literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes6.png b/misc/avatar-sprites/female/clothes6.png new file mode 100755 index 0000000000000000000000000000000000000000..2d5a3ff07e42d4185dc336f4f8d0365834053271 GIT binary patch literal 3867 zcmeH~={MV17{`CVBt=px^i;?_7cV@qShe9#LT>ye__tai|5?ux%WBWbI)_XpBFdbq60w= zp@IMaK+e_%PXqukbuVP3#5xS!U-I zZ_bF)FGwA)r8^zdO0)-|!v}>b^ecH0P2`*FNtTx6KfB932CKR3OX|Df^!%xjH2<1G zADVE3vE#q`b~oIAGQ>K)sAh zO@e2*Vkt66kT|xq$bmmqtc=yh!fak0z3u~a17r1W9&bJeG6PGq*>Z=>z-ra4iS@q8M6Nst@i^HhlwIk@bVV*K z5?X`#p0CvEf2^;XB%^L>=JetlZ|5a3LZWq6TStrK?(6w&tbet*$2nRXWdJC?cIWb2`c%5sUeL3t+0-c`DA{X(>Qt=J6BiovzEPFkjK39O_09f; zPkoc7OV$+Z&sgD+KT;O+qu1tJoCX|v^R_n^a?+d1>$*k4{2bSxm;CXA5 z5fZMGnC@YXS0@n_j#M>Kr(u-GByvFy`P&5BvewqC73Rjf;f?lpGK0`bWa+OjQ{@}|@H zce{_$9Bjq~2;`XK(w(}(g?i0 z)_EKR(@Mj#!6{2WG1h{d7$#tyEqHIh{@cY@N-Q8@K9qw@KKnO0oQ$bO-nD z=q}W;dp68w(F>N1$t@cXxmHe4@^Y*zFv#C#6rcOIvTAWQrbt={t% z_j*RdR+@&4c*;zHcuE##&kNwZHs~{FBE$l+Kp4_<(2G2Qm7<5iGq%Um{|1l!-ZWTO d0O}M*Lwz5r(JB25viL&_*q(8~S6F$)`~_D@p=|&F literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes7.png b/misc/avatar-sprites/female/clothes7.png new file mode 100755 index 0000000000000000000000000000000000000000..ab11f378c30b336e2e5e46b396d0dc0bc7c6c910 GIT binary patch literal 3859 zcmeH~|2NZn9LGQVY#1h+zTr6AlrHDyYfemQO}MyaH=-$QNJ;k!F;I(oJy#-Vcycz#4@|S3cZ(&11jQjCHg0e8rObF< zVKJW_Gx0c#XIFBuShQr%&-nQ3(D*d~0>a=(EP<{R%12NpK}ms<0wo1X3X~KmDfquo zU_!jNjaqN@)V)+#V`XwroAZ)NVTsz;KVAcpH8fJk%OfiWZ15;SW-m1Yq45{AnT-#P zs22nUa_zSiAS(hSQJvwM9Eav`eszb7aaK}axLK9oIkSZ5phRDk%;!stu5|ST&#cF$ zvPeX0A+HI`McS;vaglJQPS|DBR#P9{(p3A6G#9(sH;g>Xcj`x9=M@v$VUv#s+SHb8 zEQqU0SexO3av;7=9J7E1=k^gyt z5i7o6VQT1kl7SfQ<~Tm+f8@w}kpfDFH6@bzw-cdhB;obOHU!PBc)Bx91o7_ zpDaYl3<&{6DpyMalb-SSu%t^_sp8S|rzxMxEVB=2bB-{-=66QRMs%@Xt|Z|$3#Qkd z-;}T0FUuxak__nu^L^y?4a45}w17gp)Wu)~J!8J2R=D1)&*x({h7lYDvr4a%yYN}F z6!TJ7P@Iuymzmtu+i>l;_WY~fNu0!y-byEY(VOPaB}}yirEfor4u7!`ahj#|v{|-P ziCIH8$p0RiEVC6qspv7mF6Li~@}IMz$d)^9bgUd)mE#sCUM1O&mZ`~Pk%_dr^Xs`d z^B;^GSf+$`?%>8Y2Fd#_1s63dXxdEL7dE#1Jl;Z3G2PDV|5PG>lvhUPrsFsG@p5zg zWjT34ysZC`=r@nY%NO!3iD>v6>p^c15DK=`2=UKY^2@u*?xz>Yy(hq(NhTQZLy;xX zeg|pB$kIp=joGhj5{wEXg?uH2ykNBm{UF30vxRybR3A0()y`hr3)w+PGv|2^iH_2j zvHmK%ET5)^s7`)rxIz;)XiT88Jm}@Qu%9%2*g9x-P!2vo{qTxWZ7AJ`{b%>qI5vq(DNoJ5F`pA@89^ipj zha;_#hkf!_>AOs)Zqb1*FMBS~T>`l+N9QG*l)x03w1RfMQ-d+Sxe@5WKcYh@ash3{ z8hhBM+c&j0`b literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/clothes8.png b/misc/avatar-sprites/female/clothes8.png new file mode 100755 index 0000000000000000000000000000000000000000..cb57738deef1213a7af830f3b2f30547c08dec21 GIT binary patch literal 3865 zcmeH`_fwNu6o$WqkC32}fOHT;K#`(ZPyt1g5W>=i1fw9urO6T&L_~T7k|;~v1;$lG ziqTzgRS*a&MXHccBoIU_v_ zEH&##KYItzQ2v4JHZ!7_$eDeGq1H^;bLgmQXKb=1X%XFJfh?WAmK|60_EPU$C@msK z&|s$R6Yh(PnqSLZGrrqX%1Z$tP!Ntn6PV&e{0U+wh$#?LAf`Y}ftUg@1^*WcTFCe1 z!;hnS%Q`Q=QTFMS^7iO^`F`Gedl^GOCqOk#ZO!cRSydJV8L%?4|8AoR384i;4f#~P ziSOV?)K1_vYAU&*WqJd(khmJ7%II1g=j-I)-W2vvQFSdNEs0LZwPD(zlntPg+gW&#Luy3?d37;7= z{rASo;=HQr4Fh5QOds9^*8K3EtDDi$U9B#V;0m5%BIK%Yf~BPspcDIuQWIPIz_6th z+3j@XSbWn%_KV*fXNV&+%ep8$S6wC7&Gaw1SadF31A|iJNGqW45T8Q8|2VX?RThBL)MUVCJT;&Q2Q6>`G`C@6dFom=BW~m z4?0|cKrsJ_5tyQ`oBr^gOhT}vNJB9y0)7%?1%HPGyOhWe%Q zc2a_^Lb=R|Wp!yT4a;r*keV^B*ioTYtfsd*6rWrGF zlNBo*(NLg1!+?rL9Rt_V-A?GHK(`hAVAi9bx?FZ<*>YThD>bQih{cu5P_Z5h_|l+< z^-{P~;_54!`noonAiq#8zu>-~h9N{J7DdZh!x9e|u)3y+1I0oUi8ENlbEO59#L)u& zwp+DFqxWCKMiOUm2sp};>JZ*7#V6dNKtI4yjHUpDKIPeUgEU9xAvOqFTb*aSDC!BP z1gP@3{OBEvapjz>Vnp`bdGn;6hOgw-3H_F(HO!8J$bXrv&~7OMFI_fhj7*o^mKw4( zYb)3|HEXw{x2X~&5{%LdO?_de1j#57UCEY8?5lM9N46wzgV|T9&jx#UakCp|3s2Ek z@~RfY$EDx%(St?pKu?I^s8>$p{ad!SXwA;(yukJP1|d{?@K>@!*!Y@~gpXh0DoI&q dj@zd*y6kbw$GZx^prwfgF}}M_)$< zhK>E)e-c@Ne9i)o$YKTtzQZ8Qcszea3Xn0w)5S5QBJSD2E*(1K^d8vYEr^^e}t<7AN%%lswb-^P0?VlpYzwf$54vDt>8gI zS?&GO**ebKml~I(9shpwiS34)H*Z!}+<%{bzkHi9GqW5Ehk$}Z0|O(|C}T7bMpMFQ zE*Q-Pqq$%-7mVhD(OfW8a)Co7Q*&at^TM}0Z{>O&IcpWZZIzu{C;odrJ0p{+h=i1c z%nf4;lOF{c?M|~VNKCoFK9A#fh02zV25DujYA#t3HZ@PSus&LF*Rt@@hw9Jq=S zZ7XfJNZ-D5>c;UhdFS=t&ll%ZZoB#7$F=JHKVsHD-~9gS-(A*!bILdQe%rh5d|lC} z_cz|R@$=YUpV_&@R!Y{kaTe#1)YZS2i>ce&e?J`b`ONjty1kAwYaiU{_g;G}`S-mS zIx}asURl%dV@D?U5r&)AJ3l;mb?JNe*$=rJmKtho=GTdh=3%@Pv8`unnPSnGuOc1l zhSG^_pQbVh%A~R#zqRicqtQJJ`Se5Qny+l`_;KYW7tj!OhZc9yhl1ZV9WLqG_3in` z#B^j+?9$WIn3nu=JtDY7JAu=?fn!3+@%_r`0Uif zD|K9U>7_ne7WDF(qI;ZkW5xT{ir=>`78oAYUU%$uQ&(tAfFaw76OWbi+v|QfWE8r+ zacnqX#+~v$ao^SInd|q~S=5|!4o+8J&ndtd6xz^odS^V(-wz8fl$Gzh^5xa}yXVv6 zAIrVI9aFOB?|SoJ-`a0q^Ra)! z+xYddRZr9Qn3syO9e0%t=ZqD1wcmMvqw(tMHjq#6n zRD5`F?>TG7F3$&LjX&0AeK*dxtu1}J{OPkp=F6kY7th^Sv&!=O(bxYqo^^_U-c;|i z!Rq?E^7M6Q?oX|gIezHW`O|ARDlgVfoO4HdR`r_Ii&%EC+_K+2H*)5`Ym+7?>3_(7 z&-`)8pBED^mLIYx?2cJF*}+W#7>s9rzI+diPC>d`&ixkgYIqPu6pJ_YS8rBn` zp!htojPa4nE-o*H%`K^HLEobG{tf-s-WJV!a!1QmQ)WShQ|gS2N!vDFb(;0+wK3x( zm0h1a6Xr5(Y)K6Zm>uajGck>AQJl~V-3Kxq4+LbSzW@`=)5#4Cfhw%2>+BNP7S#yd zuyOd)6W(|>G~slN->Rf|CYPTo3JxOfj5AmBM;r>WNB_60>O7r%;27g2j_Zd$l`HI9$bGZ)7tl64&Kx_S zTY-rd7U*X^9+X^4G1!-wE_Bi~Wwk?=@@_b;@y7d0&p04xa%u5XKS;!she7f3BbN+v( XsAC3EGgyNQ8Gyjk)z4*}Q$iB}B42+N literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye1.png b/misc/avatar-sprites/female/eye1.png new file mode 100755 index 0000000000000000000000000000000000000000..9b0d451310300ab18ae091ff31e1c0a388e6f717 GIT binary patch literal 4713 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye11.png b/misc/avatar-sprites/female/eye11.png new file mode 100755 index 0000000000000000000000000000000000000000..4d41dd952d8285422aaec770fcee652cab3c9fb8 GIT binary patch literal 3919 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 v=Mmq}bIzYZ*l94HgUUcn> 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

UHlPC~x?(`n1m-nucc}$glRJ@@A^cbT z2$WiiKxZ34fiaX&zEnE_D9Hat`>78970rwRT10f{k_OaX4N3hB5!OTx#l`t;IG*Ha~T@n zLj!k5qgFwEf9i$C+RWo&LoxT-`sEby}vi z62c%VLwxlRM~O%gSQ#y`++RezySGL(D}r>;*WrPri4rWWC32y1{$YLQ#&V^$%$h_T zi`zS=!bxsaMU4q)zT6eMR7EZ%Dh;mKlwr5SZftGu_Yh3j+_d2pB;C$yroRivtlT4` z#nNwCZjW=oz1`dtOi%B1W0&bW0=rnTwWDVYny}gAS`N2uEwps`;lP924&F`+X2;sr z-A5k5_3k**9AC>(h~?GA7;0V-5U9Ni#Tm9wRlx~k8NoE~TzLVKLwmr3Z_+Ri`J9q> z!a@Y7Qt0z*(4p1c*fTZWgUO(1&)}Z32MKFVIYHlIj!meip~jHLrqd%H10vwDpexV3 z9#DI#ar|>--K)W|RdC96_g| ztY{|(Vz!I(0~w&D)b1G2pOXP`cXeyFfHJ|w0ydYbTxjkAfd`mX(076*`Md*A(^WPw zQFCu~fgltxZGa}U*KiL=He5oU#*w_EsWN+iwi)ykeuDxuO#Ck6>yf`3rFZ{nlz!6K z|9~^ZZMkG{tc*MH$T5tJygMnbOt28ROH7_}Gp!mAHXHca?5Xp_;PIvfimONgb&ffzW3IJUK>Bb zPH32!i0wc~55zf!hvcy}++$lMKgOeiqXvSeh2LnWp_YP;Wt9o+mN;a+9wHk(r4@l+ zpXRN1%gkyn%BhCEhjNjan4#?mF$BRPQ0%_?iptvCnwb?<(sgvA3}Ch1z%> zRlIc8^$ttMGs<~HtlYH;1Iw&e%jOkTnjC?(%U8jzT-V-j_7FZ;cntL#)vsv*l;ZD`Qip ze%G6_;c9dnXd{>3uBWchKT!3%d1=AsvGtad8bgaw^MX8u{qd9i-d$!ZsM~ogoxWv< z0%B^L7fb6&`-K0Lb9J?c-pF;vOso^6>3M`oASO^ z!K)6sto4=FkU7O)XMVrVJAWPe{>p-1S@3_61wbL>ZFVp(ZH~QupcwcA2xNNd>`AiW Hm$Uf26ae>~Sb&;5Mw`+n~4y?yTQ#9Nvh9^^a5 z2LJ#L8XM_b0RU|1FBcCNi-Ky>Ah3Sef~*X60i`|17g!HK_e*A%0D$t81G|o#tY=<- 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye15.png b/misc/avatar-sprites/female/eye15.png new file mode 100755 index 0000000000000000000000000000000000000000..c9dd8108b3a7abf68baddb91439505315dfc5145 GIT binary patch literal 6739 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye17.png b/misc/avatar-sprites/female/eye17.png new file mode 100755 index 0000000000000000000000000000000000000000..7fd5470b77606f36b9a9288f1b2fec72d60a2d3e GIT binary patch literal 5275 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye18.png b/misc/avatar-sprites/female/eye18.png new file mode 100755 index 0000000000000000000000000000000000000000..c69c232ae7d9eeb9ee91a28da7db49a98d43d0f1 GIT binary patch literal 5246 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 V+2i;2ivKH0IM}(^mY%*G_iwK%*4F?4 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye2.png b/misc/avatar-sprites/female/eye2.png new file mode 100755 index 0000000000000000000000000000000000000000..0d7dc3a1776f51ddd81334bbeee8cf0b875a3c28 GIT binary patch literal 4707 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 Q_%Q^Tp0qM9Jnnk)-$s*y(f|Me literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye20.png b/misc/avatar-sprites/female/eye20.png new file mode 100755 index 0000000000000000000000000000000000000000..6bb86f8f86b5fe7937acb05ef61db594f1e91fc6 GIT binary patch literal 5280 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 TI$!1eD)L#Lw>2l7yPEhfX)DUb literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye21.png b/misc/avatar-sprites/female/eye21.png new file mode 100755 index 0000000000000000000000000000000000000000..2df8e48fa6ecedd45ea81d666329584acf584dd7 GIT binary patch literal 5236 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 I7w-T5U*QvBh5!Hn literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye23.png b/misc/avatar-sprites/female/eye23.png new file mode 100755 index 0000000000000000000000000000000000000000..f94d63d54174cb577b67454333bd844846b3cbd8 GIT binary patch literal 6667 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye24.png b/misc/avatar-sprites/female/eye24.png new file mode 100755 index 0000000000000000000000000000000000000000..fb2de7dc1eb6c65b254e1de15e43afeb84c4adf0 GIT binary patch literal 6898 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye25.png b/misc/avatar-sprites/female/eye25.png new file mode 100755 index 0000000000000000000000000000000000000000..5e4330ac4aa9bf669d2623aa32722c243dbf2589 GIT binary patch literal 6340 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 MZevzsdh`B&0VRWf{r~^~ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye28.png b/misc/avatar-sprites/female/eye28.png new file mode 100755 index 0000000000000000000000000000000000000000..87823b693a0170824bda51c47a5cd84843d2502d GIT binary patch literal 6261 zcmeI1S5#Bm*2hUCM?eu!no7wL=_MW&P-;Z#p$bR~MWu;^E=eFHfQTS92!cq76ctp0 zfDjNQ3WR_(4bqWlLJ?_3Iw9eU=ezgezTNxo!y0?fxyPDwtv&v~Imcf6uAPmUpujN! z9v&V+3v*+89v%Sh*Wmku>xm<2^>QzO2zxUl9zws=JlEj$zhHfVho>g98sQ2pIMpGLl~YP3=EV{NH>6b?hjH;O_)Fc)mYHN z4dkBk*XWgf@lI9LR{@Tn%&0s!J{=wuO}vs|&5!-M9>{j7PPelYy~}raoP+z+a%6p_ z;)IWhl2LJS9TGAL-_+dfpVHmzr%*o1vYe5h5vbGZ%TeS+ueL1YZmF&|UD|0~PmEgC;Adk} zjbiuSj}AMPSLG+L3sXnn8>sSDH6aW}_AX@;!$>Sod*_l#>Y*?~O0VWy73hmExmRa< zrcV@0#`=U1=;CE=HmCd+e<8-2mvtOl

5)wA^v=Bu;~PvQLqewDEXQwrB|l@`Y5_U1 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 WzT`IfH1}5lkA;biF~R7{t^WgDtqAb| literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye29.png b/misc/avatar-sprites/female/eye29.png new file mode 100755 index 0000000000000000000000000000000000000000..1da60be7757fb1bb83bd105bdfd5439fe820462b GIT binary patch literal 6507 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye3.png b/misc/avatar-sprites/female/eye3.png new file mode 100755 index 0000000000000000000000000000000000000000..8a8c33959ef325a6005f3ad801c2bb9ae3fffe48 GIT binary patch literal 4696 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye31.png b/misc/avatar-sprites/female/eye31.png new file mode 100755 index 0000000000000000000000000000000000000000..a76d39df698c5b86a6040c3bcc567c39dbc33ab2 GIT binary patch literal 5716 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 S6$#t~gBl?NJ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye32.png b/misc/avatar-sprites/female/eye32.png new file mode 100755 index 0000000000000000000000000000000000000000..8900d66f5239790c8d92784ad1a8083e1e5227ad GIT binary patch literal 5720 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 HICA=*X;1)V literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye33.png b/misc/avatar-sprites/female/eye33.png new file mode 100755 index 0000000000000000000000000000000000000000..081b4b37ed6a778492c4556a994b78c33371da28 GIT binary patch literal 5703 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye34.png b/misc/avatar-sprites/female/eye34.png new file mode 100755 index 0000000000000000000000000000000000000000..3c8bc5046e62fcbbcc991b3c741f1c2a25d805b9 GIT binary patch literal 5724 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye35.png b/misc/avatar-sprites/female/eye35.png new file mode 100755 index 0000000000000000000000000000000000000000..4b23a463e6a53b4b70db4935c9fc9edb5457f943 GIT binary patch literal 4168 zcmeHK`&ZLP7XRi;hyerwXn{4dU$zJo5w?qKV*}v}W)*oTvSL_Z<#7;-NB~252%Cq} zLhB=di?oV_jfBSvL|GmofrN*k)V2w)1yd5xLV=Kgyn?}!^xLz$|HAg{S$?=P^O>1@ z?>RH~bLY-yp{GumoBqla008ro0pu_MKo$QiSPU}5lpOgQ=}@$=6aGNcxA+AFpp*PU z`~cuF+w8|UV+5O|2mFZ!02X~e3+icFT>=1DDo&F9&gPugD1y=^&)Q*P^PF!7JJ-AL zT)RT$XS-10_x6@opL~FI-Q(zp108WhC)m_qRRd;N`965=Ayn7+7R{<7)^{a5GAj#w z?>&3s_cXQ3@Qa(8W$&r-+{Mg{(kGTE5RJt_Fca7r>>R@XL?p;Cte)87-GzOJpEpmR zJ2S3UU)m>^$$hkMX@1fe{&-4i+NFwaFJo%-)Q|d^%fh^c-V$H`sB%w|6(zs2{wnCdQI>x-Ndv;L+QqCMVU=kM$y5j`38p;*4uHH z^n{6Rca8{}^E7nXrKQD)LOHiwY_QSOip72HcM1oW`n?JV9GiFz*+C4#+N{P{V5dr(zu_*y6B!59d%m6R01TXinQgsT|-fI}&D+72^5pw$MUpC;Tgdz)?x7Y6%xr1jbW}$(3uMN> z$9)kBGlQ{n&4Fliz=0c7|0)L*DvT|v)gOT1V31X0j1GA6O$xjKR--~%KGB+Di?v!( z!F{u0oUjT5+925EW%Rkv5RU~zA=uG(L+4mwwQT7PshA*{JL;s%h00YWE2GI+yw9*< zW@QcbXmBTaPc(dSQ)o$`RgE5Y?)Kuole2uk@%}5aV62>dOBKPdAbNk8eK9Umzy3;c zZl%9;*RwKEaJz;_pmRsd_%Tk^$`;2^0Qc@YsVD#iiVlSvqbmvEi6O+@($;Sp+8@H zr3)+Ml0kH(+v^z);VZl-3V%k}@tAJCF#|47O(^SEu?Y-rMW=0(6FhAXhU;BYte}0A z@$*bl2dsCI@()_zl9Z>F78Gmf5pr)PDI|12#CE7T3e3Y|iysXfV-}2Aj^Q8(=6;Dn zS%*B_6UbzKQ2Zzn{`bPPxzk;H95mDt_%}2*$H*iF^B)7s|GElHuNqBabH3ET^;eR( zDkI*ijR|E@QBrFI$s$mUUekxIO1M{5coB=6I0pH;5f`#XPSMY1MP_|GTBn;-33oL8eT!@2A2b`se&H9YdmW9r=GWZP@>h$(K8V7gdVIt72_foU)?T1waH#D> zpGgcUnNBCo=MFZzH(uN;vC&zH&DGpPR&@c>O9~NDq?2CTWqI7O>DOtR8y22U57ugJ zgZQ&?%_8kU%2PLP%4{liO1ypH+1je2J?7S_{mVDc#gHPeG*--OsDJ)0BKg9D)VtjV zD*?lx_w2XrCCE5abn#I-^?myoZ(7~@S4Ih)NW`rg1aH0`F?QI#_O2|$p0PGo`+WoF z#+s*L_@O|m)wY@?vH+F=C&*q_HXbp4HZay|ySr}&%wC$*eK?c*LifYp*`Xd1oNY1%-P+1Ao+l^|lPmoL!zocAGv4uuH*d&8J2>D~9Y!c!?r)O=h zpTj;#{&Coh;JCr@nhK!_p2-A`0;8CzFy>)FN89mO2?!=g;x+nCAUWHhsqFSeql;J* zY$ou6eMkC>d&6z9!h8*{6*+M=LZhpzYcSq5JU({6Yd9$7q3=55wo2M0`b=8p<&HmY z$i5hOL;tACIOG>Xm$^J7}@WTl$dz;pS|@AQ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye36.png b/misc/avatar-sprites/female/eye36.png new file mode 100755 index 0000000000000000000000000000000000000000..30126526904fa375a0aafc7df34b6270d1d55e67 GIT binary patch literal 4471 zcmeHL{WsLx8vo8140DHZaFmXG&&8Egv#N`jm>JOwF1iy(UNT%HGlWJMgJ$YHa0&m|x^qWv$L~Ro2mc@jtReuKZy+121EB6eL!@C$a$;9D&4ugpI*Q5;mCd zpQ(T_1J`IYb&nnqNyM`b^dak)?#i-HteE4+%O^%hivk4O98Yqr_Ojac-jBPt(CB|* zt#jZCQR?WdC>!VwjrL@c419|Ru$3!48u`nifwm`Y732P;FR-)=VG-}!MP}!9X%{MQ z()W_+I==Ps{nDPw{QBW4Gp)tK7f}S|4ktMWbkq7=_fY8j z@6U01p}n5(WTg&^`k=63;T=eNay zWD62<4T&(ym>=82$=jsx2K#>>;Cln^+*{4arLK&-4bFi#nN-Wa#D@pb#6Rcso&8*e z?L?Pd!5z^VH;h(&B9y6Ox^Cr3c?nTjpM%hjh2F`J4~8>702Pb2Lfd-7*qeqgYZ9U~ z!E3S@*-IyGgMcG(-LslhsfaAck_E2}trsJ&{EhjomgKGBP|fUcRkUUHeB`QJps73A zHQ34;c{HstR=CKQU(C=mW_DV*u7qTj2&&tX-#$_PfZnor^LBMLw&J0l0xh|&OB+%9 zQ$>p;Q`I|BF>a*Cm>NDoOlqVKsnZ0K&sovYl5BkD3p`6lN2g%Mtn=V5%pStltyM9y zwg>n2W9}&TWh{TN%E!iq3Q?OuLjwnVl3M8<7#gE!^W(c&WC|xUS|^4aPA0=GjFFo` zMP5p_d??W#hcUl!&=H5j4ecI7Qny93CHO(6rY^{S92?tzZQSV1p6xk=O`JlwH9r7e z8YV6^0ht0M_oQa>W4AU1#XWr6PoYD(ar-ce%a{_a52;tp8`%)uI9fbg0{m>#H=Gk+ zW5Ds2jAB6=Y>>&QCYRJeysPm!+_S|PycqVilV`*!1fqMUA#L`qKKH~?XSr_)8d`xa zH=a&S-Tx1gqZrM6maXgl^|D+Dg3$W+AnnJ-1sY(riaUJ?-g6$B(^eL zU#%G^)-0}Du9+t`I<@yMS1nyv+K8>xJVC>z_?*!J?7Aa6IaLDh;*a8;)^CjE*e4Ha zNJ}mwxJ1F`cu-;%(v;@Z%wX+qR`rh(e=_dMQ!%7A8Ol%hr@w&F_lx1qlBj8E@iD=e z{-8axKkIGp=F_5955Yd@a+nB;u8Sc4sNvb`^!>iR7KTa-nomuvtVBq*;e*W~^jhRK1%+iG|@VbvSah z#8uvzlMMS82M9R0wS@E(uc5iA27+$a@U!TS-3y9@FR}Gj1ou^;466ZE3)5P}3>#Tv z>{juPe{YTf^RY><7ZK!$Lp-ZzeGnIlf~uF~y9h3cQd7Nv?+EOG)VS?T2&q6gc?

sJOC+#sVGff%`rN;p1;rskOfg_(ZkZ+%RRdWHs8@4#(M9|h50 zfxT?;dwmeQ@Wb>MxAFN{1UV-=nI?hTX?NQTVS8+#W2AV)3gkjBC>Nnu&08Vd$t`3> zs-GPpQ_D__t-|~_B!WVrus=+I+azlS-#QgObuxEpIZbOp|JW0@_iHY#mL+%mdO{Yv{yf+!$*}=`J33@wkf3;DNZdBzPPm>K5Y^dP>O9f~2 b)hJuD8{gkKR|`U)C4iTwpGTE@#F>8rpA_<; literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye37.png b/misc/avatar-sprites/female/eye37.png new file mode 100755 index 0000000000000000000000000000000000000000..040d67d0120a0054b9c3918893a0dd2ea60406be GIT binary patch literal 4036 zcmeHK`!|$n9DnCE7(<#UQ;YT1+9bJD#wFDb2aUzJ@SAWQNJ+6PF?B)K@C3O0o3=HO{pDZth>KE05o3GUpcC+ z_VrE@NK^nYZ2Mw}j^x^(0AMZ2$J0F|oh+AiCx?1%)E#5-tZn3xFM>H*l__sfJhVu!ZS1%O%XJc@O3O;HtQQ07^LOpztV}A&#LVECE?)+ zCPCZK!mM28(of2qUO43i_rBZL31m3-hgk*gSo>$<0WeBIJ_vLA^Pc5E2I1{Ji}93vQ6I@3TpNWLYAmu-7PhlT)?M^ zI=wY8mjT>F;9lEm6WY5^;lNOBBq6ks)_{fNuvlswu^GY}cy2%-g1tHqfgF7lyUWyU zITN&WsFkCtc0l-Gm^^m^3kjW1Z(+u%vAo*_zdIm|Vj|ajRct~a`U~mY8Z`_$L6BmYxB{4YbxjET$zc-E$M$tuB0$RZ1sS(qYNm%T+lsW%f@SmDbd;=!V0bQbU}5%#q%5x2P-Gh6_$z zsc_QhHG7Gx0nXkk;Kq9k0#@!}m8_zwzYLmH#^)0~jBcbD0O?$Nek;zIXO zxK_yGOOuXE7FczN?^jk<(*DT!@V1{{IZMq4tS8~g@+94|;)69rJ+|G%BlsOc8 zd~}=S^rZ{S?&)tI5Eq^om+P#$V<6d@w6_31?Nvh1lItVE6{_;JJUO?A1xzK8v)rf% z#N~`!ts?;pq)wAL^NPCG64^|)9IR4K5G^sc89+fZF34mnzA}MTiE{i7!k453EQTO1 zQzoDJSLmoas6}ayM6(M^XDCQ68pY-wlauZ7!?H8?tnPT=85{GrgJ9Lgt4+vVSPaB* zc9~y95~2g8>j)$~qiRGrI%J2>Oolzdr)q3mq;bqq&{ER8?IM1+8n#Ip60iZfNh8XT z6buH!RU8*o15aA`_1+a+^?Yp~gcrdo+3IOJXoE!NGi$d%cy1iY7t$p4A3GHh5z*4Z zTd@YSM>#pSHI467S8^K|h&q@DI zSlh#HHNkMWrdwfwrN#u(*h`CZbR}$?m)_ImXPYGL7cb8al(y!0JMX`fzIeCOeR}&` zm}=g9UuGIrvPx-P;`8}Kz8#pm!SKQ>-B@hr{tMTNQ(@6(*t;)-bN%|rQyyQT=V{~M z==h8z&ROLa6%|3f^Yimuc0g^bBwIpXT3qy!veu(b&CC*>3*IZ0HGL*HBaPH+r2gxq oUh_@XtO%Mt>3_}wIc8bECCk6^psX)Ty?FyZUPRA&kLa_11MlJnq5uE@ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye38.png b/misc/avatar-sprites/female/eye38.png new file mode 100755 index 0000000000000000000000000000000000000000..f1868b1833840774285c0dd3594a0be5f473aad6 GIT binary patch literal 4072 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye4.png b/misc/avatar-sprites/female/eye4.png new file mode 100755 index 0000000000000000000000000000000000000000..240af062954962e11256e6994c25ea9543a7b06f GIT binary patch literal 3302 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgF}}M_)$< zhK>E)e-c@Ne9i)o$YKTtzQZ8Qcszea3IhXAwWo_?NJZS+yY}6}juPw-rn)F`XO*9l z{J$_mkt3?&UF^4Wt|yPyFddA#aOluEzdzH;>iD~l_%6TByM6ZEnUzeJbJL#H-kbjC zQf}Z60R@K!21X_pj#0*FAdIGjp`QyH`&h57HlIJwZqL8xPe1=$f93kRbFaRxj+PZp z+j_U^YR!qvIKS7Et0PS#HnKReOv_(A|LKw&XZY9U1jpyjygl@m|&8*iG^6N(LPb43aIjx13o$wyZ5K zWV*}EG2xwW@V&r>C3j-C3UY`DC^RO_wAXVml4p1-{3G0EBxdsbkaPeacpT|L(X2}VYvp6WHr zxh6zdKflLPB_N<+yFhKvQU=c*JH3%YTjiHv6LU;%uz{ z%>8xiYGkPUcJ@Vnk8XUMx=p@#)^s5CeR9SeC5|tO2D8t0ZPM8sIr-!g{$n}c&g8}| zyPRpZH&kP^j2^A1Ml0#jTripoMsvXc<$^%&Kdgd{73U-PW37RG69!LLKbLh*2~7aV CGfhhX literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye40.png b/misc/avatar-sprites/female/eye40.png new file mode 100755 index 0000000000000000000000000000000000000000..d6d6ea0df078f884aedcb8cf4ad19d5e81509bfe GIT binary patch literal 4062 zcmeHK`BPI@6n=RI2}U8Zh_xtBLm?m|ILamj9vCH5Lx7@e1r$^era(kMkeI}l0$Lzw zRX~=AQK(ojY%YO-7=@8lpt6QdWRnC+43Pp!pY31ZkIwMJnS0NjGxwYM&iCCpH`UG6 zdDDh%8vp><1?^zitjqXF}CCN99l78wD>& zm&RWmH6XcoXuj0$PpPCuUe#7RZ}5nf*zaIp$hnl$Lk%&Z;ffDsOkyrgWHU zOcLd}a$+5;!d6Z%n3UVK6!4$Fmr9QM#7pBzRU%zYV1Z0jgUOoB8&F= zdU(J&;DNGQ+&nUJ!q`mTkX>1Slk!g0%XGTMUOCv{;K4|sm-@;YE^}3VY0-X`)Y-5u z!Nb7EXU@LlrW@hP>hIt3($}Z&zwKWgMWC)uFJ_ndSA@}Ox*pUmcv+U(4&J9{XL;9^ zUy9Meg%;OOq=jb??Qgc)OUHxbXQ+?c1DK{^Q-nf7$#R+uzP)%lC{eUPSbvuc#$Yh) z1Ksaxe_#r2ZEt8{_CWCE>xOg=;F3_2gLgX$Gqt5*%L5=+{4Iw8Dz$LX+dC;tz_{?e zKbVTeu!X96PlzbZt=%+q&=wrDms+N*!m<^&`I&IA3Yr}3+||^8CgU3m37`ytN*D~T zJ;oFsu!+$shGC{BGiN>%G#DKXOM~4}C=btvqB$%(wmndep1@#mSa%YF|7KwiONiVx zwoZL8A5hykV-4;_kh6+I7XWvhtH;ejBRclYe6lOQ)U*j<~IfJT#v65fyr9F&*) zOwAK|GBN_*(JBI)*0Q^9pqGEf8|Lr zi@jXFYhGYiWj-tTEu&0!5&CZNrL&gq{3e6HQK}K`R_uCCIv!V1pENxk92cRqS(XRJ zNz18<_SMAY_xs`(hXjcuA4fZ>v16?(Lb;c8MNxMz{DUl3-X=~QsP>|-Gv+;-Y@_VJ zRGW#ON|Zq+bFDT_g7b383N>)DmT1av){vi;OGEhgNb zCi?pD@s_fPrOB3orEEVd@Yv!=mU!SXmaS<^w6KVQ#szv$X%_9zqSedIM74Z7sb2@Z zuOcJ^Fy@)r=RAR@fcVw^^ZE2BLc6`4ufm3I?m(9&bTBX=chD(WoqceaeltX5quO^% zGUUIqdW*BX3w|xWN;N|Cp{XA=vWO<1aBJM0;sY~f)eO4eO|jpn-YuJB-j2f`jq{l;OJ2s#P4G^=bo#{VM%_W|A8FaQY#4 z^vq@)Bzw}BPy(dJoSQLpV=;k00EDr=5FG}dmfQoRDP;yp_du)J{B&Q^9j zKaXCtB2@@h#>5Y7L7=h zA2;{2>;5+@Pyt+dAamX?;XXS?rYxAon#NJo~!CB^_>QKx8c=(eH7D zKTcXRQ%XN~ZXqo{IK_WDk2ckBw6FGm@lu9Yc1{Uq`>VozL=zID4sVug(e>5>2gXou zuQxlS@?zW6)KtwI9zd1ny2Z%are!wP*1f$xLbu+gCUVK*>CjNZue{>SFMIsg2B)>5 nacy#5bHSPmzH%3YCf74Mp8IDwSG_ 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye44.png b/misc/avatar-sprites/female/eye44.png new file mode 100755 index 0000000000000000000000000000000000000000..6b3b75ecd416410e7fd446b810b0c8845a569c28 GIT binary patch literal 4030 zcmcJSXHXML*T*-4^d?e7#7hSw5IUD05_&ZdB!CD3At=%mr3nU*?xl!ygP_uj2pSAU zLlF=p2uKY@ng|G9DS}e+;CsjSz3k%CcP zRPzx71A4*E{5ZO#B>Zh&lnh$}%LwC~$b+P)hj9sAJJX>Ly@ndMKJ@HA8`fE zGLo6tGK`f_DtNY1#K|M?qdMB!r|0D05iH_f9F$mZW*U~yIN@jckAVCAH zOn_{WOO`(oOXFNZWS@iJZ$ZcbslS^s;duZ&BneRj;D!)9AxqK*`(}Byeq;B$xj8sN8RJ}fu|;@=slZY05I}^$HS~m9gN5Vc@sMiV^CcO z$P_Nt8o;cGvX17P7y}*+wWW6Y?v3G=)J>y z%XR!ive9lGD{WV3K(x)om4t!v%%Zsclk{_LuPYXc#v|^WdL_|MyD&2)vqPsdr2?ui z=|DnLWlNmg=)RgsabW_;Gg|x;{w zyJ~eim;lhvkAPO|32rnWlOZ#lXg)mN%)0BMdJ7@m)`H+duw1~OxZ-lEA`&4T(^D-3 zb%DKu3n`OPo-t{D9C9tT&pEXHIKN|=@|vX^Bbe#+I+>1QMaJSFt_c{iBqsjs=xvc^ zV|wmHapBi-JSb7KR25?d>jbp0t+CLW_LW2GvF8lyQ#Ct*V&ra2qmjbhh#HjkJGN&? zQi2dAbss#&g%RM>Al68U{Y12at-Sqs_1Ox#hWJgl-Y0?d+z|$3W>xw?gfRA`o-xK8V>x16B78zz`N$Zv z8Z+H3REv~oT8Y_H$@(MT+K#y@D#T)pWyFTKlaIoBYe6udX6yHI;S)zI482^$U<<1`#;*YnUS{c zx@0Oa&o!?+&)}Y=sAu~y$9kfq0DVLy*#S{mK(v00iY+;+d@V=4CyLL+tg!My`oM8d ze$TCok3R;~ADKu$X_@)fuD^TH=ws$bx{W|K_88u%jyRmOK<+WdV>p4pV~?}Uiv$J| z1v=33Y6{C)3)!66zP1=B5qg6+wTmU)G+i=X5DG(=mKBvvma*Ed+jgUqOV8VcRTs6mf=c#(YlYq?f2pt>|4!St&opU`A?i@8{36h-2`fb zWJJ8!%VVxZsI*Bw=^4Fo9omq!C)ALrT~=D4j#M&Lva7XTzw4pPIGg3aeJ{Y0c|p23 zb3Hs^lIQcOnNxyA%H|{m_j6ul8JQWFa^rGTxzTcyYSl_Hp{U8A!G0%#L$AYB>YS7j zE}3$euwXN4Gf~V^%x9sku~{Wo=2a+I(4Zgq(x-SeEAPd5e4e>)@nmq*!uJzlus!si z_xIvWBQ^{}Et@z4m5p*t>y?VXua*$3gZc%9bZUho3$f|g%;{UHq&}^OgNAV>-}_j zuc?Y~E2LEf?%9GE%ng=mS2q+3#@DUIgr<`cOZd3-t7g}oKE zHJTKn?xd#pBg#Z9(ulYv+y{^A-4*W9HT$o866;_m(-~iT)uvP&wwGlgB8onu9i)e$ zj5RoSJCBz=@m=Z}<$0%jR^HThQB&0JeZEgy;cnrczC$dGF|(5u!hC3|xTIdAaFSVXGx);Bu^l0j$AE7tU-_fe8{S(iy z!`nW6tAe48UzI-%QXLz&_H#AdGj_b4DlNVJS32nW z>Gl}KIEcffcY{Lx+Gy+Kq0`Go938*C*e84rlx0_CxBcT@`;3^Me(>Dl7W35BNp_8~ z>$gKIrWpr*yDo$if?Y!7tmPQy+T`pwx;oZdz0v6#TAB>mHKP8;c~4o(KG<{}{rckA zV&p&?Zmst=A)OEwF86KRh5CRPy5L5cy2R=Gxt=Rvy5E47xS-jnNjbOnJYcPcI)Bve zxn0g<4QKDAfF-T{v;nJ*hI(f%)rw<3?Ky z(NVqoshi21$ivCm$=xyRG0S!_>G=w8`d+$~1-Ug(v~E^B?)O-Yt|&~FO68CzQb5F&BVfkpxFjdn0E0&qgI)!#uuAb+Xt z7Zj#3r(QFkkIzxxsclz literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye45.png b/misc/avatar-sprites/female/eye45.png new file mode 100755 index 0000000000000000000000000000000000000000..5e945e71802f85efd6346b0d80cf530b73288495 GIT binary patch literal 3984 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye46.png b/misc/avatar-sprites/female/eye46.png new file mode 100755 index 0000000000000000000000000000000000000000..4ebde2574c73c9767f7c9b28c2cb4e0885e4a82d GIT binary patch literal 4038 zcmd^Cc{CL48h=IhEm;z3EFod+vNK~}!^lXBC59xFvPCmwi!jOFh|0bsYBZLNB}7I; z*0E#{;mZdCz&?*fW+!Y|KZQ0RU_! z#`-n@&?NnIM*967bc4$K{e{Wb*x?2Mf{>q1)5VdM4FI#1Cmep}jE9fE&kYYBUx*1D z4)MM2L5oGl7rJI|}NIkpZni$Om$^ReM!gxJ91(A-#YDPbl~(-`60As*|- zLk0$P0_{05vR79s8|Vfn!195vAq^UrE^Z5Q=zvqFtIHHPBLkcy z?#%WAG;S*+ga$Z16y~AH!2-x(w-|lkp#e&}&)zctNIAgmZq}j(24#SpiM_iqsHg@+ z5+_R~U}Oby)-jPM0bK}iY8Mp^1a~t4x8bV2=GRl@oO4q9N@Y}P62#ODFpi8eehl{Z zvd1JzCVZ#3Rh$nvXX?r}1!eFnV3asMt?kz#2g|e1c5OG1#9mG!sU+apFUc%4&{IWR zT&DJBx=Va@0hsU)BkxH=tB#^I=+WMLPfje;d0b@4xw#qVUdf^R3gpZW+pqcl)W#q; zi7+%YGd(?M+5&TQ?ywKtLp5C@+V5Wd9;Ugox$)`Eq!>ow0>+4L>r>PFb@M#I?gvbF zT}EaTjdrS8s5?TvA}uB^1f&%Alr@)Mf_`TFnnIpPEbPI_wCwLXm>B^hba9uX7W0n`1!`jR!{>S$3RM?!v@cnqZtT=F4co>rN+2!(oz9T@^x7 zPSB6KLP|tykEmo{cG)Jo*X&xp96y{Hvl}JrFidoM?Tm+=g@yM|9#K3w*f&rIaa$@*~p^UwY@helJ5S*Crk@9CU3`keNec0GWVEs7_iEe0jYpLK-c2#P=8$n$jbeE!}z z{x*c1s{CU5Tn0ymj~!A9FLj#-+rgY-nj)SeAO%Gf73UX^6|>l_*>xfki!R!RmK)kB z+D;WQeM~K}E5@B!v=y*L6=@Vk7o!S&5IWDo9Cl;r9h%LXt>DkBb6#AUs%wR?xbjy8 zN(+0jl|yf`D)0|{M z+FIDXG47R)GfY(AxeWP5q*eg#Uw^l!(;ab6RdiI-(=xlSJg0Z0bxgUa|&|So? z_m6@NBUU7R6{{FMg_U$f^R2R zepY=flk{j=C-m)l>O2&M?B?tqRGh*e?mXGziL=e>HA3;B2sa|uV&Y=W!aHTtv}Lmd zT1VUKr%nAg{4Puc_iW&@sd zIj`~3Fe|tf2K8!A6zU4a+LsMfROba0Z#u8=X@Aqc{&-4zN>g=AVa(yudsSj}dv&K( zvrqP=$Z_}`QR-!CFqI4n&?jh6w6PdHjN^grt>D|j4GB8x6t{1cLrZ$`IRrf(y~Oac z@R`OkVUPANNoB&DbLk{3$&)?uOxWlC4-C$;&T-9QtP+vYk@itK3BEDNqh$FsTn(H9D=b?hfz!kT|5tRWm^~S*dcBYggZl z?<}oFPvRz7rb77Aq3suZgK|kt>yZV#MY3Gd>Z!WsF_xzv{-(z%RmdBEV)byqi3H}L zCZQ&j2$ZZsjv0iXmpW#-YAj_D{NM|=PB}>Itzw?^4B@UsQBs{boB3##dNyz7Er_>* zmU_K>!~<-SAFNo|A{mcbK+U?}>MV7OtlWEhEv_1REQR5nS5;E!K?fOTJS_h+;+*7w z6hkG-&ECDCE4D)|wIusg*V6l{4oZ^hqm{?hC9Wo}i3j++C^LH*A>?d*=@qp~O}`)t z^Ayj)Q&DH>OEq8L!%KPhS(Pl=rb*9(e_98p!g6r^s}T3id4X(I(&&19&{tk+e_ytm)@c1& zu+Qe(&5d#1(Xi_hyQI$Ap#X{HvO24}OY6EzdPDHh=sq3Cy^+C{kvmt20Xb{r5u;7| z$cXMe>_#F7{9s~6VrLXv)MEB&Z8fz?o$I^vI|cCW%iZGHe0xv!I?MTZp~?Jpz*tAe+d!sg7=*= z+UmQ7c1H?#Dx9zKwrk%RmBatm9fJ9@CcnyH`%s1_bLT_0-)_yDH4G}HJ&wQmqgR_s zv7~rGIRPCVprO^dSNYv_}fDmm?xfRp}`=j`Hl#2aYJaePmxmr7-~PG#??lBz1X z{vWY^5B^8we}SA1Vl(mqn(u$se-MZv_@}P>RYeaR`1el!rJnfnp1&C7|K{mF-~V(2 aDwP({4oV!Rszz?_LttWHsb3Cr3jZ6I*Yvdj literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye47.png b/misc/avatar-sprites/female/eye47.png new file mode 100755 index 0000000000000000000000000000000000000000..ff1a1d1125adfea72f2f7c6bd00196634a1fe371 GIT binary patch literal 4260 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye48.png b/misc/avatar-sprites/female/eye48.png new file mode 100755 index 0000000000000000000000000000000000000000..21d967db8256a548b92da5ca49f3da628dc5c3c4 GIT binary patch literal 4284 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 Gg#86Mc6&tt literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye49.png b/misc/avatar-sprites/female/eye49.png new file mode 100755 index 0000000000000000000000000000000000000000..83bbf1cadc9505bf5b8271aa371ea50cccc246b3 GIT binary patch literal 4345 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 My85}Sb4q9e0MsxnaR2}S literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye50.png b/misc/avatar-sprites/female/eye50.png new file mode 100755 index 0000000000000000000000000000000000000000..c17997c25d83ad950625e49310cd0ee510d1d426 GIT binary patch literal 3990 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye51.png b/misc/avatar-sprites/female/eye51.png new file mode 100755 index 0000000000000000000000000000000000000000..7d384016a2801eb72ef23ac89affa64fc8cdba77 GIT binary patch literal 4006 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye53.png b/misc/avatar-sprites/female/eye53.png new file mode 100755 index 0000000000000000000000000000000000000000..500b4474fa9c480a44d1e8db8ab9cb44fc30a2ea GIT binary patch literal 4011 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 F0sxg)As+w$ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye7.png b/misc/avatar-sprites/female/eye7.png new file mode 100755 index 0000000000000000000000000000000000000000..d1df302cf3077ef6350866743083050f1b8e14ba GIT binary patch literal 3712 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgF}}M_)$< zhK>E)e-c@Ne9i)o$YKTtzQZ8Qcszea3Xmb{>Eakt5%>1)!EWhL8TJpYGDRos1F|OG zV`X*xu;`Ja%}nQM8zy+`@2wJ?xUNcIEvtX%M={0itm3zBIO|qtUZ1ut%k^Wxk*Q`C zD?3!{osQ3S^46A6n|puuo>DvR;@Oq&pMIXbC%@iv)|$0Hl^q%w7@1f&1QbRYqk%A* z5=hJi4r?5?-;RC#wQ8-U)m%TFgbx|71bMP7m{=}x_8fnl{QcYiXPwEV7}P+7YcTKMT#_R*K}?OXeU@9&L!b9R0E zyXIW(3EbQ5^}UXFR81-U`*S__LZG&j^KP-JO^5?(J9pnIc2DignU9)R>tDCKce8fe zj-TI`Uf^Aw%UJYmdw;=YM$q z-N%2m^~Ltz+bgpxajUMwxxfEB1Ff#Db*-$8ye?fok9%!9gXgy^W(JL4n3z=del#+6 zsps-;&{_OGhKXgGkbr`Bp{jjkgNnKtBO_BFP>GjOnhc}R;|vid7AXM%1zrVx!&Zh! zrqe4~IM#$YG_1My|Nds~342~8nzC@{02Nf;1-c9pr%X$>+G{)wj+plk6qXknRTkGS zYAjXoKk`h8i6u-?!69tnzx%~pP|X#br@bQ>@AEvUUv%4xL!iRPfql|--i5%pk^{z7 z1D^}~BIb?!0ty1U3z$2_)|$`bTQYC{YEFTS0EY&Xj@U#kU|gQmWZ`%MH2Bks!_A?< zvC_iyLLj1rUQ(n-Ly|L*^@AA47@ z*OtA1yr`sSg?r?6`FC@Aqi+2zY&-mL;+)rsxgak}^dCQdiZ|PC{&}Uo_4PkXw(b0U z>CKa)=2`OZ-|jKmU6`$&68kh+TmE^1fyJE9yoNJ<`rNNQUOnIMEF{+N-o4GY)_wnd z`zgh?YkCootsY042BYnx(OfW^3r2InK;?o! brvD5F6#xEycIOJH7s=r1>gTe~DWM4fy!t3$ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye8.png b/misc/avatar-sprites/female/eye8.png new file mode 100755 index 0000000000000000000000000000000000000000..125f891f766b909855bf84af68a7cc09bf4a0aae GIT binary patch literal 4708 zcmeI0`(ILN9>)(v1(_pi<&I@i8P&8#Zf2sHc$uUWb+xff!^Sd8QWGyFr9zEPt(Hm@B*5*F5ayyR2Wes&1>c*1yMoWWA1Ld+wLE*yZ&%q=RD8r`+T17>v?~^ z&pFSz;qL0By~=PE007#D@Qxk;0HH5j@D*SWwbJ4_c!Pv{IN1YvFE*n;xUi3iNw8~iN&On`T(D``CeBX>g{QSrZ^u7pZhfO0a{XK~{p>65zBxCv6^s9E zO}yf_ZD&e%`|j_@_P^3`^D~i`PS|W9%H3>354f>nt&QT~NED6=K%lUthowdMuW$nG zIy5sglf&cj?$y`V)1_5aRqh{1WaX8}y!v|Hy{@jV>jC4f%$k~-7Uw?_B)q#JFCvEm zPM62j z;^X66g=;3~6=e)@GXo98({7%WAqt12qIs5XPU+|@y(quwi;+GkPZ3@*4Jj`h@8bk1$7Sjr z<&^I3Cw0p1^UHRja5Fk+h+gRVwWwup9%?515pX2rj^}MOJ)dGm>p8+I>RJxNdpnHj zdhvHu!SpJ6E#IORW19XoW;ZPrN127(8c{um;inh_R4f$gNbPA!L~!{;7~ZwWdp!|H zP2LOBzm8atdVxK;69Uc{FvjExEBvw7q6T9@!v%$H zJrjHh0`ZU_T~J^Qe#)YsnhS$n2kLpI`grg1R2=#K3)vVH%H?lL#ep&OvEY{wpT&fI z{$0W@sIGSQGNB$46#yZBFo<(Dh)ofp=HM)|E9)kj-wno>H)YSNqw_kHzQHLyDB3cQF|Q4mNfqO?5uZrWK=~q9VQcCLNj-vth>%6z%(h40}eG6mmc!H=bl_0loq%t%VYU1j! zo0d#4?kpvs2(ljti2cWLR5+deKwBTr{$!%OA_ABaJK-eMj5f6qpJWl({CBJ-t_#rq zL1_USLB=M0hGwbsht~6aNh~;=ZmInQ<`2r4p9{AL-ipG3whCtAxO--lYP%C~Q#x^u|Kc?1m!Y4JvS>`LFKzPlnOGe47*5Xz zJ~pliub9c*>b@OmgJYzmhy&*}PRBLU!0Mx-y(ebh`p?v47t>5|4bUFBYUI0LQ+}L} zPCe7aacK(q*&EFGX&nN|nM&(HUe5H^OXwn=UAtlCo+Fu5bve{I*k^WsyaIn zQ_LHwAd&`khS93!n^)qMA!D#I%u|@So2RPm&l1VuYTf(5j`Oi07y}S-?EM;;I4(0Z zG6&c(Y8Lgolb`Ca!FuM_N6A-uAYvm)p7p1`KM|=_JOktJdyo8$;@d5J*@VM%ESioE zuFbv%E;$Inl=TG!{B)K3<(2yQB;l!MJJ459lN<&C752Uw_StDy5!^|QdqoC-o_JtvMjZ?%1K-^fRNVX$Pk z)kPO~gATH`Fj}*?|FpsMau#-%yQE-!nsOa#ubg?}oz3ukW$n~}XKC90fy1mk5fH7` z@IX_%w3d*h&Z^E)j4@^KWR??YJ#-p6WQsd5+ao z+X~(Mz*6=~M4|-gPKstYy+W4G3PQl?$4u?1Rg{gd-L`xdD}w)zi9K&>%J7K^dwE!a zNmi08m`vv2@g`yQ0WB@9qb<(tAU2D2Sx_A=+(t`>g>)2$<+mdl4948Zai41=;m2aK zh9}cEb{LvIicwGUDcJ7Vmi^rZC-o0AMz~$_*vXU{=(hSqs?1)@}oeH~J zN9V^~jRJw0GQTEryjL0|A|5<=&|aGOOn2#PeCZ^zbR1i%f~6|>zp8?J%jdKhFH*`K`n7a4enzW@LL literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/eye9.png b/misc/avatar-sprites/female/eye9.png new file mode 100755 index 0000000000000000000000000000000000000000..676440f2dfdc86847d1f119b630f6d85b73ab903 GIT binary patch literal 4725 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໏+Y}Y)#p1! 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/face2.png b/misc/avatar-sprites/female/face2.png new file mode 100755 index 0000000000000000000000000000000000000000..83174dd8a11859df6350bf4ae1d1505e4775d24f GIT binary patch literal 152441 zcmeEt_ct8O7dKH8El60sMhT*`dW}v(5h#H-UE=ZI-SS6xcy(CyI7QyO^ z#bU!+Yj@v#-+$wMf0#4p-aB*7y?16lckY=xDNoJx>F%)KAt525Gc?e(AR!^m`d_1_ z{Kt6NnX>r^=}1V6lZY;jLMJlQSXK%i9jN4-tuQOEXDq4=~;AopYQ zAFjq+6ZA7{*~44n77P6qsc)#fhS^0@#1|)vsD7pg6Y2D{c*sd_%~B`psoxHX#5cm* z%EHPYTJYCVPd)6TS^^@D@F$q)GF&H0-X3WSi~RX)I(Awtz#$HOr^ITb=N95V5ZoU@ z@&8%>Z+YT$*fFkVTEhNPo)~fX>3Re;{Q-S_gOfbF_=LwpCOwHLd^am<_g62N2J9Jz z|GF5ALWY+|SjHCm;EZ4g(C!*y@5z~1?~gHp19XU)=vI#Ux0zxS#6I&y96oE@K;D5g z_MGk#!B_lnOdGCf9wHe-JjZ~JKre54Brj3DWn&J1MvylyM1oNa;tWGXtU-5uF0Y{7 zTZ8QQ$6&RF->$GNV@D1R)S2Ta$FWZ>p_$QBpJM17Z`3hrgdQAD8+M6M8wq8{U;Hl^WdmM=40eH@J>;= z0w&@NDHf3leh2S7Ja~d5{y|@-F5-<}wu1jIpMo3@J)^Q=fh<7gs7;e#{`YnWjsJUA zvO@wi$L}0!zB!e;W2Lt3jg9nxToQ4;ABd0}_{~WS7Ke>kpU3nbso`wKke3%&TrgM6 z=z-d!KIkqi9P48SfgwAtxLF$yKCGb*x*j?FVufUkIUu%Akb^7guh%Xk`}#woH!u34 z)F3mhkw?nWXCa`Q*1nr{;*DBhU?~REw{%f*vfB&|E1ym9#1}*dVbQ8<#BIz5YxugO zm!rdyKP%=T!l`8Z8MvM~MPMMM#BVHuqHodat!C=b=lPDUI%wA(+Y{V1!X7_~P(u{` z2RZA6+2c$dV~^Y5H$B)b)EEJW1S>_y#>OneZ*I0&QPL!=sPnqX$Axa1KA{GoxRF8dzcb(nP{7=w>qvqzV~(IW`i~+ho;u^8xjh*y2UO%k{ClGTyJ%#MAv{AxoFV+nP|h?w1pHdZ0Dy=(&H| zR{T@-lA)Kcd;oXaWw)*o3-KpRNB0R~260huVn%IOi=fe1g#UyO!nU)f@ivjL(Cw(| zBZZm@2`WdUian3tq~E-TjQRMN%R{^ycjxVY_3Zs%=y`R5YikV!7q)Gx_te;VO8A$` zZ{c4PKX&dhO#AGGb@oL~C+%VJha7Jh+FPp8{(a$QSWrw7raPiB!3R@X>^zBg8X?OdZV|0YQBql-@dF4?4s{t}8 z8+m}xILlyllXy-14GVFcLV7@&^4q78y$CFAqmKio8wS}&mv;~-u-7kR!q$@zV>plA z7`*8^@(BLNldi=Ifr}#4pgV)oTP<&MI~SYCn&$A1Ow$wr`hpgoVu z|7p-03v{!lDP z0uvp+?&%N&1NYp_9rHwCzp5aR>y9Az6LcQ~ZUp%{nrQrJ4J!sNfnp~*6BT!5QJZQp ze(M4-1oEU513_9j1Rg9p#!P(eMxeP1Lb_tr<9$5wC%f>Vml!l2`x7^LaSp-|MtfLc zd6*(FmK*X5wJKXaZOe&w3To>WaJ7F)ow&Nv>Lt?!z zm*aUrzk0^($Byoov1&jhVWa5YlR3}5q7#>6MDJ_dhOsB!u?RViK8E4z=luz-osjaM zgdKEixktkriDd}*40mMZAPYLJfZrU{(;%m8|7R%t2uj?Ijl_LL5KH}W&WF5l-^aE4 z68*-oi%_wEeyfd9&Qv1$znGoqa{LkpPcKpjToix(O?ux|YBU^v7WZjnV_hu?TjmIw z0%T*c0BEmmB2fA(BX zWAV_*fw6*BMXD=@zEQSSmGTG_*g0yUDkBFJB7!zHUr7D8K)xc=>J>@_l zbQxya6ONf}-;vdjHQQ*!7W+W9$+pG+Z7L<$D6x|#W*T)ZPZ_hmeJO1aHtlml+mI>{$pLqU(G~av<5vHyMLnW?)rje{`2a#-Py^DFz3YmJC7?k7x^NY<=6V;q z*ts|6Air|~J*37h0m=c^*dVp#W z7slxnf$wB#{N%F{dBP+72ChHq4L=PnU$cL#!#3m<()v@j5Pt{6W-->Go0JRag)mnh-(g%nZ~<--Ks^uJJgHn`-QO6fv=V zw+uB}2t}f!`(9ri7-OQ3{5nsLhL&9kpvKt6qgKV9gE=$=VHdmO(jSu8JgxWFCz9d^ zL2EWkdFOV>ESr1{X;o9 z4|`!7a+_aIxHX1ShDjFBhQ~Lf_SyivCBM`l>dQ22^EZzu1x7ilS~26%P6Y_!s(@a2 z`ti#ka66hCsHP5T`~b%75j(-1pFp0yCj(b5)(BZ_bfX%w7+2^sW|KxXyE!eNSuxW2 zCc3@HpH>j2fC|&++y>aEog@X=w@yzDZ+UsFb)M8)m4Iz{mkmoK3#W8~88_)P6nMS3`67_A9WPV3 zdJ{`a;Ns!sC`9@SY3I@919o;* zeSHng0=mEkJf)W(lO?MN<&FpKt$RoWj30HAiwCZvy913pdg{mgS|8QR&b(L@UjBj% zXJCV>e!`LYWSo^Bky2?XxGc&OJsARDYF6Qilse0@K@1qYGDKs5gq~{b&anJl1RSRV zzjj@qfzt2z{0S{Xl~oUnDQ8V+6Mp-Y6XTN9&#&W}-hWFTOrBv5ah>Go9QzzVjp(Oh z&6I{Gvk!@Ve*mZqFpRb&tncg0Qb-=_#pmvzBQ&0*JjJZN`>;pj@~>7aB# zz$tMxH=_`m%qN_asTG@^eFbDGjcC@iTMM(D>`&<4$3yZoEJ0I*gp|xkInmULUT(q z=7@|TI*&b>3V3%6;J$G`Fqr-vFrfKFH*C-%&Y?Ej>2ppxwT)MSG)cdL$3x{r4_Y^Q zX0BV(UQO?Z&tqKwiiAG$cx0(YpEwxZk{{Qc^Yv*Iw}4z5Q{#g|Q#zlfOKB%|1A!$s zU0^A|&xdj15xcx=p0sZrR!*CBkZH6_G2?y*LYP6|Cu&`Z($Q5ZTj`1b=mB(Mi+#5; z^x$=N3vtw&y-GIO@^>nVRAMQ-8bZo7lK}omN=<*3*0`D|NuTGE%noj)tYeb2pXwRo zOF@G(NUs2?1?F+5j?hM7`WpH?jPwV#v6S2b`HfZ!fnwAHWQtA^>t@!Bx=1^iUZ4DwL(=N?Pn{;Sl93ifr&dWKxa zYtO`0Ic0uVcOjYS8oQZ_;oY8Wo3eWKK+~F8l}-0wP#MzEv!=SW0}ADJY^_E|ZFk?& zwic#34+0ai8C0*bVP7fVF+TC*?~r1AF!^m!he@e@eCb-p2~2bG&W)!o2*4=G`3B%h zD^O0Vpyn9iUwN^3OG=${OQ3ScHh_~^tJ-YNc9eYu6z|C){n{g2JRv!fmNt<>r*Ke$ zZ6fX>v$bDS{(N1#Q=WJ8V?Wo(h`flKvVU(dO!op1m?p{AuRJS14Op@hLiW!%Uj>j% zSZsa1^bhqcckCGV>EF$iBw3~yk2KiRp!d}sM?16jP^ z+ABVVl0mt{+KK?J+)cgI_!CtraQ$#;%QHFMp- z3r?fWS?+?aenKQV5>EvZ!WIpMwJy&Nlr!wsg(t^Q2RpT!Mc1uQFinw4 z;=UU%I985Lr|A{vIN+CVzT0h=-~Cd6S>3G(&7TjqHYlwqg}m}O5^1S|t)EE)TgqJe zhZZZwm6GmPm5kq8qST3xD}++h@}&iYl_dJ|s0&XEz@$4u9n0gPnA8yA`F;_~cQQIl z+969it^v0$1YL{7E5o}Ah=4(W;~_7A=?+#3^!fg_bx7?hYj#t1%fez5%VdRgjPCS; z#`*f!&s)K-K@dtcwh4+o=4B?zOWBE?pO3Z(!eZS?&~hJv?c2V98nG{ccvU@=Q(9YM z#k0b98uH}Uu2TI*&o|l@nTkkpV#zb@<*i)2*)EmPT zp|M<#55<*>y7y4^IzIY=+PBr63YuepF(sVKOy2`OAZ~b!LX(;Ly@6BO87CZ?0~hDn1IdL+Yvf;FnsvaOV%rNZS0m z_nUXf5t1?*8=~dHK8?)H24)LSpm(BW+~U|>I4SA-X-6?; z)kd4@)1!za*AYW<{`Z%l8#VbnEE`g{_jbWAr`;~&_NKktuu{K-M} z=2qgvsKAYbxJSNkx5FfE?zB0jB`-cZr4u?HpptY{-e+lV-$RRM&%;?1M=6Cv5DITPx#0!CZ#9&uOoY@X{q>PWpnd8+IsC8PW z;TDw>iPxi{=XP6 zuO9!H=N*aE#PkG3N{idvk|j>WxTUZ(s5U9^eacC)?s3}Uz8_fcb0KE{eVv(C-5}<) zRd1Fh@566!l@b1H-kJw@k0dS6XI`l@Cpchb!LlQUmUlMn1KN!@(868Bl+N`m`sAWf zcT{iO`z_gjl5QWBpL$nHR|YYZ7kXi)7oK~(q|8jx+GW?0E){>MCWS6qkQN_Airaoh zK^v;RYk||mWVk>^`{MqN+6Lt82dbGKk|~Es%>do7{1tYDd6F|v;t2kkV!PRc()}O^ z702sEQTcL~-MDsM`GT{L-=AI<*_5(TPm3eh-zjA1>Z{&meaa@q)|Toaak)xumALj% zy#(nyO`B&q1_Z~;l%%EmW`I`V59|buGlJ&K=kFFsa#|O>dm0%?aAR?^^r)aoaIh># zDnDA*Nm6=w(bQBFSHd+8`@XCSR~5TUZOm1F`S0GbKqS1-IE|yKq0C8s^puo}ndN?X zGhO)Bv2K1SR-1v&wAIu`RCh6pvzN@hoiqAAz=K{TYtU&9@U~wg_n74IS250b4hMC{ zmJkwWc8KIX_b)~Jp^XBg0z~15)!Z8>K^OY(i|b4!=69w5s;CFkd{-Thm-<-)0jmr) zNegDq(rH3$B&X}ZTIv1;lKS|iUs^05+qPGvLZcni1ZIryzzr(N)teo+YCCs8+ae-_ zE!u69w4-@(wl@QAng>iUUbxlL-J#U%w)oZSgu=33j?3u{pu`@J8EG=p4<_?4YFal9 zgN1^)$AzEq9KdI-fHLRSr;)GbB%U--ZfS3RUsa@Svofhxp#8>oUz~X=BSduQs7j); zSei6DFf+6QUdZ3|_vPpMKeh2$A?HW8I`5dDT$8^REOv67qq^0gNKRd3S@-9*=Q@;N z49y&gmZ@IQDpE=+mB;N=WLGf`c5VF&gr@ru6xMM9WOb9*(B5k*jnjVroM<*;yfp< zdwxvFse3&cy^Ix4$gfp`C82p+y;?Z}Sm<{yrDGP~vy^{&1Hx(AhCLe}*&wZI%9oI; z*&DnFT66jfRQg=u-9)~=%ubyVTGzw^o!UPVj>|uUqKn1{mz=y8o;=kYg=xzq$}VY` zMgiPkQ3wCVVgIQ0aqSpGS+s-HT)m7x8~DAy$ejN#&Crkxn7t66GeELEyYHo8mU`q? zSoe`yBJq3nt#04{8tR74b$$uiB~)?((k>naeKQ3I_8)x!<_!ist?4d5Z`FS7m00-F z63ctf-H?M}#Q;Fn63y#Ljr7%rR9iW5jsK0acV@&V>1>-qs7CK{iPE~IAvxZJV<81t z4&jGUej?wp_s99D;6G;A)4v737xQECtMBL1=6!P%$05@31I$MeQCqAHICx6G^DMfS z#ZUfK&*j3Coa9n!wW}ZI-$%mIs!GQg?R~@Ee6LAXPSN{BGLtO-eW9s}g}?Qw*zv;3 zlgJl)AmFm5)p082&%ub{6cSf1y}3q|m(*`3JM`Vl?6@zjz5g{a3%+-+oYjhft;WxZ z1H7D+cPzftuKXei4u5woc-OksXe?HSmGA5Cd#xvKR-ww1+inw@B8l6p_9{4$y_L{4 zvf~2zHTesHSMKB_=A6m%a+MHJ3w0UKR9bmOnS#9BZ3=Q4a^6?YXB0g@aN}tt2IgA& zElMY97$~|BMOKs3nKS#?LkRjlx*DCj?dCX))h6Miep)OB`a*&3)wq?aT6H4pqZm|* zUb$UA{rE4~+XpMyhm}+xyOGm6-V$spC3{!7@8zVnTl8O9%*aNU6|ejG=@|T4B#|(! zDKn$u&G~(UdQvkEXqxD~!=cryG~O>%QJ2qNII760nP$3~p(#Gc|GRIcTD3q%L7Y-3 zo{xh0pwcOt(=>kNlY-YajvFMX8IWE+;OF4Iei zfY?91QBVFhO}Yi}{^jo{H(KKxT{9?n*Y$FqY;AI-_P2aUzEonKnmNQMJizCXF*7B% zNwdyLu zFEIsN5A|Js9J6aA^@Cx{4{f^WVhi;Orl%+wMwWW1bo90_wm6h2|#zG-XS@)_qG^E;-N5Uvto(~Md5?v1OtzXl392%8$6Me}h~ z$7Sc@zZ`tUn7I5m?lYVIw!{p|OoUc&)i5D;bMks{?1@WIa9^A7;GL*uwmnB*7R>gZ zx{B_h=sj|9@AZLIR>BPuM!W(?T`Ix}wHNfXkWwh%@SYs(En}Sk>1;fe+CA5frd(g{ zmV2ALTw`^)s)^F)>k3h&{Mua9i2&hyKyeGvj|>%XfkZ8@;lT!4DH;TT9HgBSLVj-J zO<&g^#c+S+Yae$2&ue;wyLe~#}lU@K>yi%bB& z0`H*^Te#(6U|aKkQU#Tz9xL0E>yV{S+xyj_xwJxYsrOD75^B>)>RJ?zQJ-0ue*o&` z-<1x&WIUK8IOD0GQhQLU(}~vwMO-B++Fw(_F9DXSe?RZ1zJ9mT-usqjC5bS|| zE+MFPWx((G1fT2W5TL%oK-+&L{EZ0n$LToBc1(?7&|VUjm$VNqqJq*NFPVr0&EUx#D4Lv?I+A-Jb@zREIv*+nxdq z&aTxM8$crNYoUK#Q%c#?{+4}5`)VeU%F=dDtIW8uT>hhr-$2ZwTMSESeeKOpx48%b zki+f!uV@;C8(uH2|LUC-C|u?N{2^yot#UBt1VYtj7%485almJ3ZKR{xVT&DRqa_$J zZu=?mWxK|5wZ~*)^s4s(^j;agI(|tT57@ww_I0sx8+^teI{24`KyC8E#gA=>i&M3k z$05_vGX_`XvBWR}{y$;6aEFH&4j+Z_FQoKsg>W0 zkG3)-oXN8CN3y`WfyjQ>`s|#7Q5ok7=`^Lk_p+pU(Y<;xy1#2&Ix}8%kDxT&7=Et+ zVs}L>>B5}z0h5PMmmkyq{ypiz_tE{m-)O7U1WV)#zpr(Z+OL*WrDZ0^XX*}UKi+N! z(!OR$2)`E$$5-n9H2*0<+df0*(~6eq)7>{=XN8kV#3%CA-HfVjJQm zt{y_5gGOE+AeW&8B(#{Qfm-n-w)uxI9(YFiJ75(1&TOFAV)#`(7`NyjGYuoA|C7P+ znf?SEWI{Dds`_1SdzC7^Zh=!szDU8k-jF?|!W7(_yj3ad-C;v~3RzrWZ4h8==IhK# zB1A&(Lj&@C{%@VdCX2O8>F;B_jP1+%Ux2m@w`r1SYlH1ovg-cx;-ruCWwZNJQ6>Tz zbt`86n1%Yx#}5ODl-^n~`f~(Gyt@?pnAv<|Bzc8bbW`&nDdZjC*+hcN0f=Wyd1y`$R zAF=tL$bTSEGG}`yg}gA5M2>eY)y$6$?8h!M=U$Lfrk&OJ^i@%5v$j{a43_*!dZTHr znmPAbg21d=poVg)qf)>5W=!0{!tpNC%!pn8nC;ebwBp`}AUQ+^*z+uGdIhcO69aGk z0p2W$8G^kmRYH<+ITmU*Wi93|zb-``|K~)}Z>%z;`ncN)zm1BR2gK2pHVo28U1vY~y|IZjry*v-Nei);Y~-+RJte|`RX z4R>)Z(>yrtp>sFov=`h7sjPUEzIbwJ6hjhtro2Hbg)%EK)=~-~)!-?3oFpLB*D91T zedxyZdwWm{-BtB0;-Z~1>Z1>hZ}nTj1bEYLb}qOyyu9;|z~|%*_=n8BUr(O}egn3| zkup?2EATmvdcxu|MUnJXyKyS3X8FM}iz8L0?8bHLBV~{P-b3{GOzIhOLx@wH{_rhv z1{V2(W^T|q>h@-~H?>Cfe7CP0PU(=OgK)zEs4G2Lmc68ZjAi`|Z~5J#u>}m~Hr^HD zFdE=YV*cv3Y-=o(>=L+669M3Tap-)%CylyNr-xi}Kn6t|fzxevs+; z&&L&G7EOqC4?R2)fmz4qXb^TlVBGeTUQ}1fe{cw4B=$TdtmpKf<4Yy6xf82btJfZTKoP5oIor>ShPD$(Ja!A32``*n zr$3zvI*kL;f)Z==h`~@LK2?VN8vX;Qlnl5df{(dQcRZz0qJgNiy1nuDt=yL2qc_B7vpf^&7lHB6; z5dELBVivs3GY-K6%A_B(BP(tB_aEGkKzQUtD)he)BAgoSygiX)| zx@=vUmbSIO*scQlVrkv>zi8h&)G)liHpxF?>lDASd`asx94Di_?U%^tt9;iGkx%u_ zJ2)-dH{A`S=F(%U>6px)NTE+blZX>ZStGxP4c^bRj%`)mR04CPW%I9hWck! zNfoKmb%Xvkj)AJ)BJ%|jUllUsCadUsZdu+YXxLB(@7;?Y>&VpUEYw!cdQutTJ^Wz} z^dxlF|E1=pMvK7LN%zLtOlf-m(HUi!c1>1HcEc~uses?Lm3=cJ%GnCbu%ndmanG(V z>9HQnjXHh$bnnty%1c3IsBKNBLM72z#viX@l*sgChNhj*R@#LamGY)cYUwD>i{S%H z^b;-*)^qRY-*eVTME)l`H`~l}(>I(7Y>~d!eox7wT>e0%KuM|K7iMMaTG`rw&yH%M zmF~-{_y;DyalXZq6{o^#T|(hyJd z)V*EEwnj~vq2JC=v1zhzeMXZMHE4PT^hk~>*|U{jh)Bjag@8pq)$#S z<%;sexUb)obf>XIP0UD$@`Mapx63ii_YLREcRXadrC*sgp|>BZgNFVc8CH#}QsUjQ zY{pJcs`DNBRY!@iOKYn0{MhsM*pq*SJ-byV)T<^#Cfa+s2|6@27QWdvyhg1yuP@&E z0>~%}AqXGgb2j z$QgiLnA@cw*j`zaf-{c%o;NKz$(AbNbz}BXYFZqmP*w&^W`^*7wxjz8Vvpr<`SenAztjUx35@|EWo*vn0-|OTQHA7VfPq81CeF9yMvAm}{i@l!X^Aj7$+%!)5ZT*oZ9a-Xd?kaEts4 z--(#%oc62;(Npur`Hj!G;}1l{cC43J_1mOuc8;Ir@+}p{d^RAP2*n+x`*;1#jJfJ2 z(j4+MbxbqULu~7ha<7yhy|T)_?88FvW#ym^nB#?4+QZQVoipk1Gi{R4un%EK!ATMk zlh>>mLz%T&hFXD_LqXvRG^I8&_WmpIfQgBOvKU#x^VMeRCPrjb`kwNHgl&yR+{t;r+qY%CaR&Q7sY0lxzL>b> zTCF;d?8j*hNz+jIhI$&QYF69-z;;(YTx0Bz`iMG6+)?t6s$2cnO2Ptc@F?}s-_rq} zGd0FBi_thqnVwV^g;8}MZx%0e2-_3q_HA{V6n7K9)a$QKl3%*Gwt(?$o5ff$;3iO2 zzFW|%<3z=cmh9;6BiT6t+$4AVkG7SU|4OQa=&!zmq|*~}#Q7Tw>UENYR`-cyBY4~U zx0l2!1gfeMuBy0D6W=1!X}U!pDzWiQ(?kb8kvV90kFi&TmvG$GUGoxIq)FtRfIn4mR zkC)T1TB~HWeQ!!m9D5Wb@U!8GFJl{e?HN$vCw#OueUYKaSBCq;kmyo7t1BPJqEeSt zve6dpUX1IEt3j3pIL^jv6HC4A?VdKGe#oj_Qc;V^M zk3??!+DwcgUUP9FdS0-w!q(V*boTq}T}*I4`-%*N2@7M)8*mryKnCN0fcJc|q|&F3 zXEB`5DjI*al+obMUYD2@hRGBMLmZfAdno~y{1pz zlsowwq9L*}uUoz^dy;dyrQgK#X=J!uTDSC_5W9tp-D8vLwMf;Mo3(V_YYW#VFPLzV zA%waD{tk;XRury(do*^Cl>9E&{M|_4)XDE8e@?3Np?@&;+s(23FYMf!8Y%2}8Wuws z$n4phy+_3gZajOBZJFPEw`O^fpZo|IzS-b6XE9@zKWFqz(-i*~NrHJHuZ)~d@7qQd-{kK$+2H!KE@waYt8RvO< zMzD*B_M=r-{xCoE=VZDVWWF)Hj4=^*V+d@hcYi1K%9mzWne!KTG1|8F)5+?3>B;QT z*vznd_tL>4hud<-t*h^i-x_(KE1Ab9!$DK%ecuf@BQm)5q1&?VjV z8*a;Z8xxoN-5~MrOcP7wp6DH@>LJ4<-<_{77Q$Yw<xlm6tgtlrH~8uxeQ8V9kk@Y5W6G)i7?9$gK(#R zzux%2ck!E#4gIcs_3gd;xEKN)U)-({Nu<*#o#LDlp>;iV`l{qI%rvr+-IE^GVinnO z@ZK!m@_}HoL68BBYZjx)c5%Y`pjPswIrWcN-KC`XIT1C+K>Ca~tn?l^mOZ)GN6!7@ zsY;T5mL53(!eG#!z}{@6k;#|jlC5vEYuN`*Z!_67MO!7N_iPuP?pXl&k-Fyq8^R;^ zcD%4f`0-@*lDMy+J2MtU>-YC_!2YU^AvH_r@1B+!vEk54Zq^_aMtk1R|Gli?4}vS5 zD2jtEs%|>ah|ErDd-y0J<~HnQbc0`C+BiR>G8?(zTi{UXq}O|%!=Q?XhwgwesS1l8 zN=s($sn!SDD9-$GNN`qeVI5;ki|{y!%^3F1uU`&a6^5lOjX6~GOey& zd4}c_DdPa%4y7fB27fGvB-+Iff6)@yJ>K2OdNpH)Ry@*d*9u6o6rF#WavniEPPA&VKZo33hQ^a9MJLEVy~J&$~w)2GiOjV||IDFNjpg=I~bBkmdIPHXUGRdu_LT zBI-wAV$?`DWji8b89Bt=d7vg~wD{5IiQm|=*v}p)$h`fXpw^|FX=okI$CVNUJAYDJ zqg%~FbWz-JAa9@!i`HgeudYJO%96-OjGWs;8*9!i@bdLXli_2kmOhq?m+wjpiml^~ z6^7-rn$6aRiwdXWe{tJaR}4*w&jdj*`Eqx|r9;xqxd7&q8sRV+_k?CE<|xfGk4((E z?F~bkg3tM>myenPnG!>-G6x-MD|r#I@9>b%~3A zPTcz4I-peGbTwY=&+{(H{=!bbW*QeWe*68?XRM#{x5DR?SK>5P7GH=mJ=o-uPnF%$ z{L}FRJw(PRH*cV8WGaB?3ZC#E;zU&i8s@Q5TCvHw%Oo_e7Lf*I9|`hNUsUB)Cu^Az z2kJ82D}IorZWgUHWK=N5TS0#&KMyyoqAs->wJ7nlu?9GJ6&oX0_ZQ%NZ>TJ_6&xeq zEO|-ApRfN6_x&NvSwm~QBfl4M+Me+y76w|m4O(w~{+lerm|TJr&^&A-%TE5R+c1`D zp7+z>5&B(v_4+51Zokn#dXqCQRmp#j6ree@$(_540dvkg20>-6m+)_w%8xLMb>R1V zzmT>anXaUkbcH%U|NgAxG#arR^LpvGIqDV`_2~Tgw!=Q$`gW`aA|S@zzr{tLrHK&d zYIhSRVEerJKyT$4r8bMR_ zZ7Y8*$6zkQl@9sJIo%mh;9t7)iZ8*8L%fvCfnCf@1Y=_9Ca|i&_tW;3xr*7c`FE9l z(bjI~w5i@)()ZaPO^j0a7X^n;D?VG2e#X4QAL?2r=lb$!RUYUO#mry7tnG+utzS^i zF^wd;QSk}64T~M|acy2ExZ$6Xz<9YYGPSb`Bj)%_X;23G^6#u_n-g}K9$JW{G=CSv zdu>%I++BkHE1dgzmtlX2MbD0^^hkar+TG(vQ=i$6pgTCo){tGD=3GBUI1w_SdFOI5 zTtQaJyzV&E>Sr&g+U$XEyBo`NJZVeXl{?=bAc$9qS3k10!_leFO~tq^za$%fmx{1A zK1AHEV%YIUsAskI6901~mCX_x;;3QR@sqsiD<>Y&X zazI)bUlt4rd1qiW$)~iZuyZN_DfgNbr&#%x+Uf*Vh-5n!jS(?^^`Lj8S@9J`4J^Ws z9CAUyKj^YN@F~3~{XD(EUH|@v8jT0p9eUJcdwgKV14PhxyMBLHN-K;Z{2{8jGD0_J zQN&U?0aj>}6$dD-*-wlA(*9tUK*2I=4}J_UJk!!D2+2r&jd(Lm-R2$8nxPDq4;H%| z3pwj_&L8ofyw*XPLOx{oG&%AW>i+r7ZkNBZ_{kzKslh##&c;_~^FyvpCxLY%9dqMhpDw3__%a!Y~n@GjXW zZnl#;N;fC%%pCF7HR#0Xk_s?*y#^<2^YT!0!M8&Q;Peqmb-lfASG=tDz_<2vM`5#Z zIIXa$$U&KF*+pz%n^!?LTsBWVwk1%el3Wh+F^#fTz4E4aImXNnCzB%^;viK4G!CK+xVghfN#y%`Ej-1O4l?u@{YGukA4U5g| z_I{1iQkdISX1b`T`L6>*mP1ZoMs+8^Aj^>o`63kN#&l{6uX* zE`D8TTzQpTd!7qGN!jXiNy3c9^Sv&grH|?rwLS=7cGnwTHyhpdX+!Dl0j07^KP10V zFZtq7tzgwM+XLl4a>bi@+ag~st1s_bt^&|(ekhmLy$p7PtH$(R6_kyC8Sy)jZT(scHZfj$Et*lR#dSzp z?|u1r?Cg?oH{E3M=_vdm$4=poAvGrHgsgh=0#g;CeogOUpdyX(rBc?t4BmlU(){l} zpC1a{@5&r>Fs{}msZ@SvQ+Kzf>0lLcL&)ebZL$#lAZr=P{o~`^)x{iMOCa=pxjfD& zkyvERFij|@-7(o#v%3WQQgADdMXm2$Iq1JUS+Z3pP34JHnw0VsLce$tyYdWvxrHMB z%k{3W_2rvXtPPSy9PPx-7%k%mOi)khb^PC_>-;>~(GUf5;C=GU#2+p{Y$+X0ZX@#h z7XMASm!a9h=ljJ4a#MQLACvBMJjF8iAJf6TB=(3IxzWNt*uLqN9!udIkDtMRu5y3o z4kU(*7xT@1TM8H6@-mEDuaN2kpNKZeR|4ucu$LrX0*t;p0w>iAB@z{j#eR*Kz16k_ zChjXTRw$_aiWX^qWa%(Y?Mjt<$KwUS+RQu6b>Qm7jQQ*@4=$iiq)%w_g0f7SQx`l= zlB*!kfcpTQLA{Q7R;j1NBz$w5RpO)kNGNUjW+V?)v?gYv%5;;LlRRK>fx5Qet5b(%b4gK!2lPWJx zCCk1>C7^RNXWOhYUQbU-LFK;x``vl@>82l2X6P+YE%GsluN1d@3d|BovUU1Y%J0B2 zRSCRX*)<8q~ ziH}mqps4DlPdlnoquu%|?=_+DkReCA$J9rltK$oh80)XHS1FgIcz$bu#f*&A!s`K9l_8yQ(I95GpjSSvCFXE{0+2UTdqg=a zwH^Dc)#8m1J$Y?4t$cbANVKDRK{+@FV=DR6Lnn@}6E@xrcKEGY6}R@h=VfFNQZS?| zr3ge+FMnn7k&U8x0977g*QDcUEyL9^62cQ_IC<&&r6;-+rV`whPLAC$9X zaIcHCRSzMDZnvqbdDneSLMVJ_Chio6fV-Mncl{o{z%H5G2p-7boG!IFoiO%`Ax=so zq6f$Q&9%TLvZ1#r^RkZ>78H)X@i6qJ-+Ncf$ZRjNznDvJ!j`OKzB!&1xV>i+JSSiDfUR2#X?5eb8l2MI5vBY(tLB_gI3Pd3$vUuq7^x1x`ZF#A=LfXzxYChBF0HX8x>nj z@s+nC?EZLfT2O_)6FrTKO@Sp@{reQ`B?5xhn%o1Uy&A{v_O_w=5y4@VUs zzE;4Pw5{-6FMH^ePqOiYMETz?uRga*{V|iXbQ+#wVQRB#6|*sFzV^%e6+8qK;RWD8 zGTSOIaiPwCXuV7g{NzgY{tp14KwrOV0SN-yY>LB-(L0SR-r~AO-=HAtg;Q?ioVrDv zW*rGX5A-99DO_ftAwgnm5Zg@X=-QRLQQJ!aM(Y=5p=4GR*>4^R`9OJbAUH=d(4lbS zfJ@oNS=p1~`pammu2me@*2BzN!p0+O3503SPJ$5jN&=acvRR^lup|3DlyuI>yjIm_ zm40mqCCl!>u0mVURLfZuuI0KoCl7w)wU_?uAN}tCitMB3IWyKd=Q;P-hR4{49f^DV zojL1Qet{Y5XD{-lS>`9et1`oUzIJrwj-w^=*p0xZIleMu*^PAi@_Scb_4Gt5jIw2h z`P*Ooeg8T|^kyHKcGu!!4s)o8P$iWz4@A+z?6RV)DUhYKc??6a6vn9^q^F~JGlw4d z3s%nZ`mMPL<#52#Gtp>qA)T#3ES=H54tq>A$QBzj%cL;P);(m*n5oEKTB@p$)d~{o z=zLuo#6CLAv@)2|dA*cg3_$tJ*zT9S~lO@fMSXd6Ma+zs9wT&QoMkg!R^73ik-Tg)jh| zgt5d?k|ki&`?*4Cn{7&WRo3aaDPDohQ^`=-%n@24ZS}v?G#{F^Ob4QGQv5J~Q_~*i+3i1Gfc=f;HCW z%2^Z0A<+_BxHR>RQx+Lnc!DpoqxAXc$W|{cLC4lVjtpJrzskYZVQ_pl8S*<1O(*() z`6J);UycLeJUe6k;@RJSAAhesSo}Nicujf67udAOqv(4x0>Z|#;U(dXn|M!cZGyDANZ~ppgubH{a z&-%u%yXKmI@$w&f$3q`}-J?b}V^GVSlA|wuQRPrF0*#n-NH+2qZVUlNd^Wh5#nvE} z(Np?lvV82MZH6y{QTIk?U~t9(u%C}Gbu6lRWybsnx?if@@=*{c-p+wt9fkt__U zocVur$-0l#=UV#nIGf0-c(2TpA7U*)g4IKv$H>J9(R-~MNJ{rc6;7tHrx`S0)e&>KHLhA1@NZH8J2a-*%{;DIoluaRt^ zI!ep^*Dy44EtZ{m-+8UlC@^Uvdy!7;&Td$TwU~D3i}LR`!VcAu_X++^q0|UY%B3^X zh0!YU&iK_d&9!f$4hGmkd2FZXIZqsD0wz)oc`_A^ONzrB>O`&8go^PjG=#BF0awE& zE^py9!<6`WG57S(Oc5HRY=)<(-a(yB)>84pu2=hgc z9rD~4HM%;kgYKL?ZI^qf&+~ff5t*Z&Jt5O8GVkn(WR|k-mdHRSx&(`=6!Y(_ukfFl zoA<4%!uB{dOKDcO`dnnG+x&=8W9*zL$UQx85;!;1^%;N5B0G zFZ`q5z5XSC^oi?V`pECS>$*pN_g$}io0jEXMXI$@4xT0kNnDG^a8zTe%$h{m={smmA(7N}B9|!>IKyb31Gn-Y z7z>9J8NE>~+~&M3W*!~X)Kb8HgF|ly(uTW4vKR&;?)G5-D=ec4V^K&U28<4KGK%2E zIy|Y!iWsIiKi5VSzB56N?4rf)I{WU z)WPzR4q>#gs>wPD=Xw|z*sGITN^3MijXF3XJ+h}U!hxuW{7<88B{Jv`^Tob7ASv!e zm~5fBZ46CxzK%1DG`r)s))XkHS)~L9ngUxtO6H6MValboo@B4kzf)^)g5pI6*imRt z2Gb7z5G|@})_`a!$Pv8^1J634#dY`1k^&Z@O+zKh0;@DYr~L<3(@Q26nK=%Fj4k?D z^Tj%*#xnPQ`#4eVXRbRl*6*7$&ACnxFzd_te{k4Y56wA$@M9=2&wTjbxGt}`@7MWz ze)ezv*`)_R{5T>9V zLhX=u%AE{ZN@UVRPy(z*|4M`plUv@RgytWZvi#|Afr*W%Es_zOD^$CR%!+)|8g zK{~Y;hzlzQDYUsYw;eJSHdJa0LY&J+Tv9-sXQ8p}4Uv#R{ip-O2msR0#5|E+Q{li& zY8+<3(v}lo984szZYGo;N5$Doc zf-IUks;)z#+GI5rZSB0)P;+n>-;Q2a46O%n`wDXX7_>yAPVys)+0jA`I$B$CYFY2nQlm{JuD((!OB;<*AleUeOS-45urXF89%z)*eFC=P zvsW=-sjtg~iZcq7cA99Y*kEN!W-Zb^AEQ0SFJ03@Xf{^LY|Aq(eR^BTHI2^8W@JOE6eEumlGi9pi)p+b+!=hbmP)a9Dd; zI71l;JYPreM*}=zys7idJyEaH>G*uulR$ZDvGG0j_}18DC>r1?XlXaTD#ip21a1#b z_VQ!j^DRFFd_{2`vd-CoJb|6Z#S8>?1#F9d{_-D~qW5bby)!d5)a(JXO|dqe%wnvY zN?S0r8BTcwA)h^bN#7H(;tblwOix0Kq(VWcwo0p1a=~aXG}#!jrBzm%yLj;8%Ex>V zj7gv>qo}PHsO=-8=;rBK4(1!^q)sYR;bc8=KX#oDEJ1{wv9TJ0I13Eg;@Zi4mf1xV zXA#n9oWpMSajF8w$S96O&w2FPpY|F@!sI|cybE9Q?u80S#6l zN-=y19~Vd)-Ah}qTPT*kBXp=D9vUYz&ysAIrd4WuMEP7hb-2{*WUYm+8-p)HkNeDf zvzK}vb;v+=K$SR&s!`AH8BoZE6e?qE^eP&tR1l_I*pS<2(;$iKskYg6<}YI~XK4Z; z&Kxk-^S|d?aUfxDo*l>&+<9E)K&EpX2lC&I19_OfjcyXVmW!iy7J)R?YFjlrzbBEU zl-dX$=77??CgoO#xWa#>MP2 zuY0l^`y5V%P#vqUzk7@U@Iok`p)6~F5>>`%ouXZ#28~6W;dWOSX5#t-Rdg-|>+0|< z<<2dBzagxo3^7XPWL?H)H6>$g$TZu?f!~@(jJ86GE90VeQzO(E+hxDWu*&nKcEd9R z9$S`J*-nA&4yX_DLs(P5Sw#96z*2B?zcuE&kJ13Ck<4uJ)Hf_DZ`}&ReJf*pn{jTT zUBzXo#RuGpQ>Hi%tU0e|qGgQZG6lKjP@nCozzHurs9ZhzX=b>2j>+8WK=K^x@EQnh zB!BcT)v4#aBv{yI&}P#^*2Dlq*%$Ve>cb&C0F7oJp46NdqEbv#s&j%T&PlTYjJYtP zdt3)7(=ZtkM2KX>BWhXaD6Gr5QxPF&=U4|#fH@Y>Y%AYDAGEYYN{~^-Si?Hkw{$06MF(I@P;{4 z1IaZJIj5iY9`vZmBDuo*!oX4p zPY7XfpsiyJBWJ#D z=3d9(u6+F=;Xy>+Y;7~5KtX{FtyS3p-$pnLT<_nRCKwZxU;8>7QgpZc9hgD6_Zw)E zv=mWu!LMTAFJ(4m9co1R%gS?H{R= zPiCA9qcu7*P=05w5NoLl16z2+xbThA2Sk7#D9OA6+0~vy4=Y1erGUP&y{+=~Rhi}pTku@6fHlc6;txV~KMkXgD$+9BrL=f-n^qqTe>x^}uhu z>g+(C;Qr!qmrwUOjEIG>{>96_?|O>pcH%luBZmj$QZ1`Q)j&1Hl!166{1$B|qB;lE z7}=M%A5A1BwKc9|pex}Zp3UrXC$ljpJv826#4QE}V=YaR!;wSO0(qbeoZ6)HbKR)9 zVtkK&0)EE9=VuvxDjc&-aT|GGoQfyKwv+uL31POOHj){U5R}?h9J=&;EX%2eIMOJA z=j=&wRztDlM3Q36O14nIo}xMtF7Mw=fJ_Agvud?>4g8=}P%kVL-nk}g68zt3hH*w? zSe$E8p~Mb(+VQoCfXn)dhF6-|EL5kt@j~AP29jFEXDT@&)w&(jAv;KyO#@-Hz?7L! z@ima85L9|F=5Mn>p|G2inOSeU={=KOjqz3QNf{aL1H)+M)*ynlFR_8bF^r;ZAY7vz z_^i;=4h9Rnn4m&I$lGyBaV~RR%>-E=*-a827GB+&$U>7o@1yYDc3vYcU@K$S#OB^U#AgUn!eCt8V*qDK4zD)K<-@n<_((fO>;fq!}@Wz2y0KeGNa-zqA zw{u8=d&rR5_;omBXJ*HUrI0NRHgIEKOYZ~Xds}1S{Q_%I6JV|Q?81P;I`-itk}UM$ z{FFX}jf^*o3%taXJeuNkg!XI9_lZc+%SvQw10hEJmWfK&c{sdF$$YXAety$Pfxsra zYaC+!|DG2Iw%g{*?V?_SfZ4FpIElV-xXCW*9w$RN8UJOStwB zcKw~BxfWs3IFRR#Mf9U%Ae&e;%yV1y*XfK9QHiw%Nt3>Mf zTh(oIKin%&U28q5Nra}VaY&)R(1jFc`%1*%8-dNgLy6?DgQuf|#Lx4)LM$>=T5ybG z*&;f)dTFp6(!Aat1J~I3??7k3YSxd0eh#CW=j2Qjj0#1|&@m|n2R7of%n-Nkq+XK_ z_&DrYlL}q-y0^%j3=9K=5vvnOPe#~3YDFb8jgjl@j27fE${4pmh{-hgdf7Oamj=qB zrt_H(k~yNNI}D+t7>&bgA$@B#sa;9mUTQ5t!KX`*$e7;Jf@PFhpIDmAtDH&Iu0)!Pa@U1*LBo%=%N zIBcu#gY4a&7q#4Mc#LzN>t(-Mo5N8V;8^3a#`oEO^R`QW?|Z-FoPj*Sea2;%e`Fx7 zf&BAgZJ>X9{tq&cZqv8(1K+U=ocrH4lUlNp_9DbEwgCT6yq!?KqJ{zKPI< zNE}OxEJlYAMJi-dA+NGHILAflqUz)5qZj4z9n`OgnBw1rD^UFvohP(LhI;}8b zLKVe{R5-7aE8@)_2-#&s?`BhEFl$_daqJkj!+MovAr;7eS(uKDE7y;qX;zSq_)ZJV z=QT>?caARSM7aA*jPx`fi2NCis@Q4Pp>S3LlP=U%+=~ZLSfP(dEJjguUFPHbd#QDZ?w{An7 zGGl_-*Fw2m18hC&Zh7WQc*woH?$T#3%RtUW^e2TM*$m{M@xJ8mUO(NYkGfF`1tda0 z(Q6aEf$^8MV&rDySKz7CJLqiHaU9*ZJt*09#a+{o7>yv=E%`f+!0ccfxRRyR2w9}x z$VS5{y;x_bKpdIF+{57Y;@3pL4pU0zlLKcn)Y2}coGN*~FvZpJrP0lEP39v}AT=+b ztr$nLvT-Aw^g>^q8e#vyR-m2enf9byGInO%o+!%`B zI3bA>7=Pv0ZP=9bkUcto=VvMGOT^e793eG&BwiLsEtv(5BWo<2NEWTMOVw`4mZ*CW zC{aUdFqHtKMmWz6*e~@!XVxToM-6~I5VjKcW^K_i!Z@q;Pt7ygU?5U3IQfhND20Au zyxHqyo;Ll~IR#FuOnhnOw;=%&XKFT?M%At#_ZF&nj;ZsoBRMXZ1w z1A$WaDAcu>Z6Yh6o?^rpslZMep?sgioSuRflEYA0d3TKtoBEdby(q@Z&UT$ndH_-< zG15&`i!m%yXW=Qt8l3|oM?Xc$L~qs{w%C0{oO2)!kwI!Aeg8GE7FoApN_=_gt-lU^O1iPUDC2Zm?q z&lpRJ=_?O1nrDZB3{$F+q_ECrBf=AjU;}6P|CNaerJ8Iq22er76whIa@!1z(j7))~ z*|F;wdh&cOq>E3!>xCf&B>PK&n0m@TZB0#>(dQ}LxwBL>e)GP?{Jm$sw>nyChOHdC zj5Ryc`F_@;>x?72b*_*1k^$F@F4>MUBB9ZiwUk0TT4@A9H@-d2!#bc4)Mg23nw|GZ z4H2gS=_FG&JEnO901R{XH8nCb048iM8G-tc%&I>BWQV0a7jC0JNTwiKTBTO=Y}n&< zf~n_}0`8umU*wf><{?}(i`(%4*$)ZAR6`D7C3T$c(u*u!li0@nazIo<8K`Y z@@?lD$P?UW{P_^pOTX_O_x}bgETEf4zq5%~i^tC88sK8mYvgiZnwlSxTeFCCdvjol z)u-7I!xY@tVyJpg!dIc#7AD%BjldM|eqo~3G$wBP9cLuVBpOW|suUhAUT$+)u-veY zwh;>Bf^nY+kK${LWbyA{=dnFx z)d#aavJOnqLhCOX6qWU`V5}BY89_iAVHfE*R(HzgFy@s*Qw5HgXqw18Grh^wT1Ohq zBAhJr%6qF>6+%Ir15v3m7%T86q$SJ~Mp&F;HM>T2H#H8PUjhK}eBe(NlyOG%JV=KP ztTsmL*69UFWIex!;R3=*0I;M1jO;M-^4Xz|ni1P~q4T9SM6s89QSeX)m36Np;`i5~ zB_koC@BJn4;91U|SmoyY9LJKPv->@cGNg{O5^+EYo`gwP=y3z9e4l|?brSRz(YqAK zk!MN90(9satzc%LGWJmGh(e0gCnoa(Mg&Hhe@B!tY%50i!eF!^(~Qgh9W&C_;DB~7 zz;vDiY2!k2Om<`qah#<%15x%Y-9Fz(9heD;K7WY<3#qMCe@G~cEhK5$7YWM(V!ggOR#w( z>y7S{J;VTR1Dy?Ddw^08$wu8KHCa?Ni`||grkK0BL%<4^wZLIvtXlk*CFJX+r|Lj- zPB^c^S?wdyQQEm4rdf@{LTlUCv8;31%m9PS#tWcTWMjX;!ul)pVVvDm9vP%6Vu%Ilu+on*C(NCnC=Z5iv5FmT#rgy(6 z&W5#07Mh~3k~F^d)Og7IP&Wa(kpU#DXzO8dxXDm;Tw?o1_iMZZ)l%CiGfC*Q&4z&^ zg@Krrai|-x{ztDA`<5(8jV<-WfN-s8=}gJAsgt}-!byfijRPt4o7WJ4G#d#ec8qpv z8p&t|eq6{f4#ccW3cCAsd!-_&KRq}H#N5|AT&n$4ae$?Ir|7MWPNp07jLTSLoyNHY z&ZF)zdoX*=9wi7&1T?+b@BVo@qJ6O0Sy-bDFbU;SxDVzrewCT+ZO`{yWuNK#Z8VgOOer10Y z??X+@*&Z0xQ*&zQ(s5+=`9w!*){KTgD7^Q7Y}j)1%#Z!Jst3&y$hM`_s^iAmrvWf$ zO8I)SO0(YTQe|zMIi{O^#|1->sB=vwS!(Uv=bn}Ac?k`<=`h1Lu1& zE?Yy218=a=#>RyuEy@D-d2Pzgs3GS3l2!k;d2?i3wFaJLHOyu|+Bj-GXZuH_aJvrdt({oO8be8?PK5J@m8jkn`_lFIz2+C?DWDcZ#Aj`t~m#_GtcRcvfH_QMiR8)=7Hfj~lvUt56vqDK`A8{6G zFmsAqzMliFaSS~)G+c|r({B_;(H? zX4zQ_)o}3nJq{DU8)3*^XNsP=-s%Pwy7IbZ)Cf(DAw8I481)_YV?=h)H^(7x$epub z0ehV!&_?j|WH`cAVXIMCO-6*Vo-AkHn@;cTAl8xV1hz10)CzQHr#G+H@mO%(Xd1_R zVB|QO)+SO6WmZd+dASZgm;d7|=Q^e!9Ida(&cykBuG?c0+V-qZqVyPLsnxQ7eEvq> z(!c{95fBu95_06Z*i>kD_eSeOhi?Cid&NDJT2>9^GONfgZ+`CxJ*Hnl7|FGAtpoG5 zj;A1`I$BYrT}p3^qZ0DG&rR(~p`H>|9z*1}|5>OcqCIM+a) zT<&A$fjq{6Obz56=|pccpHU@IvXlBuPa82N5;wh0F9e4TY9A4FX_8VKYm{h~Dn`9i z*EA;fAf%(W%nl2SVB(4jZV^}7r7+dbtwsZhLUB6DacJ4(8ey`PZHBU+L1-({;5vpH zun5VumJnI(_PQi8-$;CG4Af8Npu+iAH>>?DF=9*eHES}H@%w=l(yf0Y93+Da4VI{x zUWd8nI_b-b*B9Ur4Bqxnq-Q4-TR%_snk+ZgHDg#YHjPMCC*~Q7o#V)OMhOb4WtHdJ z+LEv#BnTai8H-)m=~Zb>f#;a}3p`{7WfoEc)dG47#$*!RBS$d6bDL{S#F~ty!?jY2 z(OBDHI0lyiV|2Q6Z)C6?PQ_k0nkeHu%w&PZ*dJyZeV>pOsD~JF^Lw9~`pdp2*SUd+ z&QeXZIP*sOG(tiEP<&KIUf6w6L?El~=-%FI>V>Ukr1u8rQm2$g*iw%pos(?4HIUY5 zqJ`Bpo$czW*H$3=3=Fllz1F z+hNNlOdmv{qLuZKd4h%&8wX0KaLRUS=kLLMg?=y+O@DzH!puPwPyt420YD?Ff07vx zZQ)ojtm^G-e+dUZv`Zpw4g z>O|2L83UY1+sH0OaX9<=T%j%Xzi2gPQK=NnY$ymahBLtCi7kzDy4h zYn-}~&1Z@!>~b#@?6aM$7G$AMfFQyewk2S5DkMPG(`1`g1};<-6A8sRN) z;s{gMAmajZX(qH1B5^K_sFUS1GL&+u^9bg@ICHV;6ug^lEhJ>bYB3rk5$4;htqdre z(lTasJ|_@eoRXdHCkUoB9IlDq&pKf6y*For>kN`v1fH7L;doKor6v-h#mZY04$HH5 z21pEHi_Uisw!ZpIVP7GEk0Il;rlxR5itfT6X*z`Ag)y!0q0OJx*ywZ*Tr)pUA4xjm zDYT2G}dEI22DvE=-E)K(CUV2PX!K#zJL~6rNN4ougdNH zH&Q@6F|jQ2ntsP{lo=E1=XN@iYO{HRnG0)e|H!7;!Tb}&Ic&)8YMb{0g(a%9P@N1S zP)VEnI>0A_cd(jL2pppv781~o5Y_#|!V1+hO<1Q6@f^n1W6V}$afP)LTCNP4TvxDs z^^X=S&Xh+YMhtfG@373W-fdo^uOr%5r)i6aac12q#&hk>yjE~g?7FqAW_8ijYE2<) z!{LweF(YPlC0aZ62)j3~N?6&v_scDuhoo+zLPnOKPBnnZh2* zGluyXu&f{alE$!iaYtT5SO+-zC|=CniIC_h;=RN|>o*;lc(7yF0O&l7f% z>c83VJRgV~ZOn^vqfXOn_pFf3NaI}y^{6?_dzfw5wH`(xdvTuKYJyqoXl*dXY1w?) zCv?9j^Jp;CTEwbFyTw-4FYcZIFK+lwt>$MaP@#%s0)s2qnV9e9<20p z;0RLKBYg%IC}RX8RRcu7g-u@?K8=$2@6ODKk<0;+|E@}{u+%!EMDOTXMV@2ent`xZ zJW{5XJs2CUtHKK1*R1O#M?vG7(S4XyaTXIL))|M8>#nM@;-US%EF}R9$1LF))?B%(P$HAKDUmlhHMQ~q~I~k10mfq zjHK;y-~N*n#&e+$khgu~D1|>t5%YLOoP^o^OH`_1IkQka3Z5cNwoM2(=t0PgMR>^%yM z)P{fx?1u?dkOQVuwe~^Zi$!+fg%dOqW)?6Mhq$TI^*E8VDTHkSFmbqqvhbSsmsEL^ZKOUMDm z|4GBi3<|kHxm@wZE%Yz`Eni-$G0rVGdugbN-Z^BwM+@}`>y=~>*i80QzP7VDjzqlq z{>;9H+A9MthG%ek;RICyGCzCPGlw7JlCQqg>kyKyc1qpONRMm|l-)4U{0sw)!f!Qv z>R+{wWFr00YN;Wh;yc5Wl!-4?6pY`!6#Sn+hCYjhtu8>1+n~1$woJ@SAcV@m%9M=p zBnV;;L*_t+Wg*o%kce$Y%uy$P%;$*HfIwj1i}jAvtPGr6&O?GRphN3Dp=np!Yx_42 zsdnx!nPe3of)qgLkX{@|!hKWUVXZ1!nfgkzZO%ppgylSJtz^j+?90;0L%FvZI0A|} zubwG_B1s4KFD*oQa>i1tS&K9ho*l@O+kyPdtDZkI(cdyGEH;`Dja>gSbW$KSN>9z9 zQAivJ#wIleBdYvAQJtONPGQrirQT45+huZSgqbXd8mgmTou0PzS|e4ii9`CSk?+1~ z3}UDAhF4vaFcZygI4wdSFu@Y3<|`WfD=A+DjpSUZY--vMZ_;dks-=4b(Cj zQpEo>_)(>W!4sy9@C>hw1UWUFI;|LMp2fU(j0}-DfkPr>@%$aSw9^$2rym2gJq*Gv zc5GYwiF!dk*TSwws*)dBCmBDvSJnWXsP@?CK$tNjgl48_v>$kcOchEtFwYq0IDtS` zGh>7Xz!=5KlVAwv^H`J6y#sw}0GC9uBm>u2ns?ZB=sz_(PES*79ZOA)(=GdNhgwnB zh*8eIB``3WXC8U>W$Q3Y7)Y=Z0tav)(>)<#n7L;1<}wen-Yt%2zc=uR0e7DzyQX&5 zLVD(M%yrx{=Y(2NG7+9_or9wfy0@Tav#!~{26ZO_ipYW2$vL+MB4t^UOrFcuZIV?f z86>IUWphs>W%3vr?^(*^3GPo02&?lze)hT_z5d}F-;yG_QG_Y=D(r?6o`$s2_bzUn zL_}N9XyFy7Q9USyQ^@1Hma#6b)`{6n$XQ13_)`-NGHb?)DFKcnzEVh`fYZ zgjCev+Wrol3{8GXYkx>}r{=Y`BWa2EH05%+qxCr73p^D3ac zCeqKf4a^qGvMRRAIs)sD6C)ep-|4p?;6ML5kd@Fm8Q8bE^_0w5IzR4zyz zhyWxRmkqiL4W_S!tbX>B$_6yvvX0#=fhchf-Fv(bFj9=P*?($IoV7rlEyNS_lr->Z zg00H4=-4UFD;2}O327vbr$u`pH-47)t8zkmO$;mpYbDE;MM$=m3=Dxz)&%N3&ndyo zWFQ~DFcbY;M1O*NjxSOJ`PoOF4Oz@~4+bTD)Z*=e6FXljVA%7gfzDYZwKj!K=3WAGl}ejw zd(@W94k!|*Wofe_~}rLfUX zBEfRcw@A3%%d6OHlUzr8wph%8Byx+9$1q|f(^DV@&;Kn%R*pT+fqnoDk<;v$A)%D@ zy-mfblPo(a%rByN4);W4JAi8C>5u4cuYV7IU>6JOFYDebqVF)K?`-$Em|+ID+Ca3%}2 z?tL#E+C3)iTUf@(+a^N{;1U~_Mhn}i6l|`k8ALLTFcjHu(t)>+g7p((q;_JB@5nm3 zw?l^D-#nMOuSowixY*xG-J~oogF3S-vRNF%7R6JK?0F5vxnl}am+Ki;o9bew)UgE3 zxZP`8*VEZhZ^98pd78-<%yLo22^Slo^_cIIY3GO*I z1EG=d!c6p^88O9&qsA+i9ol9LZQ+Y8oNW{tgF|ZA%@jz@kFcwU#{I15^HRCxg9kt|# zqkd&}5=bi&CJwb)srB6VLY=@M^v&e`#(}AIiYMGBcYxvEiH%f7D#K zFN`5ke743mi61M|l?=;MPD^1z>5o=@;RAu*Z}Aon-HqrO3~ZAcjDx z`!Vl9{g7*#EacdyM+Q{bj%>8GL7~`Y6Llb>2aXzEO|nC;tZ-$5u6dulhFZr6dS*YS zwxeP}=D_q^?fejHOBUOeWO>!4hek~CD59So$dkx{Oegx))IhF!+7&P0kuoO$8 zm)qVCrn>API*yxKM{mezN|ja(qIHJV&jK@V=Xeg-HbhzUI~)l2l70h=tzm1`&@KZ_ zYN*lLLP{Pc-&ezGc5xK`8>yxc8|bGjwlpIO`Dsj9D=~hDToJ*UnXD6DDycPv?6`xlr$b!b^b|XTtyacgETV zvNNzaO@c%geP)hKtt5d-)0s51S(_SDuCb1IDa6ZG z^ZLokT&pAF!$D9Z2s_NWNM?D2OdxHZ!n+d&d2M?|I16P{$zx>nDoO~KSwfd{iLu&<&jk==Dv8n4QCb!?L^)tLgrV4+fvW4t30VR_-!I83xqaHX$-`Q zfvrfnCn62ceT-_Hm67JqTJZY#oLF(!ool zms-L071R*d_)=`${sZysZP>IAChLZ?O?F_vNxFsGP^m!{3+J;jreq!~E}32piu`rZ zsXMjlavQ*oz6ju>JZGGc(jo_Bh9QVZB#OiHMfBOsB=RmeiyBj(h4SC`GrI&Wuw)Ud zD^+N$S?Xf_+o+gvuYt~#V=)++c_3tSF-Ytu`(?IcKC{b5t^@%@949Qh)tHj(K$9Dp ziG_Zt#6nCIl$H4?qmZCxt~c6LlhGbs{O#wl1G~LLpUcnQ)nFc`X4D&Lp)Ko}F2WGBB<4G^>u3Jq{&INoy87 zv-D5_({*BEhz3Cx?0(OE&a=izWi)g$ODX5~F{eIi0L|FvwSkUXOO!^gDC+5R4YDqu zNcgm~l*yC9l{~JI@VXy+#~f!PL@o%Y?p#}!p5QjFR5xUsdhlUFj7R@7@{v4ND#ZZhyBt!fiUQ6*e#p4## zbr6LX0`1sSutS}aIpKUJY7G^Xh;U$$m1;;dg~K31q>(S2{T7cm1IwBH1p0T!2N^gx+;4q5HVa$+;sVTMV21V8`@2xkqkYD3& zgvfJSNqcJ=iAqzOup|3k?m5G+gnY#46^Kk$S13(smN6a!SLAasPOXR7$I*tqLVhty ztX*nE)|vuYg@Ex>?iGw(pY1v&pp#4?gqk~R&Pjv+syL@;lA6qEekXGwnPlYfVPx`G}lMB731t>ButBR-R|i5$_ND zYBp=Il+0|O`Mgi|JI|DiifoFX%@_9^4Xr}S!kVZT0KMvzwlPt?D;>Os-ug+{lmuot zpvtzmAFaXM_R9kYLVM?IBS1=1>wLvA9a)+X-Ua|72xfhfVQebq89V@u_ZVrb1362X zJi)!lV;#uPzWT?n|HF^}pEk6cZ`j8yPDXU5D_!TIP2(Z^J?k?m2pg>>0m0iB}lEo)>CNDtkwF^)I>lp_XsW^E+Z zF~MGIEsHu`Ge0$|3@)}FbYe$&pLzC)?(G5E%xc#!*+Glb$D9n{Oah=du2&!M<39U5 z>(nr|Hn=)w%w~6BnGC<}^I?y*SYBw(MouMSP-}qrf?-ck)V)OZmdu{@+~+@QBaFN~ zB4vg(cr;)n1D)@e&6WTlL6^|kxc*u0(RnUm2XS%%~k-%ruJ(Tx)3E4b%@N>}tDwNWUk>AiGQ3)WB#BST%K z+Bl%RpM!AjoiDKCTi=H~2M182!uM{QO;5dr0&CbX95Vh+RNkh@6i3t-Hr?SramgL#97kSM8tKrpd!#_de4@l$ulris9gZ`BHal<0|_% z!GrMI(T@~Ji*=lRJDFPyeu~WoB4#{hrOSBR5xNOva^KQow|B@M7PF~kNACL>d`THU zBvIJI1T)$9b2h5N02)A}ZkSthT{Q0AGG`{llu*+Ntj5uU8t{x$+pEJZV^S#_Gya1$ zmNQa%Z|z3{PXdm)h6g`#b|6m*r*ZKnE*ohZ2lDr>|HEk{+z9G~`?f#_RFuZ5LJx^L ziHL}XPCXB7IHFPuibgAT15?-p9Joi%57IK{-c(sQol!V~fLXe)=^w!{Rf5rZ5adz%p!j{n3>h2V%5`fm_KI z`v&aBPgIKGYjkbjgHC4|F%~9`GHozBb-HJ^L)S0_1Ej#Ii{R9V{$jW;Z_1Qu)z1A~ z1F#B&Bzw=Vs7 zyZ2=qRc?jrY)!?1Ud@h@JyPSrXwG$v!*L!=vyATR7|>2&Jf77$>8LKWRx=p}zn&1{C3E%rxyj5 zkgB@d2XgcxQFF-vtvnPq+JIA@t)~Vt&_!&kORe^C7 z>}B?QYC1GUrd}uON?6UH0^K(hZ3&pn5>8FK_e>zL{Wu0T826svW+rj`oR5XJ8W?1z zJi!~km)EFWw)EyWs1ZRGk>KBqH*kb)0!iwZ(c!XYY7n_J;>zK4zdwA#8!!F%_kPFO zfjkNP#&HYBK&fS6z0yWPW)SS8ymWxaNN?JX%(=}`DRj1Qxm4N}VZ+!a>Pc~Mr7>WD z*da}H6p8U*ukEnq@biC|9dl5R#-+k(tM+*rRd#+BDUoJ7IEqjaJO9JtB%g~j8HNqL z3Ud&QqRc>q64XH2NPDOGrB{N(J_b?RW#>jD0%KMPhe`;;8U(Tss?tguUaD&;s1z7` ztt+8T^sn0KM7ux%%}Ta_ufw)U4~Qre@=$6mOtj3a)PJ@oX4V&hN#t9ED`cwK>D-y` z%e+AXgYN~NwEqGln1Fz6DqYv@UN2l22h5uYuRt zSB#HHeC~S;IQK$n1VMqNoOh$K zHak2V+ty@S7to=WFp(KCIA2KwD}QfxBY9x=keONQZ#Y*R#zLL*vot&sB+NafP7$dY zp`@*G(JY!q&^YZj*d_}WzD%=hCL3DUI3T&oz3dRNWQ+tlTX*Arn+3*M6`tdB4EXH% zx%cCpCWWkGph_e4@LJ5YvzvJZ zio{`D!*n8gOu^GEL`@%}sG%<&H39n^obl~vY;6I2nBNbzHHJwjVbl1PTbJLzD!&w- z`L|KuMy!ezV$^In+#-Ak46H+=^Zs5l_qlQ;_U@QXaFA8wJ@v6fqCfQ< zqsgp8900ulh!f5;3R4c&l7`YcN@1z8crY4UzskOdHWZl(G8$m*I1ia`vXa!-G7~Xt z3H(B)%gmEJN1GC(vxTT}4&aqddt8&O-klAN$T6Q}2P z6t5G7n~^3^30Z?uVe4^@Jw3kcud#y&{h%4|K( zC@>X`w`P!h<^DoVcSLO97`Hq0;7XrQX4YwTWRtFa{>y+$EL*BB+?naGTng1kmcEWT3#`56YR z>$-J_++QiuhkVFfFV}QO2PdUA5a-`$Jq|?d+zE13HeTltsB-%RgaUO!vsR^GFFiHa zfg?y}w@sj}V+0C1K~5?N@Z7=lg;V0}cl|MnEjrr`U%GLG2CWm>`EH}!ItBuOJLY~e zcRQJ<&okHEY-CjwQ~)5;#0f|e*uIRA1o+(fS)ysamIh9(EDqONm_0IrXd~U+w0+8owaF3 zwoJZL)}zC`I}N=u5L2TlEM{L2_h$yJ9-OZ^NB|+nm}TAnoBu3zgNVN(Z6 zIAOuL77lcxyLLGfrA2*~gVyn$aW4K|8k=xNEljRjZW(S%_BKFefyl(HHlp zpN1l|8c0UPvXz#F=5_Yj6}~!&F|L%#_Myx*faA{>5U2GlAyMFwWC!z^7}#{31OKEi zLU_sy49E$1QU@cON-3QKMw{z(#yf^zIC6(O=_D}J>onV=6xfg~cHZyf|1?g?07B!c zqq4qo(0W%x3iekZ(^G&UE!$^cKaCB2tko@ZPxN9)r!@lzy`JDA*>_0_c?Rvh>G|8H z-qi8pLf zX1K4t^zaQMWfBPMTtt6TI1g^(u@2;CrUrtP$!h&G%`e^FAKb{a>HHd-8puPBr*ui@ zM{9tTfH0z5UOGl8%AKio2q9&@MN(r6$WlgS5=pDQ2kv(}iVA0d!S4|oji9I}JU zUY(`N%dg>-En~ll{Pjvh1U^&D(4y@&Au^|7X|e4e0Y)KHso`}TaJldtZvGvp%A#tZ zf`v(@aJ_OBThQNm6Gt&Pxb;Z_Cf9Te}$<{ll|1+|(8e4H?jq?u!ah>L8aWR*f^Td&aR$~rRBqc#RR z$~D`5hZw>645D!z2n~u{pHx?+Odv=sL4aw3TnioG(q#j`91f)ONs>9xzq70__ekKW z&~t(0grOETRmE3Be*a9ZbdOl$Q%tk(83)2W+pL<`;M6*lYT?yYur*6HNP()(vvn|< z8GLG3WoVgYOG`!~$PB2gy!KIT_j#H(=Q%H9QOBmk2`OZB#1{T@9{pV7I0~LA^%tLK zWnBVYlWDp}3(akVDSKf_GHGrMJV&NAEUXW|`ozLI%eg-}e8}T!AlLoqJ0AMz$hoKB zDL$?7mc^klD!kDR&nBlht%_>dQAztX@=A@&|6`Dxf|eeI^n0lFvoyxLb690xrIoUAbc57|-zhSmskemr~m{mo#Zkq2ffD=N&g(#<2& zGHVot2D5uR!wVfI7?H6>e+u=LK%@hng(vwe zClW4=_Y7e@DLlwyYal=S>e0f2g%tx#v)!iE(rHl|wXj>*BSu8rGtp=$iFSZ5j1%=& zvWO^%((`eeMJ?7ZmGPKIQG8u#6M5~Y!BaYiPX}l22-f#o`Eygk=bvtu##}uDU#KYFS}`LXiExKC+lX$^?uqWn}xyFf?d~lF2VoY@oOX^rj64`WSM5*63aJc6~z%}-Z zz*G#i8ixh#m#k#|4qGbsvC70`sil6;eVEyebC~@DiG<#Zo$yJmL%~XilmTC%iV%lc z_!C_!yVG@;NQ~T{;x^DS(kwQPnl+eJ+q*-6H(!~cX$HJ!#M&4^T3K;%;)Q?%QJwlc z4js3`%y}K>YMuo&d9GPopu<|$*MlE<&Ext&&htQ?;BI6ykc)jF4}SP{LRcI){_X){ zGni7hkAsblk()z-OoEhC870CJr3}U(V$@|$nW-3|FT?1lv1C)XUNReBy(`Dl9x~*C zYNVPf*)HnGI>2sngg57Ka(<(tIoy@BWVY?3>>6!Z3Bh5=$0QMidUD za9gsO;QU6}D*(BSw(XBNY8QnArA#leKt>J`X?k9|7DnLfSgd($zrfN)57>stH(8?f zr0wp{^uA_mp|xVrsNWRBU%1jHN!VQ0iHOi~x~x^8OzLI9-4z;K#pD>xM*a~g3?+8R z8AmW;ea^a<&SC2gTf168Kt5|_Cwql#x_zWqq2y8bl{iK7ls(ltC^w{ zZ~G;9W~fcWR1+p+DrGVthG9kJ`=Ayy{W#5Z9{SkD8i*Ol z*?~OK9mvIbAk&Es3kwG#^F$1JJ6ehSkU-d`v^_wnL9AQ`&Y}ieW2$k+-~?CgCX}Ia z(SdXm=1|fB417S5)Y%^^<8kUW8HUPyp93b=>S0S`7r(PJ85(tN1ig+SoyCc=EE4-U zV>mfPh33qFq*wAfD3`Z=;1vA=N5#NFSsX*fH7`{(QG77wEkvK3TFcr_}+rOZ_mcQiG44lhmVx+w8p7 zX@>{^qbb1&nck`n>uBtQm^GVcd8jsHuv=r1d?2)P6uILZ*#`tT4Vr@Q14%id&n!h6 zaGK`m#_rmv=S6l3RJT1PZD1_@b?YwBb9an#AhTo-1NJzaKj0y1(7%ePSC^@jL zP-A{)GVzcSfD);BmIX;4*=KKjYm4a92XdzIKEXZ57aJ&b-H%Nt`djS-Y2>w0?+)Tw z=?x=Di+gJ3U~tOFDz?p`lqoX>&UEmKnR-Z!WIUiomFql~zPm7j>9iV1Td)kolFdCE zKdQSH0R2AMP$TDLMU@swq&8S}8s?TgMRDKA$>uejkTAp+)wd2L<+6u92HQH1ox#f3 zOU*QDHoE6$I*>TMaX2`gFs%wZZQ(e@*{q{Q&NPtWfH7oU+tdx3buHAmnTX6N3;t`w z4<+C99+ZAth$4razJ~doKrof6Pp5XBz-Cs_s|qaA86ih;+3e(?iADll+&>X>;ExN= zsCz)Ue`-ED%dABlm)GfZKj)YvNFZAxd&r1n3)j0(Wt$DXH}K><4`8lBaRxdDC2K6V z{*jtSvHMVz1C6SVyEQNAz0Ii7;eSCPAw4K1Gw}P#9=4z^Wfy65GIcu5^S*hO?ZgjU z)jpPFex;n_h#3~eFsHzDv!CiD*O`(%ST8cmwrREU^aL1WZDsShcL>r>bwaL*YzRdG z6$9)UlCfrO<)Vu7!hLzKI+BHhmuRw?C^9*lWhyB7)=R_gJc%iu9mtc!fiMr`LLUe- z(I39y%`*?g$ZVrZHs;bLw=dzCld%Qp7W7QnO}95%rSR$e1rN(IkpiLMNYed`GXbWl zswoDj|4t?|n_oHit*;bYo(=EBG!1p4IUEze-$+#&YXu712r0hJ>q=RTp>bAv>M;wY zg;55J%9_A3qrxnU!7y@5-6#Dm){pEp*?tHkw?x_83(+ONGk@C|-a<39Rb)znVPjm4 zjI&&+q~so(dp z<{|uPX4OW=1Qx8oE9RA^K_q>1=b(ROpVZ8IC)-W4DA%ha&)T-G zg>y*(KG0r!V*<63l^HY$qn&~(*6@LO9_+U;z2bbJkW=$&Ur2)}_0HCLuJ)E$+15k% zTqoclGr_6NJ!uDCKP;?~bN}1ldhP>xa=4BQYP^q`NchkV9cdfg8@sVN2*5ly&mbOa zAQmuBJqi}uEGQ}%7rBgXbT)rFYMb&JaW3_=44>ets(ez|PIMT!g9Bmrwnas0oEvQ# z>6g~X?-My~eW6rZ9fi^sF_dE*bD#=o#BfcGMvneTL@<$R3&@Uyt;W_~e~h1Ehhcx= zuny@PL*9}O%9`1I7o8AW-&q-TlZP|?kSVACKZ}y89{Mw zvkuD=vLGrXC5z0ce>?Jb7K_(gU9haF*MJkCXd5MhaTLiE5CSZB0cdH*Jb56LAy|@xT5+;N`Q&>N0Gt|?d-ny2l zHGvk8b;TK)eVKvDz)P{dJx>|ukgQGSo}!94AN!|-Gu4E9C@ieMb(S)D(m9X|83-e7 zq47oxknYoB=({FNz}cpSrt;eb1?p%MEwa%-OjP(|wui=A#-ZwEY0 zibk1%Ke|CNP#h*zNteCVrnL;wLH?oLzA-}LzNyb7a&vx3=2r9&AB|qi`RDud*$0N6 z3O1)&R-SCRAp@)5`9KDd_ch7Mb&MtdXGg}p+t<=~TvEzFlJ zRD%#G4A=u9#)Z4akXif%l51a23>o!?7Sz+9psIk=ELCbY11YS;8u7U`NO!ZhW^J~9 zuyj!SM2OzoSCfMJiIEprlngk6iR>Ng9-B#JE=iy{G6Ey>WJTcig>7^oO7pBvn#?F2 z1+@n|(8)xY9w{V678I5lBA|x>wI&#YpZ+8atBzxd2}*t_$)n@9iFa9M$-4Xcbzq8o z;?T+7b*$DZt#7ceZK#x06;vQ+u4)2{E+p$P<62}PnpvSjTdT_d;}E6T!}`jeiHwZ2 z_RT)RROCD)^Hg9l@<8+X%mexH^GMq#kNbG)#YVzIO!0@WfA}M>j~Z|0WCY_!&!%t| zkqa!8W+l=d75G!T$c-IioeZRSaij9UOJo!W2Ha>e@D!cyWC>f`Hrm4wVH7!_M7qo` zhy&r!rRdnELZYjTQ*|&Bj2S!P?Kn@Q)*8sxU;@`15QhH_oKnT$Riuqr9dH7eeA#C9 zZ*0GeG7msHIFRTXMcB}qjmF20>NIuDAwzy7UEj!R|AFsis2EN$nXldF!Z!2XVRW6S z!3z_GSdi=tCu1Rhg$&nOS$i;2=f00YU|e?^Oxq_CquFA1)Nd((YZwD*u}^akHYe^r z;Wf)pN>;=D1P&6GHFItjb=1$ARr0!I;IfzU{;WZazk$Ij2W+swb;uMe%^F8m*_!R6 zk|kKyA5JQ3T=7rV3?c~dAA4>M|LkK6=ne}zw7imGC`!q>w00*#Aw+0azvsgK9!Bt9 zH;tVq2g3ZJGYjiU;7cCc2l6vB()QsS-ZTzG2VjbM>y0OHf6-`Sq8rmxn zP}wgrFg@7Y>8xCa@40NF)fqZAdl@Iujf%o9%~aJ&>c(G~WTWYWo|zsG`%?UZDJJzc zDzd_V%qYDt;{Y%y)D4!lS;0OdH=&3v zz#olT6Nx$>0(O@MGYp-;3#R?x(yLC({cp6&b%c}XhASeTIg_g;VP^ zVi+;-Aw*z+$9bgQ;Y3cR@Z~F#_-0grT3PSzb)RLM5P7eVIm{Bx3M|$q5J`Zh*kcTE z0t1{R8MGs3Wjfk@eq5^|!e%ySjTl{hCK4AG|I&=tjN^#R`g#m+a9vb%6O9>>VT^MK8cnCp1EkU# zj&wwOCKmIy!A=Nd4Qq^Xm`-#5JL0ubUm~`FJ5uCMwxG;Kir`B_jkB(CWKA#N`Kb}a z$vE~m#qkzh15w3+cW4$yBQ+nj#Oxul(d}Tk5rxjRXT9g%Lkpd2Rs}#M+YJ1|xZq%S zO)*ww^w?Q0)!TtrM4;+It+COl*!7$YBhH%$c%yRnSb`9q&1!1x`_{18cVPCh{SCs0 zKw3LLL(;)25346;O~5(fk`|cN9jK>J&Kk~TQQZq%$NTcU3ojj`1pU|L>EPSRgX!}ZVNWfyrV0|WW6lERa z*z>Fp5{S-iXP&FH-C6Av@cE1cOgfAujbxY^*O+We#pT>XdqFny$i&F(P1pIz&fA;_ z3+u5C2im#&N~3=_@=srQNc5$Wq%IIK$N zCIonj7*ilk6lk}wkel7ho6RIkN(AkFoG8u8W#d4MG=+ntNjEY-oEVXB>s48+%21>W zAA$kbtMi~xY{tknothtUD*4KDuEK5WBs-l@N%xgX(NP?cIr|`jnNoGF!59#vR)jGP z<}Vz{TJt=uW3*W_*@*_x?*okqt;T6A1lVkDYX(^tocz`h5+S#qkf6nSU4$T8On04U zFQx9W2HU7RuvfCQvI*xt*gMHm>nv98L*)Y_{XAFpPGLM*Ueeib{bl-%fb7uuV%j3> zY&}AS1d8!w1Tv)<&l|`uaIWmE)Fh%LJQ>`=s02g=8aD`;GOuN`JZmg%9BdY{bnpZ^ zp>A^x?M32qHtQ~tfJ`+i4hcF-aWAxn&G_ucrw`qIOcyT8BGiIdi zOeB2hW5dEC3JG^!O5VyoXLd)^(lzD_sU$jQ^RSUqi`dy9>S)=cfpL~1$w4?|M&>;e z(HFJ|4A!V8(G_X?!V7^v+V6p(F0LMkAPkdn7({?DMJCe-Eq09a>TBH_HqcLNcv^(b zL89CHNXe^b6t)YW@0UFv9S9X@$y!mOtwh!E-&>qzIMf(q=(GEGoFC3HhffhnJFeA5 zIv}?SBF1?}I>v*kBC^qZAPtNj)ZxNA$J`EnZ`Q;5fkjx2xX(eyFN_if)Il=9fuK%1 zP!>G`g?y}yRADtxjZV;h5ui23+GF!9*I< z$Y7i8KsSzrNF)6?-~F(%1{KbFcO~^2UI$9*iY^iBsp~6M*D|z zVm*@4*lWXm^194kZ=C@npC-{0pBaX`>tbH6rrsw&+k zLIQ;v?exvyz_Kr@HI|^jdvnH!(APR^hy>Cvn@@cp=aIHweXfV1_+?+?93J<*UiSRxDSTZyeIU)qXgoT9~ZwrJ*I6Elm6lvuU788yzLO?lZl8PV-{Zf z91bSd&8E6#7*(=N?8*)1Jsa^(W`qD~MZQ8~g(FEc469}9Cpp}MVHdigDJm4k;QK_R zZy4(F&>-i4AH#8wss`WRf?uL&B3tq89QeRv8f&Mjk+#eB3CpPmBf@&~`&=v65O}8j zFfqcV1=CoCVcrgF`z^davjmKeQEPB-B4wOb(tn%6*5Fde$0*z~l;%5$famk>goLnA z6AH?|hUSqy0YXrv;D)6pD`qn#8_@>BqMkAG3~{p>0oxEI*vC&u@tdS@#fC__?2z zZuHg^x0^kJpsjuENaRz-X#i%ur9Cu((HvtOrHHIMuq9-TYPBT;-ie*mKGo0TGe7(B zx1fdfBgnZke~7>pDW#`kh_GGQtNprY%dl1be_r?1XL_HwSEM6w;mIa=AQ!)I5c_}r zecAtqzRN>o!2PvXKjVsPp851Eezp!o{U?l#5R3=jj&q@%#cb_DUPA-Tm*%Hzu3)d@ zK$3d1!OKD+a?1v^J2rEgv*{ZNVK`b;76#z=#Fgphy)$aQG~1~|#ba(h6FmV!h&0@O|g|oKE`14m%Q(QFzeCHERnr z#xbjYI>nPQRElNpDKao*0Y|1g&X6D^&sf1k)tJlN>s|`fRhnw*a8c{E=O8d3nS)Y__xKRfK&1t;^wwcK9?S01lCirIV3k|aAc^E)T4c@wdf_8yHFzD$MFv@mt5E38ITBWIS=x(LqD)Yac zDGeoCf(j; z>#$DgtS7ti{z69%t4I9VbbpK_&SUCGSyM;@u++E?*0V;A?CqxayeLg&VRyAyzr8vO zo9MiSW?+*M&8Mc&`iP3T!W-K}w$Rx2sYr=EsojQpO*WE3ErEf=hZQ!w7#U|h!=zeR z(q{+LOqj$hG8sr{#@2b#L>VJRhEoB|iGt&VMp!b2JaA1#DS4(mWBNG4CX-Q?{h0cT z@J^Cu8}hk0)dT{p;liYMQmLmwTeJgbqpmHP@K2%&x|MzVDGRC1v0yH-zE?sV=E&}2O=pW*SO>bf`I&gvvhUVv^xC;Auh{J6oRNG*uIS`EbR0Ml{+>n81Hn1) zaQwRX?|!eZA(gy#GLL6p^NgoW7V@;8x$Z~a^&s;=a-fU9!(1slDV*|busPVJ)Ef0+ zG-XvqRwQtOO;ceRAzM9>@TV$I9XKZ4%gCsAYF!~OBUjV&Kw)g+W+$sq8rBq!BatvT zw`>(?t~eHokbBrxbTF)x{en4_gWJ!@$Wec8hIHG)QfV?@hu-$J6oc8V#c z&=?5NUI8(1p|BW|I7?@TED<0P>Eh)W(a=`yu?c)tZ2B|5V(-Y&uaL-E96q%roJWkB zQKV|NP?tUIFjp*0T-;;67jF+^gA^=WajA(%G%o z@!3wUOwDHkG0u-988fWxk$&bel{3!6noU@RCDd%zc~Il?Y@B^!{qVIBQ~dki`)xl~ z2XZBd2LWts)J2&wR#n=WGA%-Uqz(`kCMK+-t6xzpwte*Zjx_9+(=)Zu&q;H5AUO z*i==lGtpC`zDAjaOtQHzzzHkY{^`jQ#Ok+b>>(t2Bw}5vsD)D@iERd3>LzfFbi)=F zo0%w;uCca=hn|!TQ-PGGaK4#9^qP8o_uV)J^+IYnI2fZuh8n;0LDUd#re%{I={-D?%if_G0u?~Dclo!D3SX(7L39i?%Zz=X_~&M z4TbflQn69$X}V(SIAuLqh}TIb7y#BN{Abs)8DOBnhyY5T&TREYnlUzMNRw8p1{Ukm zAxFC}fJJ&OG*6}}lfYpiG1eG^*rGZPglvFkpYgtAui1k(vEITgmJC4h`x-H8EQ#pZ zr&$l-x9l$n6=Z`c_FKqbDs>t=S6Ew5g-Y4nX9am5|O@a#bn(d#M9;CU~)CoBg)cD9g3mvVPq|C%Rh6GkUBiSn} z1}Qw1J)Bw_4o|WG&p6LH*kNlDY_pgrAozg|A$n>_N{98T>fjHd=o6 zhBsgOhu{D0|M0oby6UQLeD1YZkG;9-xzB#)RcoXC`=ZUd+*V=NCeVHQ1iVkf2@xo# z8S(5yzC34$$6fj@j^sQ4gXjMBPrdgg|Lec~g%|w$-+sr7ANjYx_=0~wUyuCOFTLoI z-?@JN|3ChdM}GSqFPg9U_b>d!Bfs;G7e4a4*T3YE-}$Ba`<*ZSqffl+6@T2r`G+M0d=lz6B_$Mq&r$tPDGcH<3HV^h_bt zxMc!f*i>$6Chsv<I3KQCW1gn7p+nfL(1r90MP&JV1~#4y{(6R8vWLV%ut2Px{(5iJdt&yiAXrizotK~q!v%tX&-M_VAbrnaoC!y%_X zhUWqqggsKID3UpnC*q99DN%b_0>otvkB!KcaPjw0$xTMF8NtyX#96@L3x^?yxMK%C z{hrCL=5v-1lFWm^0CK{>m(sgis|h4U1~!^l1Ir$y3Z7fOJRAPIawYS;K10SvAdrk! zC{GAZ`IKakt+7bfkV=iZ1JBK<8WgCU&)oUx zf!VYfH@)YjfBHM`c*(#2y?0&r$S1CU=^y>}FT8MU&r8P+y=-jKi|6a5kNo!7t=}5^ zh3(4!$8KT2{^$SkC;t7v{e^$>$fw``^8fXt|LVVekbrsN`z^$Od6x8R^wp6d8Lzu6 zhX3f>zwz52{wSh%GdA*LL|O91`TzYBHGs)JFia2rO>y|XIeZU(bd)&f{|`*0GmzEb z_1m8EB4kIfV zt*n^s&|NC+VyP?scGuJd+`!w9A*1Gih4LANi?(Sh`1JN6%+IRfv&^ua=?ZipE0(M#to#D!nKkAHe4+P z5<^ME-KY?Qm*O{t`xNhiCS>ve*`+H#g-;Lp0T(Uwh=WM9SqP`K4~w?cXKVl@Y6QN> zWW3ZMWPqg}68ME|!Fk=*l1hMxL(!N79;xJwS%_nP7sAlF2^lU8);Zh?4Jr=U9*kxK zDj1N7&R6RLn`MMp5ZGw$ue4SnPb2p@uFVWnpMnV{b=lY0bSb>TxLKd^p_A4K->gJq z=$aXMvo}yBSXy@KItc`n+qr#yhVUnl91fA7>ZW(Us7_zwzlH0t%?LV@*;y}BnHqY|b0U{tQHn&6@kg4&6U$y${UL zDbyeCo!`Mm@j70UpJUJF>kn_7Ec64f{a?vQ$Ux4LC|{-{+`>8a4i;}5$ajPZ)TozD zvpj5!5%bDpzY%2 zL&%viOIUbzJM9-<#DUy0&M31)aIC#v3+em&N(F5|x6G{2u*u-l?{WGp)e`3X@N5%2 zajp$sj-V#bw+uASXq+#wvAre{ImJ0Z#vp^r{++;(dkf314ac3{7;QbCa{>;}jkNA+ zXytxXDqzjmaW64Pa)+~p2!=l~8O%UlS4|Loq62@KcJyoZ<#8Ys%m)Kx0soKR@lD^g zGT<9+O7U~^oKjFXK^nAD+!m{h;cJu@0mUtzZSgS=);SY9XW`TlE^J^IwTI&r2`(r6 zx=S~W3_L8Um9q%DDJ+xXvWcW0gX3Z-Lf5SDThn*pH8&f@Xu6Q4KT6lkBsK0Uf`Di{ z!Md3!=QsbUlhVMzJ1x#)vdorDc}oug)L&BLMc+byh~DS|iC zu?A6jlVoW^Gfw%liOwNNOT(StO(xc&d+HADgP8ZRPNU)486N66SwCQB!XyY?JJx5;Qho;=Iec!uSUAwBEFHb9f)>Av}+p=Zn7s#bJ;mAtP;F z+A(k;XVvlhL}x0TXPr6uCprTR;OVTgj{+{(!G(XYNOkctm6av!$7CGDtL1n%u=jIa$b07x%aDrn>Cr=Au5gJNsWP8 zLo~#x_vGgp4FXN6gladpP#cBvvUhSwHE7KSkOXvl!P>O6$_0EwtLJqFnc> zyPhod=J&mLUN89|;)PkS%>vCf!b}Q`fo2wk>rzGoCJ7-tGaWj!rMqXYoz3iwSfdr1Ut=?$wY1~9E1b8jXGNDc-w3`wYRCeZ81G` z+qqvIIDypMCp8&}fD%&1#*N_EOm-*I$o0$ol176!<0N&lMdnC3 z%mxMDrPm?Q0ER7*N<{-xBXCy35gEpy85sn2ng1(Mt}-gob&OVwn%$>IV^bI~Mz0)V z8>;00XJAdD9VHcF+{@J1sdWdHwo%&3XS-2#dPjuX`(bd?Mz;$A9Cemp?+YKmZ3n|u zCrU$SJthrch0?+}!{BUY)t_?>t0XHNaXC(GPXRp}V&LM}9^}wNJB&w34vg2#e#fXr zZ%Jv89IW(Gw73sLY2NeZ_rT;)!hW0efV3-Ot)FW)^Luw z=Hs|_ru|Z7Avi1xEA-kzl3dRxr|uCNH33(h`h7P{Cd_j#bY;z^@;hCNodd)DlDT-# zICg7$JK{hmYYlQ4T`CW>aW~nd5K~~P%9>~cHe-Kt*7a~Mta%-+)O`1lO}kRmx2Ce! zCB?LwOE{{PLK!Cy{2YlK`-@~vs=IY41_$z#QO6m&e_&AvKkGoq zLe3e;m*GJoK@taI2J)YN*EfIny%?B8EgBFRJuRNbkRyI3OtAFEh|$H^=-Cq;|Be#2TC zNpTDe*l{A694d`VqWRP$%z~sgT3fLBZHt7~Q)D%9$cX$g${yU{wy7hixwU;2kuV{G zoFe+C-}|CwQ+B&A9K>hGkoMq*WmfnkQQoXQy$jqkPW{&R+f}~B@ff|ZS1|HMe!=#~ z(V8V{ge}gKWdUE6!B%L^dX_0Ya8)AR4v*TRd=6b$KBeB~@GAZ0DNV7jrR!HTu=rxQ2(5UwDq|F5b=_Gt<){1g8&M zOV${)S&f^H?7lHB7;din9v~=we?=>^W(GMcDPzq}C~emwGe?@GX3u5cw$7Hw-K;V* zV?vod!A6`9G7e!R2A~Zp(3(zafYd2*wik#MryiqIFvIt5%bB8v>3!z8HbYTi03yYy z0WeVHymsg1EDha2!?T+++Iu~Qvdy#l{c&`keD@1w+EvmglyFD^^BIBmHaIO^nsrZ> zjjhS~@Ei#FVsjMdj9tl|@(f#(G+15Po9%6i{$Alx>ogaHK?8TcY6|Udx%9j5e90f3 z9mtpAG%mjM3p$Wskr!kc!h~R>8-Z*AaU+GJNE$47Ho_F@csNQ{`@n6mvKyI3BqC>` zEuzxk)I@$YmK6HZ>@=U3`2sOGroS3gAO|8DBjZh7H`0bm%La_}_-qiO@!QC3@>w>$ zDJW-S)*cRxrF3Gs^RjT<$aS3Ht%<16$D)v@f!i^#b{TKMwUKW&>-M3TVMxy{223AF zMx1VAm$e)syd77|{18bDMvzJO=WDZtWswOBQqWW)W-}nk1yXv~dD?KMu}t?cjI8;8 zSXA>lOe@5=V#MMk>nMet93-XjUfJ+=s4vu!21f47j^<20WQGckW*qyDmyJQi_?AWu zO*)R6?*)pIv16S@_$aj8M4C3~r6xg>TUlGn_)?PJ``)!!XB1;gU&Y)X&KXE&ojZn7 zY4HX`VKlLx_MvReAaS=xFCyF@!A<9?(yukWF|U?jK6KI z?}VpCtof0GmK$zt~rv zskO?@e&Z-PCr53iH0#z>_RQHtJGKXh5-mCRXY5b1r&Dc}{qXR|-*)K}?|j)fkY@(M zI%gnXrX#uNKwx5#fjlt7TGp_HikT=Kri<{A1!@^FOA(a$Vb8)Uwq{O742Tpzem{l3 zZo;I=)Bs{YfLGeQ6$4#Zskr!J@NqKT=!-8OdOJXCfkTviPcKGNbR!S%0rNN945{$PY&vk`NP|%O=?K%E1re$wnb~5z7_gTZ+*o25fUMTfsbG$ z@40m<*K44Stb6CKC%Y`|Gtfp^aYUJO-Lk-D&5RRor#O}{*X-UV>xGyRqZ}&l7*#SZ z)+w27KLcZ!fJX?=xfRSl554rrUZr%~dlB+UVKna*>Nq-GM%=q6qw;(NTSAFPO`!1W zvgeYG5X4M`9ijp{VC?a&^>AN-f@z+_A-Io{frL;}I&B>95DHpXksdC20_I;b(LBp# zvq_dw!ena}vhDIb=X2A;aWtQ@AD|^Gh#LDqFo$DhU-Y^olG>o?P!%XrVLhXBP&l`> z6K2IHhMnT5X5uy`0;ihAXiw&QeQxVqM=d-otaAqPWjc<1`QtK>@BVAw{oo9131g%Y zK!y!*fEYFttlKD12@q6cRgpa+j(u38Ad5kFBq)VbXmuJYQp#2D3=|Y5m#^DMGaHr9 z-bjY)iClwI<>J`p%j*LIncqhckVDw$CfIijrqUdNYLa@p$(HRUu1&9nktTf+Mq?ag z;I9=oq{!OZ5bx31)E1bnLmZv$N$Va;|DE%(R8KpRPx2~G4LlJdwjaTDB+`UfKtSM> z$rz1Zr*#<&fmxlne5t@h$bDAZv%vmIUqYUr^`F2&JcGc4W^;i@*k>yd6NTa`7G%#5 zG?e;0Q7XLvV>%T)P2-HTcX6O>2gm8 z`;ccDr)(CYqnci#WEa+3QhnP$t>P)t9yp3)#>@gB=N$*5tzi~P}bmFYy z@J<(WQ)U2BGLOaQg)5eet{jIl9l54ixBdNfsCn;WG%k>Y^$#&)BRUQHZ2TJN^p5}y zAnUzZ7RIafgJmvdE=JjJ>1OA1U``bmHcL9y5S&t|qto%b{yaA%(=!$~WC$AwS)*he z`5l`yo&BPk?KTuzUue`lzXLpzM$oQ@vtlU95B)puL(t-6y3~mR0|_bN$aXI(f5SD( zm?GL;Z7mFt(dNmS3YqAba5SgryOebH9_tt=4dVzs703;$G1OiLDbY(JS;Dm-lk995 z?mL8$W|pZNEw$X*Ss=I&DYg;N{vc_+TO%{@Ir=-AHEf|jSxw+j>C1`_x<2VCilco~ z>Soln_H`Dul|G?1qAa}5-|3WQvcLDv7hd}0yC~fAj7o5s{kTQ!kXC?sm!3}0k_<$| z!mrZ%QHtm@Pk}v9X=^MQG0h(KnMT{L8LYtdT53 z1J?$5h4~(u;P?05^Qu4khOn>{W27Vf{O3ztfydWC{@QoL$4;>?DWnnnc8jL)T^x5K zMvUWayGhx&Ftj4?aq0uHG0ve!J9Tfhv3Ap#c6PW^YcM`=4-}Cvk&(sNsR<-QpgD_3 z5DhAvh_4l=R$s|pl*)NfJT1iIrn2a{V^jmrCDOLWk|KHVVy7VHiE5fr%g;G0)FqM? z!~lD)llc(sW3cmFfTYZNShL@L#|tj~!Mk4A-~cEW`4k&2h26}Gc^{h-Z8)_*OcvS( zHat@@p^z20zuDI~5Nb~ctv#6@(BZ4oM!@+FRF-=#fhAd`0qOxO5?I7WRk$(dL&PM` zrlXfvFjdMvS;{M?k?>6eVZHK^iw@+>!uk@O2QPbk4MZ9*&_dG5d0?yF$%bYF$RDq! zO;Yv2bJ@5}jd{T79&Vvk%4T(hGS5Q%JPlMB`9zR4BBa(Fl+<0eSXr#Sa7i)(sGuoe z$_j}pZH$O?QYGMxnmNQaIu*xmYJK4B9I6&gRR*sTxtAl zmvkat8Bl6#F{`9>&;%nufpzqOnD`tpbut+T4ke?ReWpP=Vc&N4Bi3jSgYTu&O9SSt z+oz_WyTO3QSc4q#zXVEtFRY;!>JMxkW6K(4mQB0w3%6zL>PXE5GHJcdSun0?lo)E< zVzdLZ+8}ylcC8&6aVsygL(wDxDAAIBEdIvfm&$tdQ32gF8$N0q1V!oaev6K@8RGWw zEbL`1!`_d~OHTkY*&)4PQ+U5^$QuhmE%VQ3&sYUz+*h#jkP%Au?KxcPH_wb36OM_m zWPXr9$gWchu|B4h%sl7Rr-Tp9PzxdE%;RKOa}|jb^bk-j1l&5w_OR{PUTZGYGOMvR z_xj*yr~U3bU}2q#=;sXNFXceK`Md9%PTH_P>OjaYR?Z~RFp)@_ujVyrL;^-pwUbCF zQFx;A>KL_1?wkxANjk?D_pTn!QFloyEnCG70GKwbpgI)%E)Mu@I!2oBly9B?Cj>AXht7X5^F z0%t@pi|q5*=yi=FueFzi zVzA6KjipSSWFYLP{M*bV`=mW0D*%au0DG6np#xG&4X6Y*n7v8K-1yyjztB+U^OV_V zui$*jx~l<-839?EKzoUrF+om2uFt{YW_U#HoU{-~u~3m3EJSr_(JXzoC}sZ}^4 zmrNghuBFz?!mKiH&Y`sT-4hONYxW-~%39CX(72cF%$FvvOng3XemBg@oHy6>Br!zM z++gAeOj+*)OA4u4mr^6{sM8c`-+Ca|s{?8ON#NDj4-4z3F8$kIeBmR{dv+bjxfA`% z@E%_<1Nr9fMu?1zB3LGyp}i42u;}m*or7T}sD!S8a(?nLu0d! z6cve-atOO2%es-%Pj+GyVwBYmb`(c(aKUh^B74AXrC?$Zl8KZun`nhDbvL-&aNZky z+(;_OEb%SA6r<7|k@=alM`&=45J43_H z?Tio2YlV!Whn2pZ4j1CRo9^>>D7O*3gry|be32r23>GTnV^?rx$cr)O9_Lz?{&+tQ zv&0Ao1U0kEvs6AK83~zPAVh~3S(gx|+cilxvBtO9vpBp^9G%qcfdd+CO-$%&3^!|> z>`}v*-;2R8vy*j4Uq@xnTRRepvY}JGGHMdSl6$?I8E-A&fK!*k-E4RvsT8eS-?FA) z_RYyn%6gLN{ZUSZ3?pMhYM^{|(SfT<&6Q*+ZfSd2FNkm~ERx1-u1CF|Xq zT-1Wc85?X7Ftpi{prK<2He;v8hvM$N6NQ@*`u?E_kCFe~>tB!tRv@s?e83t=f|UeW z_H=}W*~~XcMFNhp)^4QOl6A>}Zclm4bU z-K>8Q0M{{RCa`xQ>#6^VX2AMlzK_!>t!IwF;{4wK{0lD_7S@@@`{j9#zWNLGf!sed z-aOznzJ*8bi~t!1t`ysDHV=`7@f6M@Euv!xV}-0^n)@_57Mg>NCrWMMEKZ}wCy>HQ zbb#$LPrKdFv*Ckj2d@_Him^l;IPYiOBXc-#EG@uC(wy2wjF7zZ7}`Xt-B2yWD}cAr z(CX*d5SFNrgM$<4`z70Ilc5D^i^nk>vq5FLRCB71_JFE#-`n7%sGVyfFQ3eVd-Cu} zr#;wAz(sTIJIi7zp@Gi$Y>K_;adn;6NSd7pyV!DDqxJzb>^ZP^M#berIwf>%dUG(=^Gw+PIG8kv zdgj7l8&ZqfV<*8u>MqGz$uydEM*(8?l#ul{(JD-N)6^$uU^P2HiXWH>iGKSzZW>8> zbh(mA;AndfapYV}@9jYO)`g1+W+Lr#PvvtHU#zJ~*WHI`jF(P5RR9QfS?O{xvpb@Yt z!1OuDR9pUk7<-BCO2-b=;`L=c*6MQ=cymMP(_$zlo zmIo9U1zt%FM_*8(A~Q^+yp^>NQCM-+ z4NAZ5*>DYvh*zK#!x-8-86FNLb;4yVU2Ia+0mQMS#w4T3zK&%G8bIZ`aMWa|&FCZR z(I!mmi)A7u)9`f(J__eDMQ{U)rN#?mN#(`pXKj1laBL_9BW!B@QwOp8mNQL&fy1Eq z9x0z_gthOdj4|)cEM{wLtI@XgD)z7wKxYr6o+_Codpvb1=GI74cJEqGU4&vg?2qTp zJ>hDjMkT#T>oNYVO(d1y^t^OFy1)++ze5v?s10Lm z^p^LYpWQyj>ektWJ12t;oK4a>88NrD|yyH+c8?&Fl&i5Gb zz$#l`P>e58Zyc`KMVuOcXYH-6Y@o1|fo_;whm0PliJVSXDd8&FvQ|SJE?Dsa_$qy(abkujO^85_+=fo&t+xT z6z=U!2w2tq){5eA`7#_UW|fKaYZ*hWj=|5T@Ior`N`f2J>JoMJLK z>taAq(sqa871;7LhBOy9a(LPJ&Xr#2 zhmab8y5>4LbkKT*5;5u;2b@jt>O_@h63`!YvJP94LaG7V>}sV!5*(y|LD>l*AYq&s zL>xk*YaCuBB8bR|4re`ZkWns9!JD6}?ki+SdQ8R%ll`WCBW*s-ub~7R+~7Q*-?{o0Hx+H0sDBkGv!6D5hV7J1J&K7*L8 z-`qELC?Za-SDT8%qxAW*yR54ijkZBBQL+xtQM2OqJ4G=NRextW{M&hLUBG72 zqo*dyxYmj?7z^qp&mvB~eJ4>$MXKH6vEzH^i`ooMDv(m^9ysRS^BVJYvSw`t90id)Xe7Xk#^KN|uEoPva$wE`yCVni}&9LXd$=JuhbD7Tkdxb;JZOII!9GtN)dH zluj@8NFbtQ0Xq1V%&}8`C0fd?BD?5*x8YXVBAIYxppszHf6}#Jt=O;3K9P804I}%L zjAT9=c$Mr0Ixzcp>vz^SPG>qzmC4>%1Lui2b40nMG=%~)hfq-h$K1z~JM34pc9wk@ z+r`-z2F&{r2)F2;^$*O=6vJ0v`mJC5iOZx+&NSYy$bpQI*x^7d>MgC&1I%GmuSt3@ z#W>hVaOCZ3mMLXq7{^1TK*6gDrbeahI8VWoji&^B9&ih1D~oV&=EJ%$dbhK=jFG@t zM1HbSj!3x%%LAyGqMgYtmNsLFLE^9^C9iA*5lapbk|(C-Cwiov=z%6`ptfd_ITG_Z z^65P|Kv-;YBQ@!k2dqJsL3UC)BlVpWp<6FlxGGp}is?F$rR+vUc77Jv0fQE!xQ%r} z4fb^`{jrcmoUa}F+gZPLn)Iy&v0ElB{_PLI%bDjzFW~|38(crR%zjYJ~{o!3TI zWbWgjsOQ>*_YS?a!bGWur6*|X3622RM$zcDH9LX!&)#L92F{xI3&l74&1>*|DhUtF z$zCf^KO`ZAoy7i=V)421dTTZlZk{7uziAblpCwWSocF0oPmHWNuL6km3e+wijuTQ)KY zk0q+PVB=MGdFB~i5L`BFE5gpSTyoL8HcqRkarrMR@3LKdyPHftMkaD@&w+KaAJ zvkjmnj5B{9im#!_g0E|ULJC-?Fb9@QA+-u%w?t%!Fj8}Y0@>+tDHeNZlujRLD}{C) zNW|_!bJR)lJ_;!A_pL!l93HWE6QQrGEn3T%NsP_HjW_@t2*!-(g474&drM!912KDC*^R&$p}%go zy>N^fhz){iUL^X(P_r*eTixrG)wGRh^Q_k3H$%+YfzQV=%B13R$)IeEYc>(5yv(=; zQ43XZPbu2B*JbxG?59A1(tG#k(wa4bx&QQ{XwbKIm!B?oKY?otvk_5;-6*wr zr&TVyjx09Ly-=gsnCoM0i6|brwOV%ubV6xMJ|L@!ibSS~dhe()hmDm!n}wTnj*+HG z#_pL&z(k{HCF45}Jx-Y}z;z7z(w>DiFS+vkdWEo6ToFAqK(KOmt7Thp?rkctzV2mgn zlcozpIrh~wnhsedNo3?Cn(AR*hp?H0heMp!rYpO-H>#7#qTyA0>NJ1Bxg>s$EF7=j z1~$9R`GOgff+DbABlQ)qJE*e3knMC20|~>;>%p|=-(gn8sI?!U5nOokDWcE8*$6VM z7Y?^`vlmKB>RyMSktjYs1#79V-e;h=^iN2UboTp+eHKTv4ul$14Q=3x!iPTJ=?9wY z#G!`}!M#BZB|7D>hY4jt9BA{N`P@*!F{UZ-mhFdgUK~6|PWIA{J5DAs*Shto7#a*< z=)K6uz{sooPNo0V4zojFgJN_VN0&NB>C+*2__L)*@2rqh?d}8tCQGW23*@uxt6D=FXGRbcM@7$!&WqQq(g83O5NfEvtQ(Gv^AyKn075`Vh5`MT zS{#mqJ+YnV$?(ediU?_ck7vs71m;cFG|wwUnn4~WkjZ)BzB4>cI(_PoeSTY0Rc}s3 z3IjVFHq?9ffal*P-yLu8zzE0wE)L{E26Be5z6>w&1^Ymzk4zR}XG&mnl+m`nk^YUsMMht5%0{DBu^94Y5j30R zh^YDOiIfvr+I1X9!2u<5O?Fb*6#nMGByu$aGNTaAh*b9hX_WodB569FDITW(z&gO~ z^O>aWbn}wJ%e}Aj1owx^3Hxa7E$~fh0DguA_01+MPNp`JYwsYW5F6ULU1J{>QSoX! z_LTw&Boru1fkT_;WC4YvUnpQ5i1bIZiT!ujOHeKYA3AfytO;7N*^il1*PQGG0|w5_ z=cN%$#}KLSI4=7()&Q)8%PE7DQ5S|yoT*s7wU0uH$!y3_?VH$M453LW%Q5)P{3r+` zRldr}2X!@$rS#p@u^N={9_+zV#C=8@v1QcdT9O4T>vITu#(8?3>qzX)u&$A!c#Ix& zW+h$nx@3VAzsKNrPsG^g{S|CH284x-0VP*wXm+#GK)%lsS%8%9`{)o{$Vvj~3Gv99 zGq4HaA%uYweVYvWkV3&>BminBde?S4`&T;V<{1f)p;t#yU5zdV)p5qHr&TtHvx4>& z(=h{$ZLl|#efm#kkJ@Xd9-2_q1${T}C1e7{FEdy!j;2&`*1Yx3zDj3XU0iBneDAJDCRrO2+5ZFtc+Jn7a zqEhxUtqfL442uQTY#t&gjAI>GHbM&fLJgS`2ZWW0i6`7X#nBvyQc*FixlZ+Zwurv$ z7ID#L6WL%ECIgkUMiE)?MEj=vizgq49RrgMFCM*hnA_&sbRN@;HPID~Qjs?2wG?uR zFzJyAzg^6CwR=*Nnb&Rq!xm$6Xi_Nm{*!@qnxY3pmP{a{)S+Boor(PwV(?0_uQ5+{ zfk6k;51xLKS>Mj*44H!4&%tcu$UR%gyiPeAL>vpxSyZl85wKLC6zRFjYZJxeG|TG4 zC=^Q3$(eCtXl0f8?9CM0mCo-H6a<=Lj)gr1KHv7cus5?VPP4QV+Mc6*UQ(6KKG$(< zz07)?D!*HRK8A87Lz7&PwMAR3K|$DwW2lzaz09fYmxzX17;mTz>qw6Pf(SWAk~+Y4 zyDxi=&yw<-XWRfJMfn)^I-fvRbGB|AXA|l)=MC)NY|Zfr^Sp5WO9>|MOE9A({a!2k zf!aZ4q|ConM6iZtzymR3Z(S_coNS`B@%d~SnFg>+ z`;7y|_AF^8_M~->4j_wjsbkqdHvvkW+%dH>3{OcH_su@}op+pOqMvIZUxxE|Yz^e; zPrJf_QXf?jQ_;OLsOE39eH>h5Au@VBG)C13ZVH^}Bt<*BzL(;6qCL9N7h<`0Cf41( zf`Va^l>T_YEmh)d3W@_ErFKri1u7;P&s^8hY0O5<`x>d+XE2y35pA)1Gm`T7fx~i8 zoa=p(P&Ye?s%N6N%2WjQFoRL_j$u~{A7VUjquGko9Q9eQ3+KkVggHcm+55gm zmK-_@jDdgJ8*x9zfT%Qsa@sRM%_ogjthJ1p$e?8XrMMp12+pL

ZHRkQQ1gT$izi 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 IM6N<$f@Ru|Gynhq literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/face3.png b/misc/avatar-sprites/female/face3.png new file mode 100755 index 0000000000000000000000000000000000000000..9dc5c81ca177339c1b7c497064141438062d78e0 GIT binary patch literal 161547 zcmeEt`8O2a8^7Jy$3E7v6e-Kt_pye`Qk1=zkhSdD#@I>5mXdueNxcz5r7)JVGlLMx z5)BfA!I&{-zCPdo;(N~bhkNdQ?m2gRo^$Vg-RF7T%$v5BTFDV5 z{+9qO=QW9Ft+DfrKHT2YlRfu`*-G#eLWYmoXLB|1bE@7i#-I|p_;^>`>Qe0*BpMF`B^4~dtYAkD?@X1>cE^k{ua zomjGLc382?W60X_IBpwNLI3l2I{f_mpziKu7XIW5&Ew=O4K1EmEp&+( z9k26m!-;&_2^B|fXBwQ&kjc>+JU+kW0{h4Ib4t%g;<-f2)`A=NL*HP^5t^zuCA*uB4k$?W! zeIfsMrQ-3?jFZ96mXk;5{4@&jha|ilBLT-O|0J@agO@Q~!oQ~DRQ#qlxKYKJGioP| z=jW$`_ko+i%Rjp@8%IA6&pM;ZmZ=?D%5Z$|rwvjT-Y|&vlyFM8GeA2z>t2cf87-Mh zW%V)&Ui3(k6jM_6+s;E|gm+DLuIVT2O1}KCVW=Ls6}qt((v4nlH(JuuuOy~bD(8MZm-|ybOXi`dYx<#O5XvHAHdhU*BWp zO)wEf97{V378CB=s3t{sLgO2KmBsN+q8n?Ihk=u%zNiGvSVS!X-WbKXqeV7cqQsvI zwH?s1+{oNMc_)GYMt=x*6#_~83wd#^`pn9L?9FUHIB)p5$IQ2)BFA4WQ?lpo5tNoA zcGSCf+$u<8_>&L5h6H`|nJ$Jh5ghmU9c7%hO#OF$$ONM|D%`iJOL4yp)G;JVB!-d` zY)GNHY>Oy&Z@BzK#eKlQ?Tm2L9SK6vvOcj1D&C!eK8@+}iiZ*>avo;4dX=0m?9QqT z=`H@(yI@?3{$`6Y$8{}V_VY^*FOFBHugSIz2 zV+@^Te=go@X8HV1xyXo2c(@$)t9|*v1_K|^HY6_884(uhRnV7bbqfJc=cvJTJq{%d zK@4y{KWD%*kC;)ruG8;3!3L*2mLB^*7{PHfUOaG|Qm$dh;1_V*N~<>XxM$F#6caqL z9320z*RGq|!WtYmNFH1M*r~pZRw8yPqnZ-_CE0cEwy+veo(@V<%&8N2p2f0bXsFpc zcsHrm|5P*P*e2I-Z%ccfC?*-VCrdh$ZGxY-`J?_2cbAy(H#_&2T`6jO!w$XQ!ulvC zaCbP~fcUnPfD_*6a3bfh5}-e+KkC78d+Hr8xT=W|301_c<~(Ux-D0HI2g;Aidwpgf=+;=rgU?qT&PB-UZTh%M3ZO^Vb*#Gde+e#axk@VQo`h=@&}T*D!8 zs{(8pVsg-~4vZD}9DmtqU{8v;_)HZ$XNQX?p}K!8JuEKGdFi{wamFqI!ZU)$PDx^- zR{fm?B+^ZC;W7wwhCd?>?oxMXq2nrq>BnjhPAgOmL&67+sfXnVgkHp|As9jWOUO_c zg6e~d^~soc@Cbh5+EVeh3AN7d*pR5M9rJQKdw)u0xfoh!GdJ(6ZihXQH7MQhkUW@h zb1869e`n(NB1%2DL4thM%|&cNBrp{*g~G;9s-g%#&-~Y@ZJ~c>w=vYsWzsI1zMpPl zp)s#cV|$U6hZ!i<<5;xiEKQ^QQaKT(5x*>j9Oq-Y|DNQ#dBjnMHkJ{Tp?Gu{WvDzD zidYX1HbAWRdKe&(UTVeQX6OD;=Oj>{w|6>%7drpUoVR@jP1vBkEdvsP$F6Lb(_!fqv10Y_YUdo*q{J!`%9u^@x{KG zI*z_1Oyw+3F6MZ*6Q49T7%ws^L2z3zd=W*7!>ui0*R*zT=;s(F+{i%ocdv^qG#kb6 z5cl+ne?B^Z6G;1$843F*0%%p#Vw~kBWgh#zdqU?#YypBnra{A1Fzsk;GSRdKlg`rC zua1?EXhWf*eKvuv@zD6a`{nDjhI~uti)AS3fI@p}fFjPnJVYH8bm)DHNAcWsE@(iF z4Zb~H`t#$iN>q#FbnwzQoerbz@ok}Q%;)Oz?gEkxiUvl-?d)?P)?*Sldg;G@X~-+j z{U;F3?ohcmquCqRVoI$OOE^T8cl^2IYlpzi49W+`pY0ESL6A+!yCo`a zt$;`)?`OiJA~y7M>DJf3>A6!$xa z0+wDqjZqe(c^7e<>G#G#OA&~@Z-eqi`%ftqcz+{K;sta(^x+>v`F^B?T~Ufx$J)cK zz;2FkU6ECoN8g@ps_svs{g4;j+Qi|uLz5o0 zj}@_cQkDCf2ev35JT3^kkBWw_>55pu)sR0_;m2fm z?^s(ep{<_?=jMNGfTiVNGmjtDG$IMJ+SkAEqek&D6OYa8P6wlwUWV3j;d)8r#Zq-v zyzAQMY~3*;3O-Y9H!$J8kg>RN+5sgN&dk|$hmC6nCPSy20AYh8@z{L4th4O{M9lIv zTw$D_ItE4A9L)vCE@$QDLW}n;ZdM>e!gi}Lbq9A-M@8MDS#U3)Wu9yO zZ7>;%N=kan-UMWf=W1dP6O{1ZH{e!a>d#?7UIFZZ7-Lpp+<`jeg8}PWl_5w3$<5N& zsPwn6`cmV(1HnzJ0%_Irj*)^t%NG-gl;#fN#@h#Re6-BIq>_Io_ zB-B;J`g0?jafzXIN}JvZ_rfVyRJAh}o%CP1O7#%I|E zHjtE9VRob)Q-&)dl}*gRk!gW4d`jSa*qjf06m-4Fo~bv}ScqL7Bshkv093^xB3)!* zWOiiGVnNh;2ZX-e1;oQy@2bt2&&5M9Ri_O>=rw;qA~bx+DM!y}Nrm1a2AEdAEx+A> z;g-j0uT|ii7Y8k20;L~roCZ)ka;g8FWmHY^3^-;NLsQ>M8{5K9E>2cX3xgagFBKbE z+tKGeZY%TSpubL2x7{^s?g7GP5ADWvhzE$&k4Q*cvQRPOX(I5r_|S;+z^Y!ltvwe8 zpMnz8yVbtB>iR4sy?I5Cd>$1Bj>srh(@J&S5Hab~xgJ#%tt6|+JW%Unf-3Y$p?i-; z4Les}NfsNhLjm_-IC<}dm~`JQ*0G9EQ^F+y*NiEJGfQbt@do{cTf9kySm1V&X39;Z zW?FmNioLUPplz)br0}7%2DDI@ya|9e=Coy994I*q9!PAP;HyuDHoePW7hq(0 z_UyOJb-@7jA~8{QYe5zOV-`@q_o@d_s_z1$cJFt=OEVELYe2rcns1RjX9&|1p&R7h zaEM7|KcHWhNybqSDGnP3wZB&LXc2&QcRK(=8lD-%9cY1M3V}jSxZ9)jRrd7H5Z;f( zKZbB8tH(>+nB2b;Eo;#B&a>Zt_?&A(yCNq0`xInVX)vTu#~FQy-)8MU+G`Xl|c_s>iHCqv`(1pYEc6^s+mFl zLX3*^g)ofxmL2}ij1QARTVi>IKlH^6t?4Y%kF9?~z%X8rLxXro&_afZr&8s7&5Hxc zqQ)^V4TPtnavDoAyTubZNsEiK6>(ni#;lsIAVq7S6;q=S{dG5hZe{o3HXuoD?Ff-J z4~Z4=)re%0O}=v_Lo3mDGlBeDzyAsE2V+&g->y=#9>;6i@85@%lKHZiqJSE?dnJaZceMx6_MRZg^`08MC z$&}p^BiGh+7y84jz&67&ljGY$X;X<_)@e+<+9SpKMeV&(Ycy3BF(?1*!^qKf8_7hZ&>^sz+hZcL|>J4acT^5zxc}^$5v)P`HL7W#Y5wI_@(Kal;IK ziZ`HpSLtQ1b4xWOP~QntW{WXsQiG^W2^t6lks;T`hl9dE5`E^;myujbDmPye2@oG?tQ$9;r-&0{=n(*aL_D+Y#&49XQFNyQwKcu1b7G zI99J1xL?s*ET|A$p9^LYa%e^#Us+Fu+%WQt?KCQ(9*C{fUpws<8w#vcTop*Yy`-AN zsOG{1Vh|Z(WyzsSBGEVPe=!v(Qgt;Fs^C6!XMfFTafR@8xU73p9wA2GNM|BdSxYe7 zQH?^SbGz^ZY!$U|HsE3QYAm16m}^qc%b3EL*+~@CBC*5q`*8-9ow~^3Zn^A|(&3@Q zVdCq_n&(AM4C^sSmm9r*f2sL);tGqsS>ojee{d2c`RbK4UC|pQ8^unW1LUOiOX6cm zjsW)FqrqInZu%PPY#4v~9@~6pLg!U3f1(p9^ko4&>zA zDeLx}q078v^wIPX*z}mUCjD04|9WhkB_KBkG^{z&Uu=S_U-ZKAMD#yiKphFhs0*u`Mt`V^Kuj z={+6PRq0QcGfo5uF^jkwx+WkT+y=wU5>ufwl}FdE0{XF4r1(inI|X~p>RK<qAD?ui*W}o_{j9j+~=W_j=2tZ$EoUs?hKNU! z-STcZV!O#T@Aq)3N$|u$i+id@yCMPE{h^J%D{`gIZY&&kX3jLkmdf3ROGq_%2r*hr zp=$wqovEsH8JSjGYWSbRCFtKvDIR0~?^FC4LoNrbYi;l)9sOfIGkKYS5TCZ`J`2-3 zD?j`S=0k=xd-l24TdyuXxl==*(Xyo@kuHTm7v+QqpgB~%y_UZjP8P-RxVElVQ6zR= z07Q%RCN*K#Q@_Y~^Q{H@`AanD-5pdYS!9$A@q`3?>VFl#d;&q@*u#@W5D-&36UR## zQPsNIqGLl1wHHSziQWLU#MQSKWuIG2OBm%^znL{IKY@5|X3`}k?Hes`eYdEQ1Sevb z06{A{OF#XzLG3yC7LC2}OFH4wA)yUodJ-i<1A1+Vo)y_z4wq_|4~PA!Eu=l7= zmA#dN%PCkObc}|~MUOUT$EIAf6JwW2op8QPNjJvz#oFs&H+U)JoT=9#Za7CPm4|zA z(pS!|o|rX5WI>zS(%;h|Jjgock|>7Oc)lwd`2Nq{K^7w>L<+b!w+5xD@@w19i!udR z=sZ4|Tz^9Omz#i5Hm-QK7zRFEvtKdgSVvt=q^vTAR?Ej=nk_-$UikU%t`akS`&ZW` zl_?j<*ZaQjayXa)_6(axQnZy`^VFo}XZqJQ2Hj+SV!H%`L-e6yT4iY1Vr1L2MNOzD zoGbULgW>mgrL3?Bo;^lUg`0P%kJbx#4Pg*SyhM-4^x$+IS=IA;%&wp5%NZ>1eFMT< zh)^mkJv~4dX6R>6W9hs6@X_A2ZdTh{tvJb*u0<7sk~#-rIv5hdMf}Y_{KXc|vMs;% zjjw;9O6gn?nTT%`kt&n&wH{X{;f4-%bPAMRqSlc7m*A|%A?La$w8J?63hc^_g&5w+5<^9t;KTK{5a`tp9|7+J9F01tpr0ZF`57b zwE9?A>u5ejP;__`uaj4!hJf&m-0saflTFohUMYaD=NOYa$kmq0T{YShOexg*$6v^2 zy2j6|$UpwEdc<@&7fn7HtMiDVv>NSq5~Lb_G0cl>pL?5fSz*$~NL%|-7ASz<4|KUX z^IAxO3hd1;0BDxb8Uxb6)^E2cSv!iYwTwcBM^@K{=udH5!$edl4@RyT8JaS6PMj=c%Pz^-nZcW*$#M^_2;1 zKKTvVd+s>eAVX%#h}@R zsi`-DF7*>{+FEQY-{#w&)Q42_j0>0=-yMSu+`QrN1W5lLZj5XD&icD#T%Dhxvo}L7 zlp$Nj_?`&;!Ba*+Aj$YK{lW7GD7&3rMp)>F!I&5+ysg0OFYSsuHJT2>pI87sZMsGD z);zB-e=saESnYmCANb)ZP6lDEU=}q> zjKg$QE0$PdN?{J3{>l}sAaVid;FnT4{s}1OZ7asCfwbP_p>J*Tkme)*_n{QZ&=O*| zT4xH2tZ<@xp{v%dvtj31{sS!-(R|fzzpR^Irj3sr_<^pYO0`G$*&%oQ^^Q^xENv~#G^K97Tvn~GSU4LwVs)*GF=`R+!q%?k!%UX1&k zTn=G}HNsfTTb&;;$Sb?5G@BH0ibb#F)^@4LcP6KfKl-po@6DK+7V?D0Tle4EVYWqA zs>Mjj6Qb9{o7@)@cv4g^6vd4|LiVm0_nBW_5lDm^L7uwIi&!d2mEjNVM(NYR11183 zoZl%K$U*Oq&jX~ZZh6=?$QH*gd|Rgb%H)tL;x)YaTrx>+kx|_2Cu<&%^TV~M!VA}E z0+$XY&(Qv{WJ+Qxm^iTYl0ATpaTb z;JS;xURAjx4Z^-@fh6AZghQ-~HVQ=yfX|W{(hYOm1Ff?^j0GQd{Lr_iPp6YL&+EP9 z0|DesLU|eVTBmbDEI`%V2({IIXHRpT>6z!SLuX-_-pUq0=NUJzs9FQbW}8I`)M%6t zXT(rtDu>#taXkeXktcMJvHkxg>B@3?Vh%L0sia z|B_63L$*Hhde_{9;2W-1yw#k#;DW1VxS*kyzeh^&IfsC!@Pk_`+xmm>a)q7A_S?V5 zGXu-Q^L`wU(nu;sw2u>ur#Y?iYh`zxV~aRVlWhba+Ht&kZKO&twGRqvyHzxn%mUO9 zvedAoFN=TZnZ{E*dVdktY3%%)SigcwU{qfZUR6xxSQhruwxfH%=}^s8wh)6ZQRf7p zEuq58j$-!;?W>wD(yo{I^I$*F$1QZBD&2cH>;Htxark@Kl=#>7f9WazK?OhpTs3)-hi6?%_|`E z1nJ>VkrV2?J(S&KVNro@xvt2oF64bCd5DTCu*&3@?ER8Pv+!ha#sQYTWd$r{9!!p(5LlfgeV7Req%% zRK|2`(}%3+H3~Ic7AR{ed*!B7axtPXvG|xXYC=bz{BP`Tuo_QlN$7JbJ(-!|xaeo| z^T@>={*GDdPuh;aiF$31lR-a)twLc(+Fr=M^Wgn?#Om*8tAa8OmGFm|W(k*46V`BR zyIonTcBh!HR8Wbx-pfS7?MHp7*e9vI%*?p?N`P!?689F|B9ZP|r3kk{?eYcdy`g{p zA!lkY;YRu9=79<~8_GENp^0k9Z5~EH=YKu&ZW=aw+x&jt55HVx;n;w%v^)l3{N^E{ z?CSST+9J{!yc?e6cmU+6CAl|uDHk`2VqjN_Ud#&R@%A+qf*2qRu}h&cwZl$Yn$FNd zx`LrsEsl-y>0oXYX!Zwo90Fq!WAOL1 z3%{zybL3GA_O-X(M{a`=IpT=wnSMcj7tz*-tomAxz0K>Xe;{o{x5x zOdaae85i)7u38zE51;tTzA`TUdbalrCAsk2p zB+5!SOV0L}eAX(g3Xo~eVdui12JFsMx+3n(O5-T`4e?vhqE|-Qe6IofRTxVEK6Ucc z8Rf)_uv>GzP9YQ>vm_^*%trNtI6Q`Lr<1C6eXV&CHfskh*Yo_!y^&<&#AFuBU>c`2 z2%Uw!L%yESZo%?b^}c_DUUz@B8oUV4tHHP>CG}Una{O({m+Ho5MKwF~8{g)YUfqsn zO|tHSY*u>F=tS?AJ%^b5n8joN5!iVdrKXy2*;2RbhY4#Z z84k|za;-G87MV)vz@V~4B?X!6fzO_Z&~d! zvpR)WD%)NyHG(aVpf))!iFv&QGGk(mY*Ca3b1)b6e!g>JGL?>C)Yv?%=bVoN!eLUS z{Sx32^NpY}b>fgacbi+*G0cCp@}BkMv;?)s8e5d~5X~sMhnh&MOTLP9{T3})?6d7n z35&TmTI6dAIgY!Uu9q zhiTJkX)q49*p~I|{u`|hY5%&}s=h~3*PaW{S{Cq^lDOl|^zQ|f8;&C%#}eI%^Q*Ls z(_4RRMtzLD&g?So?gn?{F-S59_L{hC`I$N)wzWN85=NW8Jf4{AKIaacxnRiQUEOQ* z1Y#s+ggAGm3r*P2HrU3*4~8Gm!Yhu1sf*#LGY|M&cm?5C0#z4tMp!15ZBS6uEu#~o zE5=&UbV?y@w^ul{BskdyF1V*1OAfI=#AFYoix&ZK*|eH#ae$O@)nZ>*(b26oU^N6F zR;uMGW9)n(X;oZK@r9ZU3WXui0TyrKK=&#w!nz;c$8+@4!;H zmFM3=Rg*Wq$i@am&Wyd}OxZWnb*|PH=~V_&od-yuxT6)-Lgy0b60G2eUg@)zXh0*D z<$l)v#KiqE;f9=IC$rMQk;ZSHAl>ffPW~I&>?6qO1L9V0I7GNDM9FfGp|peh@*>ad z<(mNu@5Q-H?|KYh0@tTYQP9d^Do{ z(I=gDsf-6}!$}jR9>hQTCp3p(%yQG&K{*Y#frbyV-aFewpZ*i0p(o*(kxs);Y}wg1 ztOOn}Pp|lB>$svE4`4?Q>lY)Cdugw(jEf%n>$uk|6u=dsGj;&u`Yw(m+pWR(UUVIo{HvSuQRzAu zje=iT-goQ%La1rNAV%-S;YSI-j!0*BJgAHK?)Ax^%d`W_)};w3?VLHo3KIq7pCONo zLXSJpp8Eap32($;DdO({Z4XbIcfnvL2KFeM0`Y{-U`*ZwX$mG;cR&)@un3oI-!R)K z3!Wh3f(Su*4)fk+^c5istvt&I14aw?fAeh1Y_$zw=&UttA80#jfm~}sDM23~LIvNj z%B)lVj-k?AMK?5Vk7jXzSF=`3qotUz5rbf9gTm9$&-@)eVKRlrAg6fFpa_u@NL|2C z;YW~rSJhXG(-sgi8QpD@{)-yyLIl=2BgLGF+jh48ul4-^+w{W@!Y+CCxQY} z*!vWT$OQ&71uRes(lQx#l&_dUI+&+xueDQh1Oy%BuiJYv|MjX2B0shLc@R0aK{t)* zat^>2w)CuXtbLy{0c?dlnDA`w(T_nD8QpYX0+^t)S4tarqz%mlK0BFm5;A~>3 zQ=i0gS$HeZj>r6sm}m~3Q(6nEuD8E6p6vGMqQsKnw#_#1oA1-8&&pGhLNnEJK;oFd|zYY;~JVn{f< zJ&RYE$jJ5it$S3)h|+|Qw9d7DJoxqY`~9`nji$PirqgGq1d`F>S^8SSULT%z?YSv7 z_1w1Q=<}U_Zrepb-l)o#eKI&^yN0$qH}U9?ly}Iyc!fz)A)DFj>Ye{+vf@)=^NfQ2 zpZTwS?GO(-E{ybC6UCKeJ7#D+JUlcK-*R6W@+q77>&*@`Z;L5vmM=(6x*r*GAT_D8 z1`*`$t-9V=I|s_Ym=aX$qDa@6ctOlnIIt)ZgNJlR_vvgqXG{tP1X{@>Ewppat$}Q%GUQ{(P!I1>eeYPk79Wd=CSf=LK?_o{!~==L0sh7Rq-uFd?iu`7A;$=j;($spNg z(TlHJ#d?`EUQ$20a}pNU_2SvRG-E2RF4y`#67Q@c9D}=j*+S{+g1pB@dwT1YICEJ9BHI;55~Hta@qY zcn)s+Rz1IocLdK(zKr9Wl`18o)-Ipu77bn&_xm@Qvb~{0IxFeyFfhY4P_U_h_0~|_ zCAVS$$P1CJ9>X35pT}uIp51F-YtdxQOFm&{BOT!~Qp>Bs0JHvpUeQ~0%HZU_M=1+o z9-6Tt{LNE6j}|%9Lu7MjJvO&fL|y_x)=VtvS2Z~48U?rOI2j&%FH6SRNik*0tlce) zT6Jj)FNz>H4U|UNx}0RIe*92?d>N<_TRu`{as$z3fFSUR+V~_Hmwnqp%`Q8ejh938 za`asN*2e+|lnv5f6t=kLYYF$=9^ekY0e0oPC#S!M>IS4530*R64)ko0R1{uqNdmeN z+5H{{lr)wEm?g||LNC={Al#eX!8Qysb7ay-+MwMow00}4-e^cY9F%2oE{H*I=Nu(n zRcE-fJlKQ03>o7k%3K(HR-X4yiCj;*+StgP`WNO*CjPK1B^|V%YNP1*Gs#=txs%*C;=q zj#Zf`bv}MEJH%oFv}VG{34DI@Z6qapdl2CDpoShlWbM4^5XDY^YrG37*2uM!%O?eR zF)OF`8c`%aHY4+xvjT<> zl2R|K^*Q}uU&y6XfKQjPwW7lnHhGbd_Y{@*shrFw7cR@J6H138NJ}^GC^C|@l5=$Z z*^Y&j+jQ2yMm3=2M2jC zXtDuWO2%2tR9+)L+*4|L{n=F%i5k~H+H_+-II|MBqmt_`+zh$SSgYjoiW0pA^GVoZ`hOqrZhtLp@K8WVW2<0wEY^o z<<&s-WPUDPQfMyo{RpW*Z4@sk-JP&>nT6Cn>FD~iW?c#y7YpN;wlNiV%{3Y_!!$^i zN8+Jou%hl(?P##+9611<`{%~}4R$x`RQdUHvIa#;+K|mfa=-@2_1)}c2Mcz|7GdqzoQw^!?GZ<+A_ zojUbkTBz@@f7Hyvw@*p`9T+9c7WSHH50c7;N-{2OZoo`PTc;rZRN0-s)LU9ai0?6GDis5ybo0BN%V4xhN!A83H^wniVTlg4CE&iua4 zP{zfIb>GeYa{>900E5WMC$;RaDUQnw%P{6w<{kL~Y7eE1$*SRN6d5Vliu0|8x3!Z^ z_fwodFN!NV@bg9W6V9@xjFe^`JU`}R4G{@kcV8*i3 zqz8jlq2l!y;uclWFcV~TWuAHe#0iv_rSs2OYyspi>|P!vX$Z?V}RiC23M zvuW%kvHtks*4x+e`Y@_;YZZ{b+B`W~MkuSQ4RXC6Zl0%6BN{k9^5xveYg z!wh*zc^BE%7H#HQ#RU=L4Gidsc|6JhzA^IbqO5g^`?clCMNjtkby)cFbzqj9n}q7 zN0q322K0TVW(30zcRyYThihmSb-4cV8&>LC9bm2ir7N{sGGgKjcOUdSVm;ZuYJ5D5 z>h?;3{TJxc^G|-^oBCu;_Q4~}Af4Ae%|bx?FRk!+ff8bnhUtx%M^bF!9}F<@=E;-3 zZFaKh4-`|{`5!*Gz$tpqESLnwUEpNCojm*GgYMq*KibXro9(AqF}*CWdsyjSsou=n z$Z`u*dqZ!8X;vAkjC;or*OpM6@Gi500DU1o8%mzn{6!jI|Id_R{B=c% zbeE&%y^Zfd8*hw*1HF85w*7>uOhWz1I8%sE4iY=M!4B`wb5Un>V7pcIbqqc&JS*vi zlQerhxN!Z8$LBTjTEgM1ItNu5OX=odRx|e;fN%vFH)# zbrHqyJscB%0mp0Dmo7w!s4^!0t1xC$X9a;2qHM82=m) zOG(s@t2m!P4y9!{cbriJv4f5>ceewIiu+ik)u9|K#;YP4e|U>5od28wZasy`7*uj( z#$r{OFW5j*dxQJJ8oG1qjIcidU7c6@cB_c!OYv9T2J1{CKnSgsPi(RqXFU-OfBMYT zcHtG_x*tqSE{mO$ue}>JvdVQ=is*BNB(nzi6gt4Q0|kn$$CsM=7Y-fc!&Aazu{5TnC zXq|suF~jzLW!ilSiUds61Hyr3>j z5lJs|+ER8zjism|l$zEx1s!{OdPO6Z6^onPBXpl=un*}QSWz2MD>(^2h z9;mf1ViL%0Qqi8nPvEn7uzPjk2%Zhk#qutVZ1mkJ&<)m&W~%R##e_HY@n&(>hi&RE z;DxxDzHhk5#Jq+U;$Yw9r$QOz8Gfm5kgv;pO~Tw1vi21JVP|BsIj^5_{FYINT;tgv1J#T> zsZ$?|)oUbe_Qu0q>ODUHnQ1ZZ4wh=DKUSYbsku`yA(g^zQoK^c?wx-u97To`1O2fe zP*%V@wHqNDwIcO~4jY+Fm$LX7&^=F*j93aG6jib5>;KJPB3p;0n`z!+0xpPJU(W^( zF|*3_u|3EfK-r``D9@(ujjQM(K!Xp zr;!{3tGsQno8y-sxSN{$P4}o=IN|*)HgI)5q8tnPi{xdoGXCew&!W{*K0WL*uMq$Z5$eP0~hk#a17GMKZ2M5v&?OY!*O5f z90wah{rf~g^!Ic4969&IftOs4cu&S!MK%CjIK^3LP}!UrFd9n z5Q~+3uxRjy34wZj^o`E6BLR-nhZOk}~?(-ekg%Hp!0mI$0&yUe=nzrxGNC#N_1-#08Y zS)CzL@V@w!k)UnLFHsM-K38&}v+@t}RH3lfJ?p?MnEGcTkamcN#B5?&IM1qYw>bjfAk50j-TE(^IY_QeK>ZRhQJP{FJ3-L zTx^aeAf(Kg;8&yo9@(_&_>WJ+H-~k%4hL7#-5Z>CQ2{J{Nsy3LwH29_i%hly*O%EA z{Jzn_EEGdW>Kn=gQ!Y0@6PzV+8hRc=9xEEBg)TVIaox@^Hq~iM4(m@X?Rey;bzQj7 zclCYosB3iR%f(VhHBW?63t@5a4rIr}o!O>M1^l=K@EU zZ@^}=S3xhZ-@ud85%i60Okj$#tQo`YbMCm0GoglxBJn52p7!&|1R#A#Te(ucjRTkS zqOj37zpr|C!`lVEK3{X>XkYLLF_p#z1lN`{pXtPm8jILGPg$KI@f1A#<6IMV?g#!4 z8(=Cc**I-g4IApY1M@s*$)A6$`Tg~dvoRR6ns^JR3lhi7h4J;V^_zxkZ6iEIwTwzm zE?jvxEzs}%bua0-*?KSK71;E0RsBY$rIZLMg@vb;p4zi8tRnz`XXJW&=36|Q7eY$f z=;38Zt!ou@iFX{m8Z37+szkTaW%4#kIPB%&W^P;wlJ%LVAD+@VH#hK>P57-{`HM`| z&6U&g^=e>}Y1q`)=wqG1-sRtyN&M|Z>SMhZ22VBXBB_p7^{(!Udb@Acvz5eXQ<(;S zii?|#3D*=3WDnGIIc7ds3IohPwgR;=SEMZUIRboAFKK?aM?YoiXT3izBh@C!3ty`V zIPSXTec&@h zmG*9Tcn(SLN{8i41u=>xBj%_2Sc~x+6k$U9>?@zt%#xyj_QWk!GV{f^F2{)pX&-%NIbKVWBLeJ7@d1&V~`VG6S7%=c&0`Sn1bxKIW4mb(L;0H z%@x?H+O(cCgGgmj#TSvaX(-0mPxsct2V`Dzebwrt9~a@2q*p&bT-|=sid4$!-CEqTS6jwVzMB({=$tffe7qj`V*Uk8Wi@Ng%c*UL{ zOciDFL*0pSO_Ng6ZvB4%p+H{08(l*q+`e@GjmQ7!XMf-Y94__vXRLn}e&E^bhreHH z+;8vi*G+-LGt99hI2ZW|oufSW_UKwpKfCTaPeZ%>m#_b!cRc#}H$;F8Y}KM|EuX={ zWDH=M=3WfqRKm+UdKtzOoE~d92oWaVQ(aUBtnka&162VrXL^e|HwS)wb zQei}5(J(n6r)<7Sy3zr!rU+&n_`#$#G;p8^;D@{yW{c+iSp);oVk8%)-G-SG28?!B zK_aX(kU}jegdv){PW0u(H4nf_t;_n7NmLtee_`M{c1O@Q8S=B>@6%$%+TB&1B>f%*RsbY5(R}9?jK&u>eO{Eenc1?g(eT-mq6g^D@&W6 zG6=In!ALud#qie!ZJ9C6Ts09=>u@ZOMu)*rD>y6AEX$5igB}Y?LvS3Sa5Un|h%ex) zSX?baDcp*}f)X=I$`(llY&1$n%Y)D_1f`JM_(rr$pnd3AOIrb%i#1n)eScun))ynX zt)%*sb6sXE)xb#TVKlAApiZ} z|AD_p9jxa(>*-f;#yWqq&(H1quYS%tXR)s{)^ogd_zI=rD@dMXEcB^6oWnEB(Jsc4 z@NDGm9P{(eEI&Bg{NQY5&oB>kg|-p_a%BX_6~FxYA9=^4_rCqCOrx>=Fj*sRa=DRU z7z+~GGNx;RpdGVO4s#KVfXYVf#%soIkFvG&2W<~rW%%o4Pfz)hbp}L!M~lVBLi81m z(T{|IlCSZ=Z!B1Z-yi%987LNkkuoNK4TJ{VfCT}wmq}zSI=x|#Gfo_^{LSWVwlj=N zr~rYP=b8@!yr;he1_p$(#z8=V0#Bj3v}3Il{X_`DIK{)Tf$>&V+$ChRF0lSA>#-;SZ$mz=zOQ%OZXLB+w>s5dwF#eXW#?4Z&|&8`{boYniZ?1_lGp zX;hfB&R7&I3&Pq$bDgKv<~lEBK~at$;f=6r{Vpxr^u;Ka3*=b1upy-zEeagQZr z@@UpNG*X$!m}tjr`1}nmq49(GN-~z_i6A5i`-R!Nt_K3FZ;EH7je z-2f9q*z+v?_iT~SU12_bq`#gAKTsS|Shv0A_#gl5U;gPRh3w~?v3~XCD2Npz2$J*8 zS|8!!_j6UrM1YjHcs%ZIi9C4(&fyv6(K4?1hG$=M)i-{_GoJoU-}uaHzU7z>xF__Y%?sM~m8JJX+&55RJIB@WlBv}q}qybFN< zlcl|lzCaX|z{gP?%FsXy1XywA#c}05(8>hK{6^o!*h5Dx z0p=#3^@Zeq1iWFUVYp4mB!>e?QpTS5Pws~8SraVtX{mn%2vFt-P#7XY-LXssR_oTzToA7J|w|=1r>Ozza-?i*bgdN{AKGqKX*CJ&7 zrk_AeliRaS!bGVEJ@xys7BVKS6fDX725g1GGGV!{aRdlLO86}A(0T)ont3)yCeOQW zry8{MU>sOFC=4h{`Cq8^7t?;;?Kvj78XSSJQ@LRMEy(XnpS%9}MgQ$z|Ht3_jn`ho z8S3ooZ~GSa|1)x4`r-j!<$`bU>^D94+NVGFIoDhrE9NR-ZP1N%y5WvxUGh@o@Cj>f#@-@NG5XW##tlehftOHbYU+b=qG>j$qtb=%FaJ9X=OU%sw?`{Gl# z{_CGVb?f_HmEV8i)Mx+Ye|zfI-}%MUx7~bwuGgKu?ftJjb<4l`g_957{ELqT*I!Qb zI=Hv6TbR%|_T1pvFl-t#VY8r%+t%?~oE#=b$Ro_!aA24!On6|R(b8Z-CTE!pHn^}+ zGTBIm=Vqh9Jajn17!Ujk!T@;(CcX8aV6;Xo1ZI(1|;64O)3=)qDuXGF5e#?+AzmCNsjy?CpGy_PRNu zNBHDfoaW043ZvxI$3!Fv*XXkdGXg_5sV(Cr5=}@AXf3o9j|YN-86vR8;!+dGs+mh4 z1GzG>XgJfv;+LVRaAKar5Tm^tNjG!ZJP_VRgcJ%zL(!-5z$)K@z{&e+VF^tk zK+Cjrry*l`F(GGqy!`Xqg5W-kItRMQC`<=&ufa@!A4RI|2zgZ$Z zAdUHg-Uw#|W0Owx_Z3QG9iSME0yp_W_kQXv|F2u#_nMQpedLX&Z~wrnPT%%>FFAed z?`8l04*UP-PTl&u`Tt-252tSZzyA06JAC5z;1}Tw|0chMFWeFyam(+$;uL)33m<>Q zAN}qB&7b=Lm?kj!e#ZJGFFsb}6ecC6=2cf-aoKPD@(cf`|M1{D&VDgW?Th!mbq>e)E`)%Q#4kmTOausJ z-7Pte296L)pMU>1W)4=HC=4qDd@M8lGMPICeZFHpIr3FTIdB)@y!m`YIU8ZP5pK-` zVg9+FayBq%nSJ^<;jo52TUG~XX<1~;PX)}Hb(*<25)RBg&Nb_GV9P2T4f>#sRxLou zU=BSaWi0fq^gPN3f(FYQVU7Z|;KT*hVi69lRBl2COPWj-YZM^Yd%iPkopq9DYe8bQ z-u~vZ58v_jKRT6gV)y><|LXDSDyi#zVOQ9FGhHNG0%MQ&Nm+aKkvHX_@{p8Fa99#6@HQZjP)mh069Fv9Dm0@ zdE4`U?ab%joXl}F@^jjVTH1s)E}sOO5T=f4P3i4y6dBYoJsEvAQXQPlRlw9{lNZ9+ zHo%zon&>cjaB12?gGS)62}VmIMju9msjdK7j&LKngo1zu(oVD4VIB>itn(Ykcx^_6 z?AZ{`Z1VQGN9rorMqrlt97e7gMw|DVGmr`AtX3Z&D#hA0LfV{wM$LcmLp0Sg*Wnhq0a{0t8G_$JjMjUjA!uf8l%1 z+?(QubJE_*dC0;M>tz!R)4=)WDS_uSE*CQkt9W(8Ol2&&f2y&{fEw+>hJm@L)s6P; zh6P#zV#(rWbFyK{(lyq8!gG6QkU1A&mOvydULB0UO)G2nh!Pis2*U)`)YI>tHfW9r z8a(h7LN6PFF`=!(c(S=nQfp;jm?;~+beIG#G|h)`z$@6Wj0QHS#%j`B7zzv?TJ(1{ z@6p;DnPkZFz$gvzv|wJL5iFR2t8O2R}D zk}yfbP{Tmb@Sy=T;);c(|HHhI++$!u-izRzXgL|MeyPlXmKK5@jdNetgdRs&RhF|s zaN_J<{*84!G7(DTT_8j=HmqGNSdRxldEy#@*icv3aK<1b&()(~88daw%pJ+!K#1&t z9uI(zqw`%qn$`!xJxpI;R6bjlhtF6jvjz}Qgp?aGg}@@=69sO;uP1W9!o@N(p#gn1 zzXa=Y`A{~9OgIsXgtLX1T`9dH$0oLaE6IZVH}P40Tw_j z6l(|80n$QS9Q<8JE7f+x914A*#m^br+d0`SaRGyb0qR)9sv47i`dJ65n_P$iSSK40 z3_D{`fK1ts75cj%CSjAw7N!iz@4xrwM?*~i%~u%TM$e6C5*OovnOheuw6a1mkjF4B zgkK$+1{gp;1j<;2gL$txL0iRllr}y7HuC}lV4lL*^bcs&z{Kej3=ZooLg1cQQbr36 zbT_#7#zxo`V6GFGHt;9E zP1%=q@K)xU^<(M#c~6s3%P5Va3Z2dWSXSRd?@RRn{7jbgM}PoPrH|0RVcN~#VQsa% zNiBK8gms*U&RfvPSkqdGtdGzkqH5S?wY2&e3`Nair{ElzHI|H7=xK9`&8>=~Fg}`! z?x>~Wb*zpS+p`yhEbw&%;sWYJ05z%7vLTFf1c+l!{|sFYjm-t&o(18oQw|ByrCKcg zq0hM(1GGdKTVj1-+$&@m28Q4p?H`(;{T8-iJS`IgZ5XFMgZM#03p3UgaCtw^5lnzZ ziXai*8$U!H_D1sH_{~`A)A8^utRH?G?U#4)w^3O6y`^Lt*4*`DX!GFqCgV+x!&Gdh zTz}63VZPR(Q|a^lzqYJr1$3UX_+%iVSXM{o_7GJ!{v~~2V<9PUfN4fCY0id1CT)e* z4}S>QHunG#x-L+3^1oJR#)Dw!QOVFng`w*#!W}D$92n2zmrHiL4PE1J`QhsC=+jPzsm> z<}~xrWJH4s@YSRZic?Y?6kivAQwOdECquI{_rC4;g+Knie=GivpdD2Ay<)dOE_E4l zp#Zt*mw)D_Gxz_>I=_R3K?o(n!a6xwgbjflXl9kZK*O2MXI(3p7|;XwH4p~o`oc_& z@t>qBpJmgsc&im#Kyl3TVL~oy@b>Y0xG9XRf^nf0!|=d}XLC0ahy}0KI6_4jV4Rcm zL5K~Z6Ke>INC)b`9#*m)$PAx{`473D8b!W)ATeqj!I+8i0pBOF3r3;lJxsuN<$nDD z*mYjDBALTOAX8bnQ5~;?jwZnKvP|(Li#sb4CWB6DY7d`_kz=m1CpkV&^3b0V< zrvh*2fslkAFmAK#J5ONhV||dIsFN9=15R{=dxZuk2ChtKVWRq!EWH9&ANbE;hxCy- zF+XL5ik4;QJH8Qrqara5bIRRk?L0(5N#T%;tCj(9(ROq$bCfZ`C=qBvIgD{EO{^^D z2a5yE8I7GjAw0C+0#PFP^oO7nEWxA@uv84R&odNmH0-sOMdpunLX`xqw5$)Uv+NK0 zp_P?6vx2}dU!(tkR@47kt44-lJ(-KdT4o<1=&CeKU;s)C!ki1s<1Qe&u^Rh+!mK@F z8Gj#nIb$W#k1ZrTeK9X3v?dRUz96_gQaWQ(xT2(m9t5BS9@FA>U*$fdI;D zCq9sFcoWdjWWml4G)hA-v*7T1G#7ylTxVStlJElyR*gOP!&Ihp#mdf|&BY>ynUIrV z^<7NyT%(aMXL;IY6OJjb_TSJ*arJE4hV&W^31l|TRr-om)a+j?q_WvZC?G({#5Ptw ze-m9)MnZqUrH#Z29e74fFU;ZhZ#uX65pqQIARsmI^FE-RflXHOR{G;6UCdSnVll(? zSF0h<=x@loU5&@)$6&PA0kWdzKk4|{jg;wh@N2>u~ zWnuN8q=fmHv7KwqK{*kB(!&uV9`fax@}Uo!e}xY7r$$ZD-dea%sFgKYglW*KP%mQqe z4V25pH+XO{VoPP<|5%H~#fpaJ$$K!k!DunD(e7lhqvf4fa4t-!5mPYyZjhcM0+SLV z8YZZN4u*-gI2yE&K%NC&;C~%`S==x>p_%?0c>CVmqKfnju(1B=kdJOi`pIU;Cj2oT<{7MU>)o^OPW_&Wj= z2kK%fE94khVhN=cWPs)jbB37>G-Tplm?(5_B#=Ip^kXbX859~d0?1sPyh}K7tWFpT zRd1UgA$@_-VB%Pe%n24*n3y5e2^73a_gD?m$(P+f#$qJ)5>)R@CC_45o?mz#M{znxDMj=aYs z39@Gp8qmqZrx;7dUZs+9K?X?x)s0XEdIZ8ni6ViO`eFoe5IW2rjn#GL?zbGj@W-CF zERYc(`w54axB$TdAqtBUBw8SE|H+#S<2BhW3$xIab$~{Ih@oZ?d4UJR9NDl74%$u| zgqdOLZcxp@14epa5)Z@D@s4&1!w2fg?+64f1O&t2_AnioRZoP|vdMQn5l{zlg%TR{ zgldXezj8uS(cWNwz%*&wa7>^%m@1Y^`bGb?xc#BQIDI`iPM-pB$jSi`TB`$^XXn78 zlONBf@=&NS7X3J3)L1GqY-oj}GHpNy;2Z9-h+g_Gqr*qEAh!kmQQ~7cP8Z&u`<$cn zyEz4AP$n>ru%FE8bw&t+9oi!(2V#S{Vhz!TMG}EAGR8tHSfAkh(3?52PE+2`XBaFY z(e(SlSY+lBjG(B)oOX?HN`E{GH*LTeu?FY^a0iw~eP=y93Py@W(ppr)J84TuGxLCd z!vcgvQ{@se1jY&@#VHOm1#*POS}L4Snfr}c8rVpOGg^F}ah(9=Ae3W?HiVfl+*mXE z9qJ3I#4r_<mQLnnPI(S8lpMkp-H za+UEIf#2L0VH1R07@8UR5h@4`!hLxMOxUs>Fk#?MG;lQc{N3uq`i~Z)?7>A_=@lcK zSW5`=%m+ekE8l@dHS3JICbzmPUZw_#ejiWU-+J;QZvUHC>RyWL;=3t>cU@`GiIcv{tkp$=vWA9 zvohA+)hcdyuVrk~zxq3PKB2j*jux=*l0vVXM z(8dJ0^skU9V-%W2`3W;-?#yLLJJyv#k;zzCCnk)BMwT2wJ0A;fb1Y|W2`|U`Q809U zWjyA;04?Piv~e@+GbVycT1CM1KYPjKyIBwPP0M&$TM9?~gOk8%lv#r^Tq{^uY08%y_-q48D~A@3M?%wPk`|FEW^F?6jjk-gcq+-SJc$tbMM znF=23He+tNf2|l4v9}zbN!5xAeIPr8b&1Q7i!6{|N)*;T??@CD*n2iwYX-ICIOZxQ ztznm0jGpwzX2d+kq+Q{AmY+b|Ar@Q>It$VQf7vJv0Uk_Ut)~Y{Z4oG0yu5=2U+aVa zabR03E0?~2u|8mcEiy-Wk!GJ8%DDUoTOuOwSCbBdu!1ZM6>DI$r$PtjGNjLq;=Zxn&&mkIgzEl&f4v1O;?!KtU5E zCm+W#l)+)~@LA1x;0zPa!c2we!oWf!a#~i7OWJ3=miibUh5i)!HPB)cL1nIdpLfW> zBb+C4NoH+LEuhET!y2$?CNM_E)?_my_=ZM&uMi)4HGju7h49Gp{BHO1}F(acH9e72NuFI$=D4=FSAacU55xCf&$3$ zMySsE*m7|Y3XCm%<2^W^g$0=dtd7|W3aRwlkmR&0l*K&=TK3j~m14dX!YggpmxBUe zz7&3*SVKT_mZkx2i-wP{LEp#92U-dc%$%sPjNSDMJrTS_qNOh+0$Lshfpw^yS%Y^an0^~_1 zK;H9?Bocm(1E64TYa?x?DcD?WfGw6B41e+&nkh|!RmyT7p-l=EO=w^vaj;C(0uel5 z_gQ3|17Wee@i!D_ZkDw^0xX)md$j4z$&Yp?G?YclVr@Z0tKw#pS{edIjI|MlQEi*e z0yAX;vPs!sMkpbi(yv-0)m$5r+nD{*r}6teyvVv%qsfYaBLvg;S{j91bSme2^BXcg zOPOH7VCjtoqws)Pjisi*LCZxL!w~W13 zz8)C@z8sit+M^Bn0qxX8$Il`RML2By4a!9kU;2Qtu4!BE1lC& zY@^$NhX(!v>f8KoK#W*hYuqa#GGky(87j{2SeRKyjdTN=MDPm3=6#&^0xCd=w8^_8 z2%#@gUk}{0<`w~Bh&a{^5br3HLecpCa)t{+)=d8Ft%fOkm>B-F&<~5r^6;#Y8;&1+ zoIH?SfIP_r$W3oe6xQe8luUFMGLQ%hFB{7OcQ7`zWK8R|!Pl{})jsFDFae#)ZW5R= zj6D|&i10|DoH8A>#As(nXj5v`Xq#w>Fs^}L>O^n+Kg`pz?QF=jXFUC?8H8|Jc?rNW z=}%!8#?vIkCdxU+(azCq5i-S}dAA{u16{BQ*r+CI!MM?gVS;F|>%AL8u#`DWFf{X= zkyv4DI@&g+60?Bv`W(W<0cu<;P z$OycQK`06z+t9v#zm^nXtywxIZB$u9AnV9ZpC*cmu^h2}_^s<00m)joa8DcYxB9YKnFfGN4wL@H&>7zh z^hfy6N0d44!>`0uE1FtZpT9T{WEUV$HUaYH2oOq{^lSn)xZ2Dx36u7+uqMK4I|JMd z)!8^$89IMQ`)a7*IIrFKKr}K6V2@}>M3`7u4me?$W6PgdxGx*TDzkZpgt?Dqvs%6# z$RT}G%Ry7h;+3)R3^3O)R)mfk^=Op7oA;z2jl6+r6;84L#MA@7g^36crLXlNXf>oC z<^`~cv8rHtXxuMNGS$>^0>VQ$(kFc}=`V0b&jJSmV6$?Zs#XXL4G3xkC_<)=nLVB-U5G)^s_ft*(K z8H_aV8tYC?A4XpS7g0Nk3uo_)M%pmUlou zG-HMGgxX?dk(UIl0;JS4Rm_wRoq$|`Re+`Fr{UXqHv-pp0%2zT5D;O)Da<|pv(~i; z2l}dI+6n^=jrOoG;MuX-4Haiz#?n;ajF2r{iG?KNT~?fsPqqH6y(0@HVu_?p6^;De z(0ct{Bh>ky-YVo6@TIp)(6EZvFutyZE9;Z;Z%pb7Bkk(S}3d^&?nT8Eqg8V2CVQ7`sVCFw@*?mNN{VP05BL(>oj4nECmQ zjfB;};&*c`*h>@Hjf@5f1A_UE5K-IB-@qko9vCC<;r>QX)e5rjVM2v`y7Ba%>SNUi zOXfm5_pq(O+7S$D*;rNhNS1ZBd>4Ekp9{>(@a^XSj%oEE2=E-86QsC=|R5Xs!(94YLHz{P((BCo?HvELe+I~K>P?y=B&BKO7 zQ>_&u=FSF5KUny{7H%{cX0&P;KYop=z`7s;wCnsXl!XR8+O8Y^KHUWcpkP3_ng1v5xdnEK6$DWuzca}3Qnbe2&AeWgu{83H*$M;y(x1CvUhY!j_J<8I<4ZKCbgfzLP$eMU3S*qh7H zh%KxLVZ2;sIFAs*fKky54y+t3DU#3%H_D_(+ZIyF^AG&` zIc=NYtKAo7_1yYEH&{Vg7lv809)MPQhB^!xSZ_-6FF}DYA-jKs2K_e_d07O@r?7<5 zQi8BvvG5S$W5sx=S^A0cVW}4SJXQ!yULlO-u`C?dT?GjDLVxIK8Tk=1&E>&5q2Jtx zaBc8KeP>#fv1~~yoPdcfM3^xRCfpymAr9|V?!b|aLmFGd|W z_7Ej&5E%UC5xZIQM%P8?v0tfvOkYCtBhSjo-w6ErVkQsdr!U9@*&(bajR0ARgbI-O zK-8Gc8qdO41Lg{2Z4E4(aaJPD!d5#*%gX1Ty4TQL7`==PO`m&!17NlYfWe7jMp_*} z44A&lL1-C_CiG2&ml~CE=`eZVuP|}LF{1^wrV}|F#cqkwZ>FyK6{Dq%@UdU^70oey z0%p+xipDvNlrfHFw1smz?hznpyfRd1HCmswo5FmIfXa8p$`LR+7_-5e)J4oZLclCz z7;&D_X%7T6Or?y!HHH#+Ae7f?wJ<7ZB~A_A4-Li|siu!Mk2TVWIW<{e5atFegL%mq z>bSNaSd1$?cJtR9!i)$HEC2;^+7lX?whE&d3YvChvgvn2vSC2Xqtyzy2R{O9WUMS` zuAe4-Zg#gmoX{S~3d^w3f}SLpafhZdKtpbU0nw1L_6W3C5nQX@(@K;y2!!uscDdB3 zfjvc9 z9EIYPw#+FCP4%Z_yq`*Y_%A&1G0&sG0gt9U|0rIL3T!8q#!Xf5m7^Ho^iMz=w8 z))oRA%bC8j=P6%;wHk{K*or-fF9VCs(EbP&5;&pdKwT@en&idhW0L-sut|Stf5OW5 zJdjIVSUg_$FRI4-wjY1bnLBPcE0go&JvIaj5{n|*OOw3vw~-kv_WB|;+h;LuG2_4? zX~QsH1PyIqO$;2xMl|9C0kZNp7SkGG;_qntVZ7qFST~sGSO>r;`CQH1qHwb*)&AIA zOIwl&v1yIzuNH}xp9?0&CNrZpe`9&*;{YEYtEPt~8EutKJV&1jJE)Bz5ZScA88FFV zqA>Y}Zi=UqZ?gOa`aBe(Ky~B%ZP^qyB{1G3A8y4W-TaJm!DA=Iv+)nWd~zAVmT?*x z!#F~JO2rtokbW!FMiVybYlKEM(kaWm&Qw7F;V`cN8OX0;(Hux*2rNu1b2u6Q3$q96 z!)hH%5nm4)a1;;M!1#|Nv#=oo@Mb3svxV4Aj(90acKA7wd-Kmg2LjC(OEM4pdIY zx?qp6)*F4s{M3>I{*>vaE!V+VHT1g$AxkU$h?&z*=bf!hH4$U3Kk|K=S3+M5Mqr&} zEm933*U^Vww9e}$8JA`$K3zduVKqzH$XTo@iuQwbrn?oxg|7$&fNoNCF$^!f~ z8*rklWB|<%F}fwsP-Dl?S1{>l$1+(KcNl9Of33^IVuoR*Z5N~GB+O<8qM=MQ@Q6-k z1Pz-e@1b8}^4WxFh+_5pzA)XDHxNdmpji;yD)u)~L>}}M#_WcKDFRF6I}gXK&jGV%KBKJzVx#-2IR ze##hl-;5au!Ge5fylG$Oc<4u4&~FL~ZW?eiv4yA7PKBSD;Q8F@tim9pB-A%TUuQl& z(N1^`hKlB#-|&AyKhNzzxG-)6N*D?G2|C!vs>OOF0uLWZq0EkndGg)`)A&5FCXkBZ z)(FgubAksfcnFMRE=~F~*!-%i#`+!RJXV>sRdWYALg*p@SxXr|&zdohF9cW;rG zoC(m@ST_pNfvYTKGE5lZ&ZPj(Js%qd#Z3CNuQ13M=&zPg{-zK5d}wc!E~^HhfM971 z6F2aK^_jk+oLF`SsCTU7hX3-6aBpY`)ESuYL~^i732xw%{EW2+=Nl2c!iPD+HI{2FBw+Eo13P&N4y_OgXtoIFjO>W zH11(ElM}IuC1%62@z}^_u47H5Pqf9Rw+~n^Lr449|e1~({67Km8nlO)t zr#$Bx?_*UaP|Vqg1CgVQ(xw9rgo%N{_s&6#;qG7lF5rGO{{H% z36?ejWdsRpk$tX%ob`q<7~yJ!83Gd}a^`Q86Rl>#i}8(2rg?>jurtD)^@rf4pSjND zM8X&T#P|QLtFPufki8o3B`h{p*K@Z0`3FknM8ccimMAR3c*S4`5;2i2ixcL=!lwSu zXm*|lG36RIEFA{qDRbFWvq24IWfQTWyIExrFexybt8m;+4uugtV^vVz z1EvPUH;bGNjW(4&!#rUSM*koTfNb(Cn+9eJ15%5E31X&$ACETAJ!)NSo?+U>a%)`} z8ME?N+|)oro}`!Yz!a?yHr7bXnv{{D-8bOCgu4;6G61Y1;{6xH>v`VWF|p*75EiV( zg+LkxR?SuiDSa5G;Gsles*IO$f@?S2w}PWIYEe8Z2QwE4xUr@bz%WVZkF|ki3GHx} zjssd>zz7zZ^jKW>CCo&IJTRa0KZ-yK>@6h)%^Lp$)??al-ioJ3=DmdIqF7j^7@U6P zDl9<)z^V9)PYuw7N4;)BpYQ-obTMZOL8d(V zb|y7_j74;UbHdAf8!c3ZEMq}~XP)N02oRwX=$f_*9~xG=!Z5e&a|D`sEokc*D{#ln zf$?CJb?ifv!iQ+`6B;Yy7v^L>Vd`lA2tw9J{)ZM8s?2*Ek)?uBiw7$=_qEJ?9qKYI z6bUk-i>)&^c{gXcpb6{f&htQCyr1zxI~XAmTv(f|F=%QLOe~}*AgrZf$P3G#Fw}+( zw;T&JHF_#zgtqm$=xEP(K)Ntzd|&!Y5FWEP7$fstrfsAZ$*vJ{6KUuCShz52Oo6wo z`;Eav0~0n8AXxAS58x?;aNf__QD6X%VQEI-xRwY0Lh&>;?ctXK0)>VM zPTp@0R6bh+4Fv=^8HJ1WoZnbW1|Fm>D@2cl?4AKZAV>syrXMO$STPCXz3-QfU-(l$ zunUkUhxk~dxX1_cj_2Q$cdTrHeirIRD)p)IpzE5r;FH3 zVbe$SDhXq-korN6>7+29_xJI`yK@JxQ=IT(n{k$02)H5jy+*T4$7>WFUA zWrd&TTI8};6fn-TC4CMoDI(BdDi)5+`;Gd65yS8T*T}fAw9pWTsWpt4_6=Hqj%f7I z03paYLO-?Xd{)a{as37^(3eK-Xwi+vN>G7XHuPcMfaDN%X!;ZEAZ=heSPBbTS*69( zKj9;UU%toT-w39LU}Kq@d&8U};AUOa7ec>HJWUbHBrh7J=bTh{;p1YgS&u@jVQ5+@ zV=ZvL1$5iObqU=iwmn~kz_7=`7L zwYjHC8~05v&kFlyzM@REzL=k5^%&Y6nhCREB{OE`VCKrTJ<8)K8LL3$ScpbAB2ZHc z>;88h|MXA({$ z$Ji|&LEJv=o46D_D$V8VjRg*f1WP^)j)% z!~UU6z+hP$Baj;@RjaI_!&qbFCq#g(U<4R9N&tPqI+;0StXgGQ78&zET86du1WREm z)&&W8WI`_=&~`?6Au{Ni{+O$vMTu|#K7xLe=fJvSt zk_F4cHY}FJI)qN1X%$qVhqMEuf?+pWNH{9vP&kF@3d>|{!Z`>$vUFE+)RseGFaf6h zidvCrHb6jpc`>sk94F!n|4R?w5!OJHTpGQJnFvDQh?SuN4ndB#k0tb;sjxN-y-WAxmJf#N0sapgY%HDMu*m1AMPd9Q8b`^bBZ z7D~JNs?d0c$u*y&ky<8_0xJTEg?Uw**OD8{3+FL&sK8oq%F=lAH`&^TkYeTJy;x=X ze)2p_4K2A2TLLwxQcK7-(3O#6FzmeFu-eQoHM3YNKw0$3ux$JcFweY42XLO#5}iFD zw3v3R(>C+UI8A0nNvM^J(!iQV3BV`BbIZzc+$cfjfGn7D<=sr)POa;PBO7Yn3%?LT zI&BG8GLNw)PzFqfWlzD(M_Fhw%Ax`I>V)dj=LSh|Phr3<6hW`t-%IAMrbRbt4L&Yl3G}dhZFRm zhvATEyUR*OZ_7Hgo1gF>0mX_TG9 zjR=*lU!(1S1`)1fxw6(-^9`w0h@@?;(a>!Y>NWwQa)OXY2^ku7F7y?#UfD-uId7rH z`3-9hNYEe*;7yc{1*__-d?P4=tcPLpE2=BBp|B!r8==hl zRETGexZh+{EX^o32pp|l&Uq1raj3}o_LsdSds#ZCRPTJ5!OLAxlULaP`>9k`imCMfj^BlqJ0>r5a86xD(q4Q zB>tZFNEdP>h^Qg#Hk)%|>>p-)`WMo_9Q&WwSZS=C3Sq5UU>U54w58w}IH;APEgG5iGA9j6 z6RQ;9=gGbLVz6RI2++3K)zA>@g5O8Eup~d4JyzJz@?){wuqIiTTE3&r%Xo)r3(<{0 zp}&S%13P6*TD${68r7J0Y1Lqjz>Hz~qtxKPV@+^B`$(S&`-b<9wbAzzSTVwLMGcNZ z*Xjx?OKDq0F#W*tuqNGDq|k(QI3d%kt5LtYXF#vb>}{vN(Cxo`JVoe z@y>7TDIMxr525p!JNE;nE^%>jare&?AVgukBLJyDR=*a=t=C6@uuxVwtQ*(7i)>OC zO8#dN5}i|x-u!?u-Hml0T-Q7eFi|WGG_KjmWg0Ea*o$_wcO z?@wR8@WG!?RRCa7oc3d}>Bj>a%Ds%=!`4uu=69h?gx?6QhWpk6tYy>62m>V%Wq1V4 z$bK6?;7ZDcY0tZy-}F`3cUkBw(GhD1AvR-eMAs-9_LpQpv&jcqRM-GpvgWa7(tmtQ zC^J5X1;P=!L%mMcfmn2YLqA1^+?=Nn5slI3Jirwh&gnuVn&b#ibi2gPn{eq zr~T8q&-<8b9NzVvD0K3E*8mFKvU(R(l|7N?EwYG0S?JO*V61XZFI-l+h(HTe`ajAa z3Q7b^#-18``;oR!CgH(Y&d&q6>hhc3@*_8$`5fikfvwn3S#Z|zfkDsa8klK2r=WGI zT(DU*Xz$Ge)_i7h&f?V^2UbBF&iCEWjaWe_G!&E#Bd%QLf{;N=LTC*mfZ-T1wjhAb zY!+X}5uHWNre%YSCMc#m__G2e4ECX0vS}EHXFG!(=RGpl2#kg)bN;uHDG?O+-?XZr zqWvK}a*~?@Bn()FC9{|edj7}MXCv_rm=40o+Ch_tL82R_B(OAOv=2rLx zI%(l8T-q}~JV!hX$4H>e5sVV}P8cumWUMf8AUv%>1pY8dga=lH5nIuGv8;@4LKsGv z)PdeJMYP<~C#@zzY139{`_Kn|{`lX0FpyNOpl0_QWj0WaaMcJQeK9~k2=xWyE#DYX zK???3C0|&FSiu948h|ltqU%r?G0YB&)4ZK&*K<)OR|n{YIWT{LHer&iRjk9c9%Oi% z#*C#L8lhQRngj-oMm@~F(Nygp_l~b)otH9W+LVd0!dsC*OB@E9_B|PqafLov&qp74 z@$u0|uoO_X=<8UuEq~+wz;ZOXBA75z7qnR!q9ty-XfK(HckQ38RRW-biONFRi) zu+~sWa#c}4fFK~M5LuKIC4%`6P53SJP{0^Ija3pl*Ybi^2oNoh@7pbqCzBAl(24$@ z8-Lit#g=Jb2(VN z<7{3`0EV7T)mU;Cwc6akWo#^9G@OBA@zt==?12u@l8F%EGeQJQfH1@?ZlI@@I1w5H zzF1I}PF>yslYud@xfCX0%4zF}HrOl?C<+rdUN$5erAOlunF4bFA71hB1_w~jN+%~w zf!ag)jsCF-iSz<4;~hkS@f}QEI4I1fYfkv~(DxpsZ0^qfcL4$*j z#@p~q;7FLY^D%gOAtT{S=#l4o-b&AEr_HIHt6zj7iTFH#LM*ugGelruWsWAyn$fbI zxq#kt=+Ra(16nb5#;i3sLJ{Rfe*w>AtX*Hw*sx~iCNv*s@Ky}bXfSa82qrLj=1UkX zG}1~S6g%TaSXx_aqWXGfz5U32T{o;HYgUbQsl}1+5P%I5Fzk33yXTjOw$KDRn}nHr zjba=j={vG6%#C?X3Ld`f_@R&IZ`PFI)4)o(2U?;mZI%>p8G?xM4ODE#FtAUC}|iG*aLZzea`J&O`kHQK3oCxQiLv^3$Bkc41Z znueQ2jWN$!x&wv}4xaB}FggP(2(n1g0@0dadX`UMQ=%P?R@XA|M!oRv(O%iK9+s1S z7+phO2NvQtn3d2#p0o4^mdsdD6hegY)o)W+gLgOU9M}l~f)#?6j>TZYAXX5*plnjG zVuYT|2dgI=9@AfEE`otjT*iVxUP5IFK`er_&xRvwnzqf3&i!KKXr@>rgE?=JJ!r+F z1tW;*i=n}Vs4^yT`t-+h9&#brjOOCK2STieCZ&H5=lP?CMmLnyNSZPx1afGn)d=Im zip+cpWkfhq3{z1Hf14nkgN>*=e$ z7?h5&Du`k;ygc*hp-Q0xYlF3d0yB!j67DEU%-@9clDoun5B~ZnHW_CNi?W_Qdj*Sm z)?wGTYb5)KcC=iv6w{}vd@P-H^kdOvtO(AGK|hgmn&)-gvt9_ySQQ`Edor#%{LPy} zxUf$VV8bIK$c128GgbEV1*Q+#pJyI?*X{$k#O1|#-KUhvMNwFU@!p+8LL)`SbVh(s zt~na5%&>(P8z0Xi6{vkfpLW? zv^+#Jfa_F;VX&zz^PP9AHNk|?5T~A$o1Tq68aSJl(iU0(Y{W6|(R|B%VO(gbY}Tm^ zY(kaMVhFOl1L0!0<8l%%-%Osv`K<3E-y;O3JcpJEg&xKI*Tw>dvhpz20s=|;!CbR3 zId{RjL}?3#K>uavzzg8jxrfaT!#0YBF=kxCF$kfh6;`t@V{q)iJKO`!LaQ&NWXVIp z`CGSW1u~GIf&d7OwIVV$oU-Jqv~-7-%MxN7ie+8aL(K=_GtnJXEFmc}ljSitK{UoELQNK!si+u+@GmkCHLP#`zKLiNY zn-Pmcf1}5;Mo{c5Pm+G=#Gknl0z*L>VXv=?oSmuVWmG2DC=U~iVjjqke)kSxJ(+~a z#pT>1K<;?s5+H?(fM3{*Fk3e$Od5O|W`^*{VrgN(;_WhiB1W)8c%B+oFzej!riV$4 z1~p|Q)}ckfNWd1kn&2e!K|l=@RcA5GhVRAoF{#uF7 zW<6~z=tM!OmNih2(P)#)(PS+c0gNra0W>&ETGK9L=pjpJ%T}cYwpcLLD)2Z$hz-Z{ zd_O*$tsWE_=Y#RHV3m**H+c;!v>HZ|u^Yh^dN!Y=ekKL~vhs-j60(uG>siD=v_oLPU97Ak9R3F~z}_e6{tDm_BSsKL;m`c4y8Ev!;u&GW2H z&sWboW!AO0ux!Iz@q1w5)Y>RSMu~sQf{>KSnAsO&l`q&4I-@j=a#DtlVnLsnOM^;) z#>PT6YEH<`XkKmBDyO`+t` zpMg0W@Ss97_klndNRqbofeqYv$TvUxW zClcO7Id`J4Sg5ryv_Qf{jfp3UBa2eab+kk@8P4>km|VjPt6ff}uM5i}jMJ{Xbx8Ro%;87*pA5b2u{RxDhYCsqvF7v}gtUQ>I>*n9+` z8+DjQGo$H?uu`l6!x^*TWoBs)m<+5~7$FRYL_&Nb>Gu&1cF*KsoCBNSJfBSU<;w`u zXna02fRQwu(nLoXKZ0;Yw1_90gxEG0B&Nn##$OABahQdV);zuf`e~Vy{8o%yMuPwY zHW_W(AOq+zmw^fSO(?C_9P^Ss=RVHE#`m)Xc7#k$N2JK(suMP}Pg_T^NQll_$%Txq zFi8Fu=3I)x$}LFW=@F^lZMjNs=4eSUFgfKHMgec|o_2Xr1%wLNZT7emO7J-E@K=9=m=8V2KNI-}$ z&(c2D5SAu$Oy9ART&v6n0x^G=uKdQD!g|$r#9X0pjU`B%z)@H?=0IW5rXBjny+%}p z9x7zZGIfp(;{_4}-pcs4`eMxUM1iR&q`&MF3RKd+R_GKqrfrYX5-t;}FvSrhY>r`ujwgM_l&=u!rYy4@tlE&oi89*49}y}rG$AwK zs1*yZ00HyX37hvD>WRh-HqT~T%tgjHNAIfj86^heWMijY3)sQv0_zc(B_x%0DGJD@ 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

=1` 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 ki-0Tx@+3+N)>=@uuqfaY43#B7Aem^Zv=qYw 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/head10.png b/misc/avatar-sprites/female/head10.png new file mode 100755 index 0000000000000000000000000000000000000000..f74c00a635471bc7622c63e22e3e2d526a524199 GIT binary patch literal 6655 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/head11.png b/misc/avatar-sprites/female/head11.png new file mode 100755 index 0000000000000000000000000000000000000000..31cdf987c96a796e09af0d3f93ff0a36c37e9636 GIT binary patch literal 6683 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/head13.png b/misc/avatar-sprites/female/head13.png new file mode 100755 index 0000000000000000000000000000000000000000..dfe4bfd977f78af68bca11b1246a74fedba6121d GIT binary patch literal 5773 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/head15.png b/misc/avatar-sprites/female/head15.png new file mode 100755 index 0000000000000000000000000000000000000000..a48b174e2404d92af336919e18ccb79486e7ba1e GIT binary patch literal 5669 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/head16.png b/misc/avatar-sprites/female/head16.png new file mode 100755 index 0000000000000000000000000000000000000000..2cb9e52f395bc8695dd0c7bf373fd409535b186d GIT binary patch literal 6888 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/head17.png b/misc/avatar-sprites/female/head17.png new file mode 100755 index 0000000000000000000000000000000000000000..2c264a17af38336749165819c6c1bd00e86aee62 GIT binary patch literal 6894 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 Pwt)R9CmZI+K8gPTdp+%X literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/head20.png b/misc/avatar-sprites/female/head20.png new file mode 100755 index 0000000000000000000000000000000000000000..5c6ba06fa6d0f48508a2bec35eb1a87842e85fce GIT binary patch literal 5400 zcmeHL`!`f;AK!ZnW|C&mNrz&KL=ln`MYCOE+{MW?RGbt^NHQ)nlis3uO_ItjDwlCB z9k&=NMaZ>r9ZV&JjO&1Zjjml z0D!0|(a076K-#wlBZSOQYW{eKyud(P69b^IW!o4sKzr$1>I1;jIFXf;g2)(qf#?(n z0Gn#RJz%|Gjwb+YE-*FH|MRlj%DCHrgmK0w3>~xu_ z)@iSi5O&B&YFxwXW|AL4{za=K5XsST) zegP0=h(Z~uJr>79^zsyobh;p#Xm|I($|p4OvYouRQXU0R_8H!gR0b$x27R$cN)Wt5 z#q6D(IHciF-;ddE4^#GcRn7-XK$&V8f_RJ~1YbF7?*W0fu?JmtQg2}}v|CC#UXC#3 zj1UTa4ULX+Bkr7Td?^@bKeoP39&X-VO}v+Dm~wn4HJiu2K)$mOX_=SRoNF8Ive!rU z{l1U0?FB>iCBuis%MZluJ!t>t8usJeh?w>QiCtlN+#7oew`waM-0i2{CM>b5)T&%} z{aH%2WDTj+lW_Utt;L!gB)48e?-m=L8}fH9&-Q5e`j57YSaZsG{gviRttnrt5_tUS z*SXfqRzcxMGq35e-Y+^8bE+;m70Q-RWoqgT+-;dJ3{vM83zNDw9d^{?(NQ0wM&iVEtHxy9+^TMHKyU|)j*@8; zAVGFG3_kWY-Ty|!oIlx*O-kp>;31R|UaAqOzcQ08st#VKFhNc(GCXkk93J%@InXRr`?^(OW8aGta z?a#jG#;NHl!LPI)Ur)}IQL@IJn@BrcX|^0bU9y2TyT3Blv|t|YL9(nPe}rqJKoZyv+O|F&IzxALkl-9QSJ?rR)Ba&zS|f@I0LLJ+j@u zV+=$&g!|K^-489$#H>1cw{)yOLv?~WJO8}`UbC`)h>W2jBC9^t^^5k-wC9e4V7w+g zsJ(B>(S2%mt$Of~cZ2`TMXy3p9cI}z!&tkbI%%l`OkKm+x%CNAt@Anl<9aoZ$=6AX zujs>CCfbqflVYy&gYpJk%QXMJDb5-_67Jn1EC=hG%MyR<@OaPN*DBd6Yg`kuE1R4Z zJem1&$a6FkXPqy#65QwU;raLdDK;x`Y?O3}U|nZ<=&o^!>@sOWqvn}j>Vtpfn(S*? zv~ykG)TxGStIu?qwow}eby47;vvTyAo;&~JA3R_VGBuQ;vKy^`a}W_4%{ z^*#41ZVrpYO4OBEalUNrY}cS`=@h2)43dVgmQp<|#y#f0bR|0ARKrx5*J%6S>A4iS z#q+)HTQiDGM}8wQ2)!ZA1sPq*F>}lEH#c3+uWt#`tdK&HkdU<^;R&q$F8oMuz zpg#4|M%ti5-Q{4m$?7#ciD4*xF{iO+zGr1sZsL0z$rwqDnd4Val>IBo-Mv+{q=i+K zCKV7-*SHH`T-^}yWMSFv^holpyhmFwjFXd&hvdfzk2W#}8OeptTZ><)$sWG|F@;if zUr5_qFcd$pY+66pQfMuB)Hq1BKS!dIpj2)vW&gyfmDfkVB?kb@dBwR-=6-{}nVX`SwQM zDk}O+x6b^F5`h}^+DYML`-^-*@uT69*2A5T@_0P1iikM$t)X%TFL^LQ@c@SDmkqRS zV8HB1Usj2^AaOeT;4-CN#;s%`tab9`Lgb{hqzLWnaMXGuLANY;y<*5ba{s$U33DGF zhoLzRU@P3fcs*V5%DG+V^L+>UcfvdR6eE^jr@4BuT{oX2l>5{l1pkR2>lHjj2>z6% zE*dzS)u$KQb!0mv*S!Z05PA#OoE!MtmVzedKEv_fWu#WNFe(*#BA$eXmH`cJ|K=BM ztjI`{gepYbGS{Qh=5GQG1N-!a@sPewGFcsrpHl533p8+c!Jk;}XkwUFG|3pHuq^Z? z?#XN~mc}m?0>#}eAEw;`8p^Osg7E{^l-Ffi7#iPOoEw8CE{L|N(ZVjF6simKDX$%F z=Xfc=v%Xg%sGd9tXvS9*0g{aLz63%GAttrc`lPI09aSZf&yT zEEb_p*TerUs^-!ePR8eCUdBl9XruBogO;hck7B z+=mMb5t54+yH~@r?YZB5RY+VMo83|4v#J&OAV!qi`b;=cmll&8e7=F(pzSloZ;7!9 zG_MP}$gVnM*sMmctqW?3jL^{d?3|~a2+&V;2Ig0IgB@L6UGZTKI!q03X3n-HcLsCi zN`RC~CIv9X+H>FMZGnyzm2oBbiim|G{Qp`g2)6atxewckU}#x;{rGRNwCOBk1si)1 zwC!sAZNDFAi?3pdN7=v>Bgce$*$VKf!hctYoyn&FXY+%{rW9c_cLNa!Zvj)#kMiqa z)MKfjQZtmi7#@;88qo3t@dq2xn2lHroG_B) z&A+qf%pmG9bh&INK7#^8e{<8Ol-I|%2g67{Fgn?nX5D1P$jskC??y5iu7ar#qaEl&qCYmx!waI7i?R!8udVkrSE&70Y~ z8yjN;Q(}x7bZQZ=tBHry6(D%tU^mj!ZZtKZlbjI`8x&Hj#wi#LmernHxUz;AweDFN zFSe6SrQg(2#YeBRMkutD+;qQ0W)KENQQDoPltXf>BwI#C<#JR~8I!1SDUuj>TO~S?sgx-~Qu@S5 zLK>G!jV=>%8Dy9w#9-W}L4$91YJF>+wa%a4T7BzV?X}*u_p_hp_q^}Bf6u$$-+Ru{ z-bP+lT^57E$lH>LP8bZ9{;lEXp>L2X6ApUA20Gbn#V~7^^rHqywY0OuU<#AuB<|9v zEpwc-FA#%KsQ%WlHU4)!F_;DJwnWR_A#Ot*9Z5?MFU5`Y4f=^6-tLem8xs?p@5To2 z(s{R_|GXppYGsSly4Ct?the*MN?G!RLYVMJ{8-&0|L1-b8L?YP%@ta-5PON0 zm6i9CROuK{dJre0y0S;7BKY{!__Ff#Tg085*0>;x2SI*rhGWgi0(U=fp3ZTHM2lpwI6R>_hIHJg)+c+9i@Qa{(Yb_lib+x%5lqL!>S`0g!ac+BS4Mpw%2dj}+A8>Cs`^EE51M<=TGPx>IXd>~R~JAA%?+NvG?omKUN;+< z0y7H<(2R&F$&sPIPN@g*L=^(`Zgr{w9pk<2M*bz(6dkL^%069LJmD>jJUNA6-pQ4L zotp`FQYVCS{*}LntZ-*41e~}Gy1ieV?uUK}53)-~_Vn4?x2oN(%^n_FvY2NU_iRer zWas>5l;?0gtIc6D_h?KnL2 zrz?MoCn%!E6;RT=%@*-K$F%jo)8Kb&R48?sk&h&t9mZu4+Z8u`9ovN~WjbuK?A%x> z@=}Eg-7HdLYnuBZ_NE4TBM{w5^HV!%Q)amasUd6OBf(=9#z&_@*WS zQqOVh&W@sbMh$n0VBtUHT|%Q(RIxlb8$@U{iv5g5v9cnR=?$^!t3+li#skGnTp0gv zdG8XDkej=OLM>jt0ar>i9K)`39JrFzN<-@?dbjJY6_c|7UOqjI?O#v=(Z(S7^{2*s;bcf>Sn62gz43ciL16rIV%*3Uv#}f!f2?CyX#feKC%)NtDd7rbL4h;!~f~_Z{8a6 zfl-!8@ZdnhcLrz~VQA#Qw>+}O_T=Hryy`}@N>JXjJ(2QAD6Q(mCJs4tIfq(P-2d^# zOZAOh)>)6lMuGm`yim4!-?$*r*e@?2%)BZuS}km9pnsh(p6ckC6yI!mm|YguTa-ST z<<@GrxFJgV*sGa}zLctf~`IvF}w60<-y1!qvq+5;KwuXwpx4@QuzXgO=&oB zaQcYpvKuqd-nov}H?!; zw^yS6o9Ow9vGt+W!#nfjm-{kmD%DJm%>LE$gU}alLY35KcU%N-*;Ca?)o%<0g>$T~ z3yksb0BXn@u0$_m{`l7_i%RWOK6NIdXhrVRxi9gfdSBx66buBZLpYpJRxma}DM{(r zT$yETU@#h8K_3bq`r>t?R6LMBBpE(##63$l=2Q!;8ff^!7S?^snp}w>y!sVG^le{I z_VsJqkW&&TRoF|LA~N_TemyORYU^Bjz(ZWqcEyqc`O>SY7w=tGjjwPYYNvmxTkTOG zzR0RR%aEQOnq9Zh_jGOL6N|@&5r(~zJDT(3Jl^Wd(Q&2;Z3hpj-u>i)j#0#~6}bn! z(ka_~IHpx27o)TH7}lw_uDJ&UNgJ!!x=HTi%-mST3AB3m<#Zf346wahKAJPey?oEXZOg(eBhHmw?z1D2 zr7LHAgAH0zW0@EoC8(xa!hFkDf<~*ju{IG?h3yKosIuknqwf2^@v(Te#x+sabuwp{ z#pck_sSWah{Zs4aica6CGTAZdz!AyPKXwIl@7f9PtXyl7X{ z>ulGn1B5w^4zrmbB+L6JhnlIbIxkZMkE)H#Zi;k zD6Fk`AF@E-W_mB1=U8O69qYvGwVU2Cq2T}l*{;>Z%KZp&UjEnPKsJy3uu4j2cop2x zP6kO~#2p#Ed>fL6tIE%OyvrwFMD z(5coQ$u2d<(aA~xxMZTUFI95*r6n*Slx(%Hf#Du71?a^*NXUz4#>R;$6)t*cn?UKEmFj8y+$8dXg8zvhgopZ^F&s4^o1)G)f0~4+KR4CH%5a zg2LXbiGgEJZ?n+ayH{P^ZfYIrafnlF5}=E1c%GZ$64(fMe%D}LHT8~tFUFMS7!=}8 zs~%MXRQBq6q-7(J-PT+Z22k`M_$2B7R|SD2J-t;bcZ(6szk))$_3e@8rpCX;sH1qA3Xc`8FszUScwPOpXFX#si4K?S;^e^Z(euMNRjf0%ec*oK5n z2Uf=Tq3hUmd+k0Hc0C3YBaOvoshvO-psTCBwxcf=>m(RsQ_?W!{C$YP9#p;U$>$-x zzr*uDp@)ptY6w==-Tr!)GNiM&hKHZn3nLRPtg#GjcnxK%97M2#5#p_*Y#7L198|I$ z=)mLYe#vP?D9lI-3&^4BRsWMRO5>xnota#;g19}2RU5F%{HAy?cMSyR?k~f>J%G%| zch)GA9AQMuB{?}q3wB~&C{y}efMEIyXgwBo$nMHBsxWjN!JOOHmJkDy3aY(j>)nPtNx|z^mZ3$qJeBNQWUVkEc@t%_W|^skvP>yU)?|5Q%^G2Z z*AmH6_N7AhZ6b|rzI&p+_x*i;et*2j@g3hE!^}PNT=#un*Lj`ic|T8(fu1@$W;ce3 ziHTiPL)DOp2|;GOShj)@BIQ^U_=g}Es-I%YZss2cA5iuubx$%ey$oYp#iPMz*6SMP z1SY2K)r=RS&iPMUCZ@e{nyM$yd00;OUv088HD~(dHZyIlc=(#C(8)8RyT`DcUkdIZ zcw&nTkb%6|2dyo;zi{ZzscSZJY`JZ=AI7n$p2E#NuW32L32_-r8fcNoQGDDy8afiz zLF3--jkxI>S<$ogeWRJqIX)e}ot_7~#|tjnTg5LaPby!X?nU$dI89_iAWPU zBA@Hf&Lftd)8)NPT{yg2e7JChPIq%ucJSd|@bKzMOVAkX71SLZe9*zB8NR(n&D0d4 zyL7v>>&o>ndn^;^YfCCW;%2?=v%b1aDAaYSy<1c6ElsT$wC|yuq4&zJQjbO8e^ge7 zW&12DJ6~M+Agw}}Cgga%>9Myeq`z5xA0n0D+b~e*x6&lixjs5~n$1UAPpS4<-K`4O z5qbip*wo5r@lc4WNinyx=dkCGTdgsJt6w?3s>aezCvG9l`cAFo=k(9@byNC&JbKgE zX*IvvEj;*xnrxh1{=G*oQ(yk++dsNvvOg6O5GBJA=bdO|r0n>Ks%9P*@5$=fc!9F@ z?);q94rzAF?E`a!eC8S2r8gasgA0|UEq;&vSf18eyxCheFEonGo78poY7gKckNC}B zyTMN~J_L1MbnoBOzVzb~I{Aik>FpR(xOTicv+x-anRi<``n1zNGFyF$8pM7}F(z9o zk$7ZW+wmqE9Spy4w=(InfDz_z;+urzxNt~^{@!k1R|Gm))9TXmL!ybqbF&qhxrM*u zBoYf|rX4AzL}XjC^vhNrtigZAFn}$V+={F&!U%`9$gVLAMilz^TKbTqWFj%sTK_9K zhUHaov8%KF%15+GE^#$Tu{CBP;Sl94I@xQ<&OeJW=<&GWt^3F|CLMg?ugOvmzx?=- z`)`w#hch*I&LdfvHw@p*i0Z)tD-ngue$1kR?cFQ0E)`thh>*tE|}q@KFc zW^lfV^-<)zNwoF(PUKVzgw>emTb`9FKCdIDXZPQT?o)pbL+XW`HQt=WAbizu;B-gyN@ zdd{Jur06pCrkkT9X;`iGt7UYdF^^r~<15>x?bJ6C$7wtpV8tZ6X4~30+ zoXh5G!_sEw3&&rteG^&OBI4UQ>ZekeaQvl}$K?tA_#)TI4iV2fFY^HYbk}veT*>m2 za~Dght7faN-wQW ztaq1F=Bvd2vRT*alcx7bH&MN=PFbC3p7mWfGUlvX9+>GZo-OW7d!u9LY64SNhi8h* zr>_a-n8Pn@^Pg~bC06>C&1U7V&dl$g#U(5&P;Yz{dnraQS)R!7Q&~Jr<4;Gn;SnWM z)6RY?0+{;8l-u94RAGcz>u$>Q(asA5!i1c(A*_(GchXd2>MUGK-_cz~MPbP!=F)j7 z=U~em;)1CXm1{&y0&V-ynRE;fzH{)`LX78oh(hhl@!c_6NQ}mTdaVo@{}kdmtpgcC zxC$atw&F&^&R`fze&pR60ULp?5~Dlpkwcz^Q=dHiey>uV5hf*oD-bE06XB24WDVzCgBZfD?xdI)c0*sF8NG#s@0>GJ^_+Q+W)9$$A+9 zdsx#J&*aOwf)EO!g&j#mQK-YCTcoR4;0WY{;7-};Keb>XbPun|aE!#~U= zNy|ueL0=EI;g&o3f|&xl%ZAHWzA`%{2zZYZUSP@6{c~kD&Ya##S;e*MBSYR(^$(W= zc{=|D+u&($c)=1ZLLSI8_Zb;nufJu_oI`n`g^>S|H`-j`H`xDi=|=ESc42sGF6iPC zTV+%gD}zt<(8JxX7!9ug+Lk46nbJ*zOR9$6{(MIfwIC(-B$_15@ z@W6m7NZj#$3R@%4wq|o!PVjdt?Fgw7iK);1#3(}UHmU=XgvOHbZwNas{^Me`e|~)! zl=z+5jx9ff49d68Y^n20elbro{_Zw#jh2l zq2fW`6@hX8BXT3aCLYpqM~W^Q#8E)RN4KVX(#Dqr=?FU%2$ z?Lfrm$rV!SR+eV{d?rpwYc=|>xus-y+QziwXFVIw54dC!m0~T?7B=$UKjvBs3k!v5 z2}dK!vY$@&j-4nR2uMHf_(A&1=w4lw!1cu(`j@d$jtia(f_`iMcOs=PEKNP9FaGs@ zuh0H0_xpRl@%xQE3wW`>Tyku>w^$!BUQoe*2;#N!o)?I;@}&($UUchr9LuwRAK#r4 zX}R1Qr|53!-g<_2TDx&TK+)|&NyRWF;abDB=0$qi0)5}~WV+MGB_HM52Q_KSMe6UP zA5(gZo%&y2Yfmljm2<9;m82!?v7~yr0cv)yo1gvbUIcR1zcZo3(|CgUd)n-Dqx*Ev zqW^+&cAH?buU(N{V?;~{yqpQuVKgjeG#ZB-qKz$_v?pov1xiAay={4}LE7WrwR)Ww z%&2b7#aW&)p0CgJINSOi%NsCKAxxZzcaF1}8ddA?EP5aOk}l$Ob!ySM=1YywTR-~4 z0;L0ze&&nJQqq(vf&}i z@#Teb)vm($3s{XU_vd{+i> z72i|+K-bFnK{yYW**&1(+eSi*WZV!9tm7OAqztN797@f-R73HQt`mp85g?4l4GnK1 ze3SxCUW8ceO^|72Fl7_JRTDCGWA3@ld$nZ7H9HA@>2ZGfA?kZJ+(4Kb8F6EKvQuVeNM#pj zuCA)MEGxvgMB?^xZB3-&?w`Z6z3uky zDI@m_yh~jW(N?t?LrAAJwnBwS$^nYC)RN+XwGZji=8Y?VvaoAJT{uo{ zd`gX}j(-?opEB}x@c@0T#!qFQlF)P6`H$Bsk~w;frfQ;))Q|wDt>A$c7{sE=jhk&x z9-%ojtTmS)sO@m2G%FqwU8 zR~^d{EMEq3c-`TO%26xznY3*E2jjWy`?a>uH5Yt1VgK;Xqb=tq zkb(+Vo_Nw1N{1h(73tXV9Ms7!eceWFDEPoH^Ff^d+oH#AXT0@M5gdZlgHCp%$XX?+ zKX=5L7bU-+)@;0Z5)){}vS(XC7}phuGle*uq4Z5Bcs&KDxsQi4a(?GlQvxysoy5aw z>bdivjuiB|-DR{!9dg<)u`Tl}>L8Rz)PY!RW==iksxKq*T?&n6@6b)mCL#?x2`*P3 z7{V9)kCuFRc^cJxh%<}$gXA?pj_r(cD4=kxD16h!s4zgHGEcH% zD*wO)FXH~{iTu`_Q{}Rw9H&1jOcsrt$6Ut~kBYPyKs_v~bi*i#hZv2D;7)$KjZxrE z11Z6}>LtOQabu13TYDh`(@Lz##rF+al5NIjw4i7;C|p}eQT0fJ45h@m>iTz3c-q zA|zE$8p4Qi*-Vizm^###W(j|FPf`pT@I0kZmW={AThqobpOI&lr39N2*|ucLlkS1m zI=yP=s9=G(kv1lqS9Of#1J`vy4S~9bY&+i_{m*p{?%AiP24xbtG`d_B!*W6Fo${@Yg|Z7^5;sF`Xz;k=A}@ zLq4;2tUB=K*zQpn^X7;MY>g*fLD#U@er~Cat)j9$!&N@zz9I_BGiHSeKkybC;hx01 z)r5fL<}`p0a^973KZ)37)LF`!Sp*j#FJUrpR>E;x8fLd}eX3%*s+ag|bJQFFCX67x zE&D4#C0MO*;?9G?NJExXc?6P;&0}Xr)j63xY6{F>o)pOtnk;j&;Q}teN>vw*BE?Yc zu}ma?2F#4i*aE(LoJJ>e>JX5qojU_f;9z*?_UQ(6%}^iPXR!QFWyoeyY^12$9a=Ru zZC$H(RYHQpC^+uwci%|pqRIA5af$GuNja}jVkCLF^ z61G;Up+z=)lVh$E(iNQ)0>`RK2m66FG4XCSBOuwqS!(weX`A+kn7}=(kq^0wPA0|! zT)%gDboDLT*4-l2m#1TuKai__e|x%Rd~}tCnp)RZk{3XZa-(LpSdZpSQ%xP&kSQ$bFb1UA>710#@D;S`FMzdT0tNr{ zZ`d)yU%%>5hP=RM{f_krK=aSNoW%qNh)D_Wal8XxBwaDZM}HOtTNaZLCjTlW@HL>b zTC=MRVax_%K|nwU=1DsE5duWR-}e>5ZsZ3`{<+eE05Nf>u^t2ZO&vz04;}9=Y!bBl zqE^*#uRfHE<Q06{(4E%QT%Cu! z2X&H>U(C(?-+YXPZAe#yInl{Dd=i%PH!N|;XqdCM&tC&wqu5&4gql2PUhPkPZ&ZHCDB$&vo#gQD0>9-hdwDF@Pt$ z^qj7NHDbvPDWL-Uu3I8Z@o@~4U2#u}c^(|+{N1+@RI7PNzzzi(x>KIq%-#0c^#JEJ zj5e6T_iQss^cSH493STQ*W^widh9gW5^3)24Myy?VY0`#l=VDLii`6!7J;*?%voP(#5WPXrTyua}VKfs8Md;*FU zhiopBT)Fwwp&ny1HOSx7`uEg<$B;5-Dz0A%lMAMv5_?}Iz99ghj(jBSL0tgqfgnr1 z3jl4v^X_K0o_eRQ!2E~}sEdvL-9_#{MG}c0@?(deCMmzI;UC#-8pf6{9S4+26xjRU z?AXRqgYA%&Ww0Z-K`>#i=c4%1I^ale5<5PMkr!L|RO>DQRXUrJJ0jotIJ^VPr< zdBMTC?8rq1ovRqI*$9sBFKzT-+rVpT?#4cMk(v@}CwZ&7cH!4h6F^NCB}7V6MMvR2 zX4!^?mqw^&F#wZB&4sGFq32+#JSReGTP~nU3?Jzy6ak-}g(Ln!F+hr<2ZLt#|C3#$ zAB%62W$c!pP|y(O%qa-jU>637*+@2hq_GS)FO;OKur>NXzuJi5(`z+{+> z4KR#ea5+s>m`wA5e1(GJxH|NIv)p}`9sMD9!*v7|&wPqS0*C=9vI>Cxul$e8IY;5z zX4IsJffdwaSC(4OMqp_4Z%R^wmLscd=S9Q+CSBWs{s8F$roi7|gQIZ%A36PY#hAbm z&m8xlOpG>UtEpXM6jpkhjC%!CN&>*~22<^TcR@xju*;jv<=S9IfEphtTt^5j_m{#m zcqC5bdG(|oBUts>sM}}tl5YLICqYe;fnaXt6ifC`zjW*ze5v-GC3heMsOzpMdsm&P zk=a1d38?;rR^mgT%)&qHt{nsM)Jrm(as`mp;QaXcUby9HKwILOnrV;Xgs(qkVAN0* zsND&2b9n1#SAhPTylvqeqHT(;1jLOvw~cNEE(0?<&dhCxIW)+83Dx#DQCMcN)nC?k zPaT;rXgXNxA&mbIUs8Kb)@=*@;9DIx{ z3VKg3$r-9VaSG^DfY>nxd-gNuZL{lza-RZS8odz)?qY1;^iok(6H>_{f@Cg@QG}ZZ z0J$i{J|FpV9B|eO069C*Q6T-uFZ<%EeyB4JESp#a00WK1t%mqj4A61HWdGB*%ANt~ z-jr1EBd+?YXUYS(o)sAN>bG@aP>^QuwjNxc>AFse)jm&DJ=hu$2K>TuC;6g^Hgc^b~qvVE~BaF;kl|_n+0O{!9b){UVI7#0? z=0^|Q?}yq}U?m+Hx9skfkKCZiJex+*!_7Bi!_w@Iwc4HdS-HD6Jub3tx(SMg5rg_S z<=4mzqXBs1X%+QUdex^t^b%ig<`IwmC)}!kUiQn{{WOZE!u`xiMC|V~gprv)D-gw3 zz(eLf<&GkPyEH$Y*h5TUMsDqfkXPE3E$WIC)?S%am8*$8x7@W0ISTBHfZQ`=`}y zmj;RbyFexzF^&|#>}|692040~;zJ}I*H9*=o03?vdz$~ZM+A(^a4ZkRGB;bVlEoJP zB8ola7lkAeRRi0IJ~y}9GR24OfUfI-LdA(_0II;>-(;p9mKu3-750d~@upV>b&zT^ zKVDF`=PNSrkYs{R<6}WPDzgKf%2FeJce6cb$bcHkxo54MIw+13+AhRz>|O~`9z;L6 z=|K~;t&Hq9hHZ}^#ll|db6z<>rsQ}=427gENHpW4Fv_oZ>lN^x)c0 zoL<^cP@u(C70zGsGMgXrEil#hrnt5635ig7nRbLK%L+QkcvPMjeVeiprr5FZGWTGX z^_ZwfhQWq1zj$J+(W1UGht#D+$&1SN57MlZsBWBzlvlv!=DzaC(HEo+7Uyu`Mu57BT4*?nHi zptm^|FXWylYUp3YAsbxS;l~i}4%h@%m;@ z!@z~A&4o>3*;LYWLi6zKbt^Ur5^1TYdu@BTcV~5T_hC)`a6SKFqVMRlX(#{1#4dB` zsW;R470c^g<^f+>Nxi!qZtI<)J?gtttI5ebA6m^>v*$_a64Iz=b^o=e z-&>`KkIDp;^^AFayD**4Rs0EFNTikIf?8x>(QkV_1M%KPEgjAB}TwBiOM8^;AoZo=G9 zG*i@(Usr`;FOoc7C!1m^1v;bqzOm5oqx;K61ciiCaAB5OlY~%ee)Mx+slm3BDLB-$ z+I6?XaMZuYKoL4C6X)%jwXqLYc+X1SgJ@LN7Mf|)z_iwVk0mC!pp)amLxcSR9(arp zI&e~Rg=>4N&*>6n)3Cp>VM{UK{Oubnt^o)K^_GDW9y89OFZCeyogL0sd@0G zx_ccoR+M#= zkgt%B_pU;e7LvZ1dh&>)n}gKd;`roCj=Yum9<`DkGb} zaZ}F8OipySe5Y}Qw7@q>qHWOMZYpLLzU+3_Gv|eSW8~%D>cdA2oe+M3LtnJCw1@*` zu2U_d&EXtU9x^NK7f#Wr^blV?<)z*tbrWZXwmx?Gl$xG?YFoCtI<7Lb_L&+cezx2+=W$w($>6f4h=A+fJi_w*A=6-&}_gA7ua*4$_ngD1wK7+nmO6N;nVFCZjv1Mi(pg{82Z;!3;}zby(b% zRtZg`a!=kd zJ1iNfxh-IwdD;SCfO4_UVT33YavE~xR8e*e-o(0nNJNT4R}EDjVkIxjd{*hp6N#&A z;!eR$IJcA>fh$lpJyq+ukm3wh>O7YI8$TFCx5hy|B^|6nceilR01H-bn_hWrl*cFi z@wcS2~h{5uF-_g)Xw>x)?9i$gG=nD=Ot9)J7Cx7$F=SWn*Z zi^Ez_!foD+vf{y*wgfFCwGeqSY0zVvH;0$6LUEQRB{YW!n&?CF&C4}YIkgh+HRCS5wOD(q_IbP((joetX|LZK z&p|b<8Gq916kX-#wIV&Au94y4yaS&dom>JVwB)wK&Ka71!*`2y4CT2=M_fPe-gn>J z{i~EcZDZ{z`c)Sp`mJkIEo2Fq|6JyJyg^JxrZU^iCC4$w{mJnC*W!n*S>}uB_2q(h z#+^n^eJ{!EK6S2QGUr)z?yOcqne||_{n4DBL8Z_Q-_6kj)p4=wt9Ohy?z}ylYg%qV zIql#dD~yh=y4qdhIkXZtG*Z1&GhEPYdaf$V^SwmdTRSV4ri}yi(u=RI85g@vcXqp~ zZIc>IX3lD@5N~Xhs%*Y3HCgjd4t17WYO0#Acg^@X!W()d*H~Jj%&zG+JUjdO4)L8@ zWzzFd=6vI~Q@)t?N25cejcoU%TkYqm5;2&v6X4Z5E z>3xJ&J=RKdl?S9d^OD!@%(bCshc-|7632IX`s)Jdidq{s)sdTWfhHRHfr!xc%}cx6 zgliJl03z2nlW)ifss%1~1xglsjuqZ#!Mha)u#1{tcUH#I@++-p|5z9-&6)kJ{Bzlj zEKB!y)GdFe5=whz~br0Qjwn_Z?Uh8RNY{G%* zo5SKoH$jLQ3UjnpevUh>g7yxkwi6lt^fdy%E0W$aUgT%lt4L~1mrw|lESP?w=k`Cvl~DxS#tNcYQF%4s*R??PWd+;7F+RkqbX5BEn~jSIKsaEvh<{y6;i*cwUi?xKx;uhnv;8O|I#-ncLe&e^;J z+9K|vGgG9tz(YD8N1`t!n;HlUifpH)RbQ%X;2!+GJ7rp*jay;R)}Vf+fcB+a@9%x# z!|a$mDSbRQ=C{uCG19iUu(z@oa~m{T9znx zDqn+_+eNn}oH_N)WmYbsY}Q=XbFGC`RdCXi5)*XBg5V#9J%*oyrw7zdm&*CBsSmXs z9#Gz%bk#REB>85C%TD-pS>CZ#;TXLm64;DMt|VowmIvP2E~{j3u68mm-89da^0n*h z?e9s>H^1sg<5)1dfx_27#%b#!3B>KK+0~?9LQt3$B)jdxn|he z#|HV+fKdWc)>!+L<37ojXUzkHQn9*phOeCtm^g>C!*vlmWnkmhRR-!73GgC0bqwiw z#p(^{dtQwTqYTExUKx!)InFd%N8zZMl7fB35WK^SG3H_-Y>1h;J_(`hNx+^5BcXTr z&vJ~34SS0`S*Eo_8C$Z!mZ@WEK92VdlqkHV$qslD!l2@)*A&j+6^3I_X?V=liHd?c zmu%d;5S7|d9W+``(H~35d{&5iVruyex?$8kW=s* zG!qmm?*ZZ*9E4tXF)0)Lx4nm|sS4M2@_s|@B%9FkuMk&F8i9~UD^qrw$4 z38P*S9yK=d*ZXjtWtu(MaG<^g<114Ibts`T3K(6xsd*UGT_M=U5wJ&f%TCvdGJqgIe(`X{a}!=4w%QDv(39r~`a)rkrZv+!uad zW&jl>@iCk)y>|8q*mr86s(Lko8xbLfBO_ z7Rlri07OQb20f+Dkf4P8X~n5J&*`_^i`;92U3mZO5|b!2?KQ`pcwkAK6wa4cJDY%m zI?D*M8@Mp6%8605+O+}SHN~au%n?$nf`R2 zAAK~V&+T_3IlK}q)ilWV9yjK6-^&tp@pp_m>QP89PN`R)Uh=epT zTG2Qzu&Zo~Dpn&H_xnzxa(+way5vADiix0O69iVe7t*iKU$*149aF05sc#5p2o?e{ zeB#?`A@Nv7!DL>ISWvez_RO(%E;5)T2z3)7ZhLd>Ei?FRknIC$j3pNnqOIoQ4*_BW z<{EMcnTmUZl-UO~;I7nId!L!Y3G{Htu+i^E7_c1_LCI*axD&zGF*QUr#$)K~(vXDc zOWp%PzqtZwgXG}Eb6Poee^;O&V-Z$eU`^8M&ZtZaHUI-~S3q^Jqy|A&r}9Vj!-#Ks z@AQrQSIl+!d*^I+K2EqQ;62%vA{Cf$6}y<=wlU;n+w5I4FysSf0wYzbgvG%8;xPFJq0 zOkrn$?Z|hrT5iLZL10-IGAYY&h!Ddl_kTQHqz79QNWr;DV-ggIUO0}UKw5r4tdqJ9 z)x$4VbC!An==8GjYZr}3^667h4{*Wj3XuNsCWcg;7v~Q_2CCs4eg=cQfI@ht^8I5| zR%^0^=Ciq z6YkT{k}LrG9xeCz#F4`Z#@eEi6yPO#Q!>F#G}oO~#lN4qE_M8fkN zG<1c6-~f?&Mu1&ovV<~MP*JN}zzo1KQGgwnagGy2Vxlaf8WGn@J<8S`6|M0CzlwBFKo8hf zWHchX&;!)JwhAN{Bo3P;{>Og_zB64qv3=nx3-FL2!VftP(kGYS0IT%uIvcEBZ_gG~ zTe?7rq(AcPdk&EHy(wR17pPmFNo45JLMH>IAZxY&0FXZr>tj-iqt1Xnl1c25G{N?k z?mrmDggC_>BESM@_=^L8z6lCiEo|IBod}pbDC`9|kKO0FGk9u9GgUdb6S2u+Mbj+R zaX+{qf{~xk0;by=Dp;T5DfJ#!TEBn(Rt%n>Ok>H87NynSvx0 zDEdF0fU6Q&c@mx1wcsT$S)mCCl1MXUO@ADK|Fb`E8xAd{`@IsNw64ee=cp$Z|6e3N z$LJwV%VA~+4&!-B9t&@{WYjyT0X@DgO7a1~#&Bt=pNIc6TA@}@@`|w%SZBD=>yPHX{hAfB<|i}z8(?iK-fh3?>Xz;&(<5Zjz_zLS zzA*5ED^PWuA2I-Gi3eB}PXN!IBWqfy8>1dt7sTwR`xFD6xl$khw`>8n#e!cU#|D{? zKX(Q$0xC%sr;cGNu6O$pk&IQKVa8m*{FQ3<0~1JOdxX^mVp=(Uy&wScCX)i-VToP` zJ6RdojyUzpUV$t;<{gkgP--470O6P%Yn9MsZ-k9Kef?A8WoVn}|EQ}t{4JwEazC$j0DrBGj0pi%qu|?jbQEDPQUrtZrQ;8u1BrMq zpo>#k(PW#dT02p%0Nq_V#8hIOPQru6{UKC5GJXQ^X*@Dn7#)8u@6AGZu3ov*NKszz z>#wah^eVl%5mSIg1iE}Za*NoWBD+L@XEFTH4>U+&5J;hs83h&ECw@i3m@g{oEdK(Z z=-$^_*o%9|1A8KnPQGxy_wp=Ua1F)0OJCChg5 z7x%)rz^ws>)YEmcl2l@_qzFdz;$4W`Xf#l+zp??4_5-Tw=YfX*bt>RWth!MC!V;v& z8^dqLzTXIV(v%5qXgnWi^ML{P-Ou|e3k3Rr+UD@BcGGhSrJHNQvpzRW7CxWt_Fc%b zjb9PDW2*`dt2=&OnB=lwht=1@)qPb}o-<3$B6(}B;QodY!T$j`_`VG^cIjx2@Y@w} zlC3V;Zf?qsy76+&wQz@5Ms3D?CG>3N8Y^eTHm%5K|60DbH@o*7ljOGJcNexv8-Won znQJeG^YxWEi>e0NBv~I~JFVxCKtcW(>4h^_EMAQc*bSZCsSaed`4_pr0 z&E1T)PF_#XEbC|4Zl;J8laRnTH{OOLwanjGEceqgYs$XhZ7!r`R+r8m$bX@s-lAz9 zo6L@WBP$Qi#od+cw{C%F45=HkoI{VQo-d5g?0k*gh?efhY^puGJd<5ClbQNjXmy9h zdm^N;1i{a%O%hop8SUzxfL^Qp7f&7klSiHZH|c-%kokXI<=?T;ZgEPe9`5yXeC!GS Qv4BEVQBxsL-s1NE0NknRRR910 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/head24.png b/misc/avatar-sprites/female/head24.png new file mode 100755 index 0000000000000000000000000000000000000000..8b9ac543808d104e1b8a4c7024fe87e758096676 GIT binary patch literal 4965 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 Zz|nZ$On)-qIq@C?=xQ2iRH{2X_%GCE1keBg literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/head25.png b/misc/avatar-sprites/female/head25.png new file mode 100755 index 0000000000000000000000000000000000000000..fcd03b9cdc6962397c0c9380e1678c07ee31eea5 GIT binary patch literal 7035 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 b2?QdrhqO6zqul;^Qv)3hL-h)%-NU~FwCzAz literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/head27.png b/misc/avatar-sprites/female/head27.png new file mode 100755 index 0000000000000000000000000000000000000000..149190f1998d04eec4ca357b16024fca8cd838da GIT binary patch literal 4899 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 BoRI(k literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/head28.png b/misc/avatar-sprites/female/head28.png new file mode 100755 index 0000000000000000000000000000000000000000..6b2d31ad7907eec289b533aa5a3130059dafd4d1 GIT binary patch literal 7304 zcmb_gcT^MGx1InB2m%&FK#&qa5CQ3(&^uf@h%_ky=`|EV5Tyu6mEKf(FACC|lu&|z z5a}YJMuHL|0ttEX{_g!P-@9+U_s4r{&8%5__C9-NzVn^EzcX=v=xdxm$8rt;fb&|K zszv|+O8#|Hoh99g=$05GU8ub^E&TxC8pp2_G)|ve008F zMTNuL*UQ<}-3b7K=JSoACdS)WY#}HEFNQ^hyt)1b-2F< z{Baww<9)O-4MgPs%nk(sR_UCKprRCjaQv)o7fy>T1@1=oHw*g@- zb7xJUz6Iz(FwistRJ4GwVeC^rfFcyI8|LN?0-j_8m(};p<-XslW!U5=A(h=I*9w+a zi?pJ;?L%p9F35fpp~ZCTvV=XEeGWvhFF2c7BvOq2GnOkBwi#5z)g;^*hS zu>;+bYZIx|Pwp>nBx&GVXoz^WX|DHL_ggLaFRvM1^m(qDlYkW|;fhmEkup$oBKTrULrra*Kb|C+u!^>dd-}B`V0QTFxdOzNzB9Cy1TAhFq_Y?^lMK^#5 zXRTBp0I*R73!02HDGpHqfND`Bf4vgxLGM+8p0n3_&n))R;O!)yD1+bkDKjXabBws= zYsXjpSovo3cs(1xozO=Jn^=#bOLUqyonW8oJ34u9`eS>lg5H}Qk<=7Q!&H~-Ipd)bgnCq-QIj?ps{4pU9GeR*Fp>6m-!Z7H(DfXHKf zbce>B^vFg-`H!@3Ra(m>S)QoBqWR$HeT0y-#0As2@)?iKUBHU&nGFU3<>va zU8NL#?=CDj*st6mB|x3#FxtRXOp=9AL3K|)A-9xqmc*N%D_S}wHLqSwv$!z19JM&z%xVm+kS&j?gqC}mC>DoX65`HU_UrZ= zs1zF(HQ26o406yoFgFDWaJrqZiVlbrf6vn}KKC$?zdeh<)*dfkS@BX@MO0hVyvYcg z?yN|;mgVy^&tIQ<^JZBlHvHN0 zOFPxtEl(opl!ml<@9}CtlMrX}H;w0vm&(qSUD1=5!PN>@x|OiLY*&SKdzN9c3c73} z3Us~7mV-MtkFSLZ5ljdk$7MJTT8pzywBWM~w1}&61L8hja%@6F3*QY@totD5O!r%!Mlytf8k^BD9Pe9d!~hm%J~Z$}T4W2Dzw%2z6@E2}#+J~sYp zd^TG=SN;xCWHWa&7n!@#Vs|&_u0V5n^E)T4M%3L>OH6Zz=hM5=mL(RZcdeV$Yw~Mu z%(mCGmt81p)lbu}Dwu`#*MDz@H&?VU*ROv%yHMNg(Hv$Ez0U+~8K~{Yq;;l+wS^@T z!Ge*cO6XOfXD*5?yP)G|KnhHQzXQS_8@i zZS{-7#>U6#JRTLyR1nN%9b6jjL}~lue5_YPrf~VWO}Tx$tZY$N{1}X-T(6^i1LJmSH<~7LrmJ(Ryq5U3{!Vd-C!Zn38 zImu;_WlP&J$)1+smQjO#uL9erD=Lq;iH^h&;v`TOaRUS;kBd}_v?4qC8S;>``?;db zg42)2xm~4%qE;nFrKHC-kJo!^I9-OnCf9HtZe}4;5UzAj{|Mij{Xl8IVISWgPRsi= z=BatK;&bm<3zo?{nc}d?MHRml)nnBR)#Y619RumQ+uGv%3YCHnAaDF<}N>07BX6O!d!#QxY+UaTI>40Z^ixB$@ zO1N87a`hR@+vl2jx~)eBunP)6%uzZ_FY^} zZ7zw{F~7}bvC&!mK)O-RCwSr98snK;(Pn3><=#DO=J%K}sMfhNdw+xBfH?y@=ekHn0$~TzPAM9G%aqz!>+e_VNN#CgY<|Hy4A}S!29Ly0aJ4 z-&9n+Z*`n-o^syaSiW6gMVC>Txsgfdd46vG&G{9xH@mnWY70V{<2M)DqncG(Uw6yB z>u@TABgSPFO^QtpOpZ+?FjGr!?U6q{Co!y{9Y4gr&Ma7U91;}ZT??ilQ@t7I8K)Di zlcqz(+PKQ?pBX0});0PbKD$HYQ{)6nZn|b<>&F?kDR~p4q}f|&4Z5N0U8nhbu-oS) z&YLFY4SwPFRt-jNA5yOzvY(fk4@?NHUZtGA9>@k|6MCSWv!A1$Yn*dpb>FJZU`%0h zc4s*Rud#5QK2J=}GFTgH0(YI?emtE9-JeLve~}*+E_k$PxA3YtbkhN`@_^oJuZ_Wf zbxMsGzbV@xi@3M{&VRpgVf~W%JM)}68C#DX{~fv0v}uE(_Pq9-+SYq+t(cI`x1r95 z+pGnWh^2$h;O|$6voi(K@=KlA5U<05L)^-hrEp(f0%Ej%4#tbA=`iT9J%H>g&8aNK z%qUu&E`HiueDt6PR)n2g)Hpo*G-~2B1(!sxawaJ|X*BwLG`c`aL0bBYqAy_^U#2qQ zIKflEbo%Oaw3g|LQ25UoG!ikHHTg1gKQpb{<6#M5rw7ekw=mc@$le7H61`({V0NgASuu& z05~F&uG;_*APfLIb^sug1prK5skQ^^0C1s6OI67vX#VSxf!jUH@S)Yc6i0$<$r^3q zlAVhrMMvHkSGzz?bqG_sd9srY#Edh6N{Je^p3pcdm<^Gj9y{QVkEC$!6H8cXxLsA8 zs%ZwHjndTrL=4iHnV(qWZ>Z z3!bZb#6I>g7(+!xa#v<J8E>_oKjASc#JbyU#W)}1>c79v=` z^XLaDDedu3_L`CUvdNgQA{GsgPGY((=Nk$hhBqFd4`UvEhfN2ij~Ba_q>t+=rabiH z0asVpBrY;CyxZ-Z+)^`YF8%)LlYUb}rn`HYdvWype*Z+=1C-|q*%v+X#V|Tx zv%w1AhG84xR{}Z;PgxFguhJ^`puPw@&v^M+luegmnb$8L-0Yo4TD(}=s92ieRKoNd zS^Dq)0{mYy@HhN_TXr=8r%m-4a{Y^AK6WKKW*JgVogtffIRDR0UNUS9qGMhd9&843 z=F#a;q2R7XH<5Dmx~r_hQK{tN0Ev7DI}I%)uG!Xomc}njqhV|*wR@0<_2M63`T0$P z9Kh1-oHW{+K9=byvJ3q+F8~DEYDOR|B~uuR7Gz|hOKyLK=wAT&TR}IgN!uhcvWN(P zg9D(V`gQzQtH=7g4@UCiQ1+U)ZNc@h+&MvxZ?gDxTS7c5$TQN|;`cHCO7eGx|K946 z*;&$D=sxW&6gZ5aJkgO~T>akj`r`7M3w)x*u@&8`*oBA5GW^Bg|BBu}ko`BeL7>kH z{Cd-*q$OhnuVomUHeb62<;kXX7l=NIQc*`l-}i;1iO`T1j}{C4oh{5U%)g!(fUHBU ze*avU_AnRKorX8>#7n?OOI@R3!As3@(Vp&kC=s|Y+%grLovgbk_rVg;Lp7Y=Uin>0 zYroQ_V5aw-_!Re@_$VYI^{(5$2#@?F!!VJ*T5*BvrXbJ=M7 zz*jD;Nu6Vg`^_-4>vi(RG3Je3j*6yij<@X$phyg*W1zfds#57CwH79e>!FekoprLw zPUFIbY~TQ!>#_aE@^z7r7I9H1c>b;ZA1d`PjtsPLo`WH_w&a$xwAetF)pnb7CWftW z$UIVYVQH8H?wqKRjScE#O<5R<5D1M97WG^Fv1C3z+1nKXiD6^=Dj72r1=rP77j1vu z*u#0Im{&2tKQLO_yZu7;5$8Acy@Ic62?5=jRKKD4`ywDC`_mG5PwUr{^OnMzC_Laa zA%MZtVy_cX{;fk;RMg?|i6XI6u+BW+wrO^CIw(`R=@YG=o%L)LqR!Hqez*~OCD)#= zdNgF_NZgH$tZ^)Rz&VQ?-DndKKE8u@2|JBfn@wXKA%o=T1=16 zDO)uD5-Et$qBj9YUu#LWp90g)5NoD>{^2t#64Ps1B+n2z>^}MsaC4fx*_Ksw@)nKFzz;=<3R}I@jV-%J zFIoFEt?ZtnXF`$H+f#Fk+r&LH(ryN`gZklS?dF?toJx{zkg&iY$ zCT6xeJBw=g1e3;i4eQf+>92;FS0Mv2pRLlbvm_C2I)pb594y`>ek~MF&PJ;VMON2R zIx-6FD^|h!;*Splt)wnqC~`oXmLaPZ&Z6SMp}2{tY@t0(^0uqVh+0c4`Hr;fGox7W zM4Fst<8}kRMH9vxV&|#p9a7k&$Gho-8QdhZ-q6KZf zl3MbTQ^?ZkAJ$i-7BSCiH-zD8)-AQpv)S$4gp5vv-d@sC$DT~OQDCZ^?!FX!8a$Eu zFa>2uIPHLaTA%DaExe5-9)1h@7M$wS>98Ohl;`N{U$1zWc(PWQ7h=|bdti+;dyOdE z=NK&ooqaGo6Sv<4E}Xq?!W1`zCV__MhYO|RMc`hk9iBNGeRQb)!2o+wBtQIDVMxuF zP7=S{iwnJ%6lznqR*&(`sl}%Q9qpXAq?}pfYmWO-xyJ-0`Gq@m@!&Eon~%7?>RQP) z!NmyD8Yy0;-qh0HN&GbE;1wzB$VhWM9a2{CQTAQuvcrVImNlf{V?aQe;Hi+CYV#HR z-dn}Iu1fTZ79lj0Uk4Jd0da<1_kb57cR!m^vI|c*V-``zCT7rZZD84z(TnT2u@=N6 zN<%ay+(l7-stQqe_!09lkco@qdV|9|QknfD)S=m`x8@8xKyT*F);)}KecL;h345nR zB-<~>NZHH|bS*{FHhtndfRE9aG?l@b&KvEKiPWC)gmFiKb8(15m_|eAWAx8*n*wD1 zWK;+t;`FH6rVEa9<5-y)9X*5W`H}u}!RzCNWcp=az3Fr#9#Kx_l2EUv&@434u^Aeu zKHx_!MmB)^pLlmD;m9zog^EHuUpX$KxXl z=V}$Ae_(iPg#QN;Q;?%_%O}p&nMPw4G3yU@u)98`X=;T|GAo;grG<_1du6Z|?5Ke# z;R$B+g#7|&n_YBv^~W0ruK9|xUGI0;5D9zs`~q7+4uajF%;NLF`IX?XuFkBuA)Adt zyZP;-b+RdX=j#65Gme3WDY`LA@)J1kcftN4q{kmbF{8a@bM6_OcPAGfK8)$V-S~PN zh4%$*Q~r7e3H0{pKuMAEi54}U_`rXUV8yxQl%|VhQ^Q@Hkquke-F&ZpTNGP5Ssxea z6ReDwegyg)vaIFhnN$8I8GaYXAP~v2qn06BT97(M>NZsAZPSp~zCE$3HEX3E#)#1@N7@6|_{tBP@+)TkK^G?6S6jY-~#)J$7qJ*9ihS zzLp&L%2Kv(zgQ5zi?L__S9E1{e>}cP^hJ06octTvlwgOCRoNpE5eL#7=Hgd)#o0Yn z^+n}xh$k(No1CR6o*4AnRkm@I8N~-!<2NVUe}z_$$aI{Y!mtRUYggY4uC0@Sv_d3| znHiE5-1Z5^22A4D`bh=%WiI8rIy{fe?;Y)*B5#VC=}!N(t(VJTSzlI8r$296F4JP; zv+U{I&_jySomjND#mM|}co<%6xdoa*z|7aKU5~I2?Kb}yhF;US`m84I%eS7rANQ5~tck~{83d=_wZWj=!HD)lN%qIi&D}b-xmwKvU6^O;A#j@x;8Z?k|vq?h}gr`0@JeFysrQ z0sv|q$~hLVkWCp)OpP~a7R9fX(IYnHKM}h+u674}B`K_hFyOGj7EJL!6U7Wi+C^=+ zIq;b5-#ACBi zAqQWB&ug`lw@&g2dwFTz1w{PNmyfTd8KD)1RY-uM*>Q5ZiE zGd|%ut{+?rAYeOkvX?YZuGp*s?_y+=cXd}hOm~zOD`jI=NrmNuHI=vI|4K;Gj-+En zc-r2GM5Nts+pPesT5Q}G`Ne2NKQ%^+oi{iKWtl3JDp$F(k}t|$mnLVhUj^>g+#dyZ zSFCh#P=sTx&Clh}9wE-|gmBQ?`97a~ zZ>F1usz;u7*pUbPI@?;q@>|fZXR*8|HwOT#TEs2%02T(}m)L%*MfAIZ7 l=KYrQ|LXg!a6|+Fad#d|eW{juL;BSNXsPL|)+*aQ{tt6+IdA{~ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/head29.png b/misc/avatar-sprites/female/head29.png new file mode 100755 index 0000000000000000000000000000000000000000..7e38fe3eec249b33027348026dc888a1a3d184e0 GIT binary patch literal 7053 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 Rf6D*>c1P=WxspxTzX2e5m9qc< literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/head3.png b/misc/avatar-sprites/female/head3.png new file mode 100755 index 0000000000000000000000000000000000000000..1348ac2b14140258eacbb230336cc572bdf18249 GIT binary patch literal 5737 zcmeHLYfuwe7VhqZB!CDC5*IbEpjB)CSjB#O>46qE$Z;AtjGgb*88=RcoR8s0(o5UTJg$Q>De2*hytU_@C+036SENyKA#J2<5FY)I* zQhE0D50`4+6<;L=Eooxt9goDF9eDL@mMrpYrv`|E`Ll}e9|>}w9zA&|yuP}&ddUyW zvhZHT%Rrpwl#F-3a%bs14gPdY??_DpPR5ob$CktshiR2_yFOK%*HqO4+eTND z2oknlgB1oc{Wf9aXtTCku4X1CJyF97MzH5XVy0JI*R#N+ha(IE%O%CTMwH=@aKQpY zr{J*XfMu}Mu^A0%3kKT7*rIPh4wnj0tOcX+>FgFv_^s9@1k}s%*lt?o0!FQ9fql|; zG)R{P2X1$sos>%!FbJ+e{c$|d6zVrKP|NAKdQtwr@E;wSQW*C0FV-1N(g&pbTiZ|T z`K9Z1l)q0gUYh(JDKc?b7}7OcJv}{JS8pRfE4-%>#@#pUnpxO-G$c|u^)_ktz7x%h zvCZD+{n%LUhoLc^(>q)HLyr_m`jY76`LlV&(N#7)s^ns#(Ar*JS65dVA9}s4lgN)B zY*n|iBZkwMdS+EM0*$BdyZ?9L0U`x#sQrizcH0jnk~MEras`@7hoTz z;}d2uK0LqiSF$>`RoMfxl zf`tNDgLKnwfL5=MFAR;?vQ66CS&{O-;qkA2fs^tGToZC

FQB_MZA&__9+pnaw2q zX}REq0z(7WOF_B+F(*|6*mp+7k}qpKY(DpKC7t`8%=1iDz1rVYZ5Lu&K72uQLWg4_k89Tw`&tOb2F97+ILoo=7QXuQ(swN?uUm;il?WJ$s8Q7 z%9M#UEu)I2!jR0F6+-ClX@EMY)D+uxf4Db!hb!i~BxH;Ew{099dsd07-l0qQ!G|Rm zH`D4e3-_(6%XCaLk&ROoqb-ADakI^jx)nu0#Lu_PCpWpzJKvvOs~oKJ8hwxkFr7Az zm2OT>;sdJoW_kDq=F4H4gx34HxU>VJ%lkLcz~xWtA=B8n=yW6;1g}(p1wp(K;GGpE zv?V?l@ku09IWfOpP8r&3WA4Bl@oyTB@eeAzM?cr&+`e}y>r63Q&;IHBRYEX+K?JixJ;iL^0ga*C{)HQ_B zdeStk2xRDdwLy1B=x3vNs5-8MOerbRmk}2<{AEtNBfu-p{u)rc8iCbIBf`&CMI~Y_ zQE+j3gS$FQ=hZh_KYAk!tc(Mw_Jnqsunr)MBQHD-1TgM;`lKK^5Nb`V;x>lsGGbmt zfl2a(HpukM6MgKEju!lE)*Lx)(=kOjf&#s9?`yj7hHGzN&xMKfkiq3u&&pikI}G6E zIrcwFfIYV#;Fz{(++#d-R zs*6_;l78!?zv?WXgrIE`11T8!XyqZ5#&Iu{EJZLgPyB;@+gqx&6PIT3Mx3ZET|pqQ zR`gOgfY2Uv&3j23iQ4dWn~&O9!nM^f@@lXq#%DF67J05;3-0yx3qpHoTgHC>bs&_B zsAYqom*38fsQ~B!FaG&&bHMb$9GPiP!OY5gUT1Iv(bS5TPYbLx9WBX2WwkaTA_qUo z?|gZeW7Ptqv%x2^Q=4&e8D}3u=WSTyYOUS9(_-;lgCffg>$X87+6p;K#>$gO2N~De z4i3Xwf9qu%i$6B38ki!myk6ueuCEVjWD9${!pOawUotWS4d~x_}?d+A-71(W5(hcGyd~0j;nPp zW#Olk@*Sv+VgjrG zRA>ghY!t}K$$dKA`I3`7Q{zigM&${+C8KGsOQln?h({lnP!gd6voTGN5q^v`BarBu zpt~f*$=>&aV86nd@xZ5CzbYmWw2T^hUJ=9(kQhs;^5Ina>j8CoX-s5FG*uOZR0#I- z={4RpK*aFD;}bW>@v4C4F-#vO5Cvz)>~L*c`~^6>V1>D=^HHacVtp*4CCbHFAl1KG$dD6D+- rd3iw|Y3Jer*5WDN|C8|k3ad0W_`bbbr?2LF0KN9?-oLBRIrQ`|b-MyY literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/head30.png b/misc/avatar-sprites/female/head30.png new file mode 100755 index 0000000000000000000000000000000000000000..62cbab821ff1174c9b5252257654e7f8967a9c2f GIT binary patch literal 6442 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/head33.png b/misc/avatar-sprites/female/head33.png new file mode 100755 index 0000000000000000000000000000000000000000..5a1954e7f4621a0bc5144e05f050635d26130187 GIT binary patch literal 5295 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 W;AP8p{8`lp00=c*Rji8bgZ}`)Y^HMn literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/head4.png b/misc/avatar-sprites/female/head4.png new file mode 100755 index 0000000000000000000000000000000000000000..57882515335451ae330ce72c41e2611e0793b71a GIT binary patch literal 5492 zcmeHL`Bzg(7S0ZY)iwwSLQc2ZVG#scWC`#J7TH8mb`=!?A#8#H!eRm>Ld?8O|1k3p^f+e@Kh$}3-@A2hRekr}uj;0d zU7ZxM+p#bhOwpO-;0}YqS<)tpf!@S7n{`7Ec%-|NJ*=!(iwg;;U^^E(7_2f)e&Zw> zlI0>u-jOhvQk%5FpHuG!!CM$)n=BAKO;=>5YupF?V7vc8mG91Yzxs?J3=-+n(gAeq0F$eAB=9@8fb3v zG*Qr^G6^3%Cv(8SV}9PW&ot7vFD|ZQN^LTFIvf+48fjb0C0b1Wm~ z%LA_~ntv*+eh_fa-m}mk>Vw-*I8qt14NmnBJ_UdeBVLGpn?>QSBAsf0Z3==l150Y$qDX#yDDJ0otG2bDk7IYvjE}!$ zv&%X4^Yzm+wb%Liv1Nj_mA4Dsf-Ai$!e?%di?@kYr@lNDzT`&hlwYH*bZEcaAZ+i~pk@484 zGOZ^GNRz$m5R#Vc=iT&3{GUz1`D*;fE?Z- zM=;g}yq_^akO39+gj5G8P=LDb1oNg#UsiRIQUj15sZKr_19f$AS{$28>*;XFz&;}u zQn~!`fF!#?xxUR$y26?{Bhitbw3jES)K`Uky3uy6?EU7o580w)RWbRrj>4wfPLfg` z{><9y#>A_$+DGw9X?jY^eY#!^>`NgB`H5j-#_XK$#qo*T)nOI12yV9qt-UCAK~X_r z%Ce%!WqtnVh6U>jp_799$?V1v#>UrYH>i?@Bt=t+L&`Q7QAaL4r5l3O)R=H}P=TJ6y*i@rHp{{8Pw&CVZuXln762w}_tzeh$IBe8c9 z@3}*(uZxL^={sKz?Q-+{gi&KhyaKLMic?a;{6m6P{}}n4b67p0s5OGPp})#={C5Ga0>MdQkyvzJ+9|?`CW- zfd!yHk0)d`zg}JWL6c)`Y!g*K`@DND+s3$3BuFXRe-TQfu9Sf3YH@3DIWlkA)W0aU zEZee%n@16MhN8c#0HVX|<~s+)uh+kh?n=F8^W|cOUu`WdB0?G-?#dVwG6jPPwh1&% z+m$MF%BK2K7$ZFO(rDI9XX|45MKYKkv6Qibqe$#a#viF&swy2MDnlgGi+fL#T%$tM zyG>{SYQk!Ryz|+?I0PzWXT(^+-|4EP{3JaV(6tu}M@YN?5G7BlLs!*RUJ$$QX9ZZ9 zDS`E}^UMHIw_*@KN<-q1(VXIEuh(h7DhZs^9A-1@!1M|=H@o;2ro0v-G-k0RN5Jl;H|irz&Y**LnT70|BV&Wb z(YzdDl_Tgdcps5cB^RlJk1&Lz&l?sfN!GA;+Q$5Tg@I2H*gJcD_c6)fFO#$0aw-IW z08FP2y))Hg)d)9EB2boue8BSRNatZ)mS_5g0vxdgBAUcK*~XUyr^iPVvA=INJSIS*Go=Xz+SzgRm-O_ev>Bw)+BDtaEJHg(;^`#&#OA zjyoBO8GK$&b459Ogt~s&&2&YY%QP3Y!cPmGN)!2^;mFBO^M$u3RKnKk3spdLY(RkAp8NHw^nf9u^tW6R03&^(4HwV#)Z z?y=<%y`-o9V&LA8Cpfd`K9G4h$Fhklj+T7PHH9t#{sPg^j$uz+%<-?Xa0DEsM698^ zRRf)tYMsR3jnu?ls5_+yU44A8+6!NHn77}PVF3;$8)X;3DYAMF(Yi^W2HM>ok0Z%l z%}s!T65V_tL|Xyv&PUVfsCtNg>#uTBGCc7)))T1`f+w!R}9>M)S z?ngf#Fv@=Ltjet{h|Z_!Uif|f6>O*cR7gq{=ER&qzm}tv+XaMU39QUTU+@j1byOQP zge1cW+QdIpNk67HV!%47<0jf)=U6Pd9O#xEbLOq!P34^CD{ZQl&)ZshpJy}q-n52b zbyk0=U*`rdR{Tu$WM2k!LjJU-_-JdhzfI#@)9+3LZp~&*A9GHpO`l-%w3hY5hP^9n z4?{~#V^X8mJ5nw{V|>|4{-XzTH;fu1#-HTwI&AopuS*yCuXw7v>+KIrODW*?C7 EPme*tK>z>% literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/head5.png b/misc/avatar-sprites/female/head5.png new file mode 100755 index 0000000000000000000000000000000000000000..93bc56e2dcb8a3b8f21d02cf88479bc4251e1f71 GIT binary patch literal 5426 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/head6.png b/misc/avatar-sprites/female/head6.png new file mode 100755 index 0000000000000000000000000000000000000000..aed391a9be91c29ae2a2c999097f45dcc99c95b8 GIT binary patch literal 5411 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/head7.png b/misc/avatar-sprites/female/head7.png new file mode 100755 index 0000000000000000000000000000000000000000..3d9bf6b40a841c47c1e2523a1ab054610a02630f GIT binary patch literal 8995 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/mouth10.png b/misc/avatar-sprites/female/mouth10.png new file mode 100755 index 0000000000000000000000000000000000000000..89e3c748763b7bd986d6df2db00dec2a4ac85ea3 GIT binary patch literal 4164 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 TqoD_paR`CAv5ip;)Ft|#(FB}6 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/mouth12.png b/misc/avatar-sprites/female/mouth12.png new file mode 100755 index 0000000000000000000000000000000000000000..989fa7e833ece41e600ec8465756cb561b4c221d GIT binary patch literal 3956 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/mouth13.png b/misc/avatar-sprites/female/mouth13.png new file mode 100755 index 0000000000000000000000000000000000000000..e3451efa4378dca77f967da971e7d5e9b8389456 GIT binary patch literal 3992 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/mouth14.png b/misc/avatar-sprites/female/mouth14.png new file mode 100755 index 0000000000000000000000000000000000000000..34d277ff34f8f52bc6313c76ebe3773a444e36ea GIT binary patch literal 3993 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/mouth17.png b/misc/avatar-sprites/female/mouth17.png new file mode 100755 index 0000000000000000000000000000000000000000..b1491c49185651cd5a7f3f50ea721b97ba615afa GIT binary patch literal 3979 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 BGZx^prwfgF}}M_)$< zhK>E)e-c@Ne9i)o$YKTtzQZ8Qcszea3eY4ePZ!6KinzCTeZ8*)im*SBT+a3{s_)4< z9i>wf&af=*UAjzFH1fuuTFtW^*K&KN>2`&!UG#qP7r)5+2bbPYQd{oI>SXxh>c@NO z58kAmyYqQYqr7qV&ekS&MkW>x0R@K!hEc|7AdIGj(OfW^3r0jPP>5^PIn5P2)obIW zn>(LoebJnL`eV|}9#A##k7G~NDf!y7?b-6;>eshN*~{Hqao4hTOTRuScc>_Qcy{p2 zr{gF8-P-;qsn$B{+mnaIoEs!3g0#lj%UnYH5E-+L86sb$-r>x6a9Z)ovw@+Jg@wg~$=gf`sKAMXV}ih{ zDv&NlM#f18CiQv%6$mgfskE$`M}1?@#%O%qY84YdSNiYsy^2?Z-OsgHEC<=6a3P85 zY+UB=#JZZlv38sO)uojLue~R|{_MAJJSJ{uzD+IL@0HuSX3zc$7cYL??X@(hJNG~# zP}>G~)=fIvC81hJz0#lm&wgCVetYwy#=lE@Z*5;G#d6wt`7&w8O_Tc9ye-?iHZCf9 zrgU_5`Ttw%f0>y_?Y1;4s_0*LY9ptBg246zmp|{_+{bROigTozQsJ;6; zs}C4W2Z14M5Y-Ddxq+dxdjB$IpaKI%MxmatWMFh1(N%DGbZ`AjpbrFm92!^_U!4Ke zRmjaTVaNAuE1&`vVF87M8Kxu~`yu6n%f4L(7mfZOdwpKy@xMJY`xqKKSmxc`HK~4Q ztz(1Bmf*#}#z=xYOPtQxr}NkGb4-xE_)QJyvks33Pm}7tA9jgfTi6)9dMfu)rC$pq zTNxUEu*}mB`F!4-t(Lhnf2*1j&?6Cz-@biwDladO{=U%p=(N?n#Zyl|-N3L*7}(5l z_{?-PY2#1vN>)%>9&PxH2Eu5|cPQtASzGZx^prwfgF}}M_)$< zhK>E)e-c@Ne9i)o$YKTtzQZ8Qcszea3IhXAou`XqNJZS+y9cv`14Y;#9J$Cc$6-6` zZedrI)nU81IL|6=X`SHfm7&OXWNim);X~#fqO}W~LVF$=e{nt4^F;DpjE6=11HJc& z|K79IrJ1gsCeO&k!XcpG(7-Ut7!8EclrWkLMsvYvE}(ZVa1nS>wtMX+o$cR5Tm=(( zjf4~&627zS(|Nx7Yf{Kv9sl>+-sa4Eonvw1zHO+#PXj|E1JnI5@$2?#f3s}muiP%n zQ~z6KCMU}h(cA&7&2HE>u3z0iyM)dvl*(|FUAEyyJHK2c)I5Z|Oc#BO0)`ONTA|8C9#+(8Q0uBz1ED@VPhMrJd;83(; zmM7S9E|mk5TvdQZ@iDSaa=z*VtV3A@0u&gh=_mn>DgqiMvnmZ_enSHj=Y|wPpivW? z9U7kmm`(WXLABchXp{^SmrDDpnLzV76c#uz=|s8!jd~*R<6m0g-6!82{>AjJ z{`&M}t?+%ZkG2zJq|HIvc{wYXGdV6v09CpOSKN8K<+~NX{F_qwt-Xs&Mzbg2-lh=`H>4vj8%_uK)>dx!)mbT+IL2Aa64fvIy>@R}cCMH`eKydEoj^^37fM0C6a7*0 z`?|`1@853O6*=$T(s{syGMAVA_dgTe~DWM4fPU|&8 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/mouth5.png b/misc/avatar-sprites/female/mouth5.png new file mode 100755 index 0000000000000000000000000000000000000000..61d25c140d5bb1f3b38ff839db88b55a0efd950b GIT binary patch literal 3841 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgF}}M_)$< zhK>E)e-c@Ne9i)o$YKTtzQZ8Qcszea3Xn0))5S5QBJS;7|NM|p3HAqlJif~>P7C01 z=~C3-U|PD-i|2}1l%M(+Vyh?2joDfK^33A2MGb;My zubTM9=ilF%y6OJ$^|Euio=*RM_sENaOJA4O=)UQ7xXrq6uhHg;?`I}XZNFJydu&GS z$DPT!`dPiaH9vnHJj#BvU<=q0hWGX_wol#fA77cMH|_pjWA|6jkGV}=XZ|!hF`wm@ z-iNbOXTJ6hcGk8(+kZ8=XD0Js_uFw-q@;J0e){nB>CcTBUym7N$0X;R-@H5c+wUh= znIm=f{|8{f!di=mKgqW-Z8@VFP{7Ej-Vgy%scVr-`)0LwcVAEp7tlrO&5Iazr%c;@uq6` zOX^?NvYp6TeE-v(m;3pYPFE{`DbQv2T3WOGhIC^oM~hr$_47wJ7Rzs%=)OJOZN9|M z=G1Qv{~i8q+xlwS6SsZq*SGcSER#{le}8wUdFp;?=ild_*ZutZe>wjmE;E+P%Ea-_jxPeBZxm?~P4&*Vy;&SNK!?*LwTEyXLRoE^M zH>4SvW@~=<5iYa#$E@WuO+U9kIK1<6y~$=b?YP;m_Q|a`{kmSmeDn3a;*3laS(E-L zXKTw{xt8&ik5$|9uV0MVn*_9y zHWrUZi5n*R zCwL1pf91bd>)x>C*|m*Yj7;10Qj5!v@vm)}*Pr{Z;KR&EvvbSJ{{;L!ym|8R5=&rR z7^U>#=%JErCYCRRJs9m9@64B36F+y>2hJs`<$bQ40xw>?d-v|e>(|w*@_&Ep3N&cG z`uf(@t4mLF3MdG~F9=$BB>qa*NzNVTPR0sJD~(nxBcfs%?MV#R?$nfk2mbBLGej3P RUpvnL1fH&bF6*2UngFgpcEbPw literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/mouth6.png b/misc/avatar-sprites/female/mouth6.png new file mode 100755 index 0000000000000000000000000000000000000000..38a234b0e64dcf2a4c46038acf64fdd6388d33e2 GIT binary patch literal 3333 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgF}}M_)$< zhK>E)e-c@Ne9i)o$YKTtzQZ8Qcszea3IhYrEKe85kczmschCC?2a2#in0AfrR*O{E zK@Op9DtbOKlC9Isgq%_obB`$L)$p6E*-R5Sy5IHw0aowF)-zUa;}#Yce_G;X^})BO ztT^r6-)AcO&%An8q{qaRj<>hwo@A==8&-o{@ec#?Yey>h*n{R%T_!d-Q7%V#Q z&~bV7r6}L3x$S>VR&6!eZ}MpMT{lqTi4?2&yXWrD9ku2^cin%pJn-yob1{Uz1_nvN zQ@J2BKCEwGFcbu_1cU?>6wQ1=Oa+HC;Hs#Fg~g-8R~S?)aR?ZL>nBA+q2-1N$i+aTn8`9Kll{c6M|*@hdqshEt!r|)#kgtfrVT~~vo*!e#ka1! zJrh}t#V3Mn`!R5JlJ?Oy(Me*UfO`~B9h)1R+h{O#7wk8zLRyzO3_ z`1RYXlaG)6TKi^Ylp)B>28SrdqFwiWs_yp2KbGsR{=A2xCdduTfx-CpzMa(lWI;{wjY6SX^oh<)RF{t21J@~NTvTf#C zwPxlyYHMXQM1L)r1&q1^L#BTYddF@?gV--wPCYGJ7q;5>>a%B`gv0Bvg=$UJo4b=2 z7*`6PnSR#TeXiax+T;MIYf!X~GDZVoh-QaP3Lm6BT1;&k^d;hfT^9yVS3j3^P6GZx^prwfgF}}M_)$< zhK>E)e-c@Ne9i)o$YKTtzQZ8Qcszea3ecqco-U3d6>)Fx?$5qbE_3{&1DB(bw$eW> zza*rgc7j0FpDmAG9BMa*k4Ut`33uU>N{`cz6i0(DnWyK*YV^yjx+kNM%Hb?26 zA17<$^D8*atL}%(eOL1jFboc^6I5_$U|?io;Sd;Qj0VDJN*K)rqq%_Qxj;aDL-F?g zTg%gb&OiQr-M(*9=M$ckt=(Q?^Um3{18DnXfgg#h|9@StozA}hu7&*5{ z-@m58=aG|bGectpBctGi8;?zT7#edx%s1Ry`v!?+d%UxV>Ms{x84&oN5Jy zlk+F!vT#fh1d3k`cK1`O|7gu!e4A;~AI_U@4Gxlwj33u;I3=@sAqz(eCr3v^O6(F- zka7V5M$O_iZ9)nYR23AMCY4USCZG`D=HS4xf1_9jDVYV^6&x0<14a7X*IVZ>H2Sdu zqu0vTfnR-42_N_#y?tL*Rb}3W>+up*z3Cs`e7aNc_tdGGyXNnE3M}(~a5Uz>|N8!Y zt`2YAzTZEk*MH=3%e!9fecZn3e!i*$C=h1OoVoJm&B*n&Qa=9v*Z+RdRUd6Tj<%ae jI}haMf&)L8{xj`qKYB<-Ft-iZ|6}lU^>bP0l+XkKa~&L~ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/mouth8.png b/misc/avatar-sprites/female/mouth8.png new file mode 100755 index 0000000000000000000000000000000000000000..e76c8507e03bc107558990f6d061e14fecd7eb77 GIT binary patch literal 3453 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgF}}M_)$< zhK>E)e-c@Ne9i)o$YKTtzQZ8Qcszea3eY4WPZ!6KinzCT&w5XBlwtpHRkSqNb z;P>A=ztxh@c>nn`{rczQ)TVz{c4%N=WMbhEP#9&52Eu4c7|jKvxnN}Ef)3XO0UA&G zwr#(@b^F%TypZo#FI*7d-f9Jme}U--E;oAf@4LG{G;+7~Kill&_o8&d_UVaDUel`| zTzfL2{QAcoM?#$&7#clTSUgnNSMmU>oh7;o4wuBX%K?L2Nl-vxqRbK_p!pNFH86Na z->CvtOC2r_4K76!z{cKUVp7R1d@ZQppdiG^D0I?Ms~K2#WpZ;&*m88OI}HrB*+gDb8zfy!@qm+n?G;UmYD$RDlhnGqW_a?G1oO_Ff__Gnx8iIzjmy; z>7K#;8Snhf(%HV-#76V>pKZMuA6b3w+x>mpp1DtYwXghJ-HGzs_PyU#HVY@G$EX5> z`pS|6ubs zVTBFR4hAZ2EeoKY5=Nk86G)nKmxUTI@<2w$0?S$QjBGq?qfvT;edfRKKjo%evIjbQ zOM|{Zyn^XnhAwpng_s3fw=P|`dGqFdn-?!WXR+X*{PttVjuq4xbB?xfMw@w~ZQbFJ e3ko^^u+>kg?|XD7{Uor<#Ng@b=d#Wzp$Py^j)?aF literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/female/mouth9.png b/misc/avatar-sprites/female/mouth9.png new file mode 100755 index 0000000000000000000000000000000000000000..d2bf5212353914599494a7ecbb013caed1583e27 GIT binary patch literal 3966 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 G{r?BEgQKYc literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/background2.png b/misc/avatar-sprites/male/background2.png new file mode 100755 index 0000000000000000000000000000000000000000..defbd1877ec1788cc3ef8f775abc575f8feb5ba4 GIT binary patch literal 11887 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/background3.png b/misc/avatar-sprites/male/background3.png new file mode 100755 index 0000000000000000000000000000000000000000..f4e41e89bb50639f6a5111293a45004d83f8c6d0 GIT binary patch literal 12653 zcmbt)c|25o`1Tn~)@+d$%g~gaC}lT94GP&yXp&^t$iCM|D27O~MF?XTicpkgY$1e@ z2-%nH+wXfuPrv7V-{-%#&qti~d(OG9`?{}t3DMQQu%G@2Jp@7fH85&=5QHGWKeYS6 zo`C8z&EOZpMel+tl-J7j3v5tXt6Wlnpuz}-Ei5(IrgO$zae*MFTKET1@058Hf+Q(4 z)Km;S%x4nUaYrvi1s^UnmsQQ#$9v=0EjI)Mc8i&LS&sHw&j^ z{M^01=6y(gc8$A++vw8|=OP%}@bCG*n#EXbOBD-S?~F+7a-^?B?1m@%?3|5D+!#w< z=ya<7@-~r(T!cj^3XxlGoNXta~IrP1ac@id~CHtT>A@>XpI%a${_Azw74D zXGC;Ae$YOlp!87fM#tS}ySb^><8#Qb6@)6&co8M*n@eqDMK}j4Q#(?Ly!Wr1*8FD? za@!+^9}i7!w&`2=^DQ-vjZ`H2ti%o+7E<6k52e}bQ4s8(K?ErlN5G6{0}v zvD4F|EW}dKq3m?@X@Yuqib#ABEjA`d5u$}`4vl5gVmX3dgB@e44T0>RUN#247A?C+ zp%RE%Q-h-B3z#mxqhx__QEbx?RluKp5T-gROgLwY<#Iok5)EPQ=};l*m>B{f!U2m` zhJWv1fufAMwGK;Iy`!^U%dAPI7nvb&YTS*Q(4g5bi!r%dK)8>;ci>lonuJ1(HWQu; zQ`qJ-7@7nto zJ|~LxneeA9Y^E#nf7m!#Z+5QAExDB%w@o#x>J5)^Bwoo6vR%mdc<-@(vYL5e_bXwS z@mpPL^xi|QZkDnSY)`}8&r zI#r7;`Hr32)-C;f)?Imh(;_!L*OetY?!$=kj8=K4aqlnQF2!cEjOVq+U%MD2zm*>( z$}h1ooY6MH3HWMR+l{ezSL(cJ;Q1ETRl6zIUsTAGPwyaRq|*%}uP-SyM>%P7(=cMj z$xun&pR>mOsC{0;SYn$+auca!*zVG6w*eZwsj;+Q`ds`iiNge+S`n%0BkDh69TH}< zBz6nspRg<)86*ru2Va$3t7RCk=ImuI9eKk-wBwXM<3t==KG6t}JsC7RA0GyV2fE^RZuM)^E#Kw*(OgM%&Jferh8?v-gAR!drM|E1_ zYcEoE25^P3a}9wvgC8~oM*mcU|GSEyg)}rjN2(d4IyF+Q1-dm-1#)|~>D;3x()Yi} ztPze6Fu>Afhr(`^*{6~EL`_G;0 z!yhU?^WoKLMV66A#?eJjwzyFChqC3S=lS5v@C6S<`Lhd(xKHnGF;xZwr{O|ftp0&_ zK_*bzcn#3)9SN6PI|qD-R+a^a+}?bR0goUMqBPo}4%~x^8aGe<2z&tm_(dga)ql?O z7DtY7(T<~KXmArM=d@E}4KL#oD_jqVUgnElczOw~o$A7-m>x^l^VTKNyN0^>TU|Wh z1o1ibJ?|p;{gNL?U-e@8=-9q(fZg5b^I|l;P{S~`c6`N>@xBs|xr*WK;qqkzbCy-E z)pI(lxyi3d3a=Kft6Q56`gNOTg*MAg8n&Hz{Z#L;bYrri@>ze*>{Z(ls(6u(x8p8X zO2mD*EbK^0GYmbJg1?2leWToUy4EU_cJEpUFEl9*4Js~|0Eaw3B~@%b(ZMseLepkm z$TQY6ts-nc*r(=|(4neM&%lFQ40&T)`P}ftv@B0fwQK&X)d#I^Jav=n#}X?G3e6qq zX71#eE4KI99o4~3&MkNB82v0>a_93Y`!E)IcXs`n(Te@h>&G#+0~<0-s7R+Qr?C~K zDf;Rj-df+R?CSEzor>GrXDd!6KktlgnS0l}J=4j;f<+qH-s5n|Z=MFg~)!81oxczO*EHf}I!CNU-Kc6J~ zV=2a|Ky9j&r=E|0QLH2aXOTYdy)9{bh~pKaiuX}_;`Xp9q(^Z8;@4$@P`qwX+5}Pr z@?^fxRR9s#Jl5JMSRg5*bTUh;0#aAVp-kuH%URSt$d}{u=>-!J0hsao0R$jS3gpvW zBuxj8b^e3k2%3MhIHB-C?0LkaZA);ozb6AMp`P;U2N@d0sB;)$H2}w39r&z?5E{93 z*NbMRCc<)c=)q7R97*i6FT?SH%%P~7L)3bu2sMBoJxy;RK(g*R1emMY&U6V9@WDag zf=69%c`rPK;|WzVEt-wzAcR0dc$V(V0|#V7S~Y&ZuDBtCX;7&d(cM?SEDuPYfWIV7 zj~d3N>@hwFA8lc`VSnwrbBApkKST~IsBaqSRUG&14 z>ejj$G|Np(r_x-y@pNy!CT76hYB#z=fh138&mV zbgjBY%6cL{%h3r>-&;OecII`AykB5YyzwMY1Gd-8Gt+)Rj?K~JtW->vcX(&y{OE&1 zz3-n#i=RL&R&6U6x+8T<9DNg{r!bj|B1)~PB_$kdm4S1ApzX+)bE@Lht2RGQt6THW zD(w}UD-XY`$qVs*Ca+*rB6j=!=V2OCE^K{Yo6;%>ZTjw8o9i~y?|e@blIpSs9qT7! zxpTKS6pU1--g)zIWNc|Kn@o<6&8hx&^bI#SW1ME(x_Qkgm*J>@Nrjn(OH9K(N{s=2 z;{i*v;aG3WyVeq0Z{&~J7x7s87v=24EEP)COB8xCTo3}wcWqNUi8tkV6&;k<={XKW z%`(M8#wFpU#8)R1euQIZV;w?V?GwUfKZMJk%c}IoGFe!=R98Nv*Y|tnCA#ba9LuXr z>4NP;+Hv#!$GXbr@A%|~bmwgbOfF3ax(N6j z{P2zLaXKB~bs>eVabRPcY;9d+&^S&PS(u4qr^XQ{5Z!d*swV1KYE_fF*+BuyJ4yMUgkNQY&u(G*&M88FI#-q6H~&pf*zvqm#Z6B%NDNVVX(U)01p zUoJ}KG+iz1T{vyLuxNHc6ti9=;NwB|(_ARgCM=FH|B!0^^4o|H)sbov@c{{HJqdY^ zMcz7V7dyG?3))i9^c*M0(V^jz24q2$rjmq0FkMR6IC=8)_Ueghkzc1S#i)0J^GIg` z;JBg}$1TtvHv91h8QJ9`u)ArLH;3KFTWP2=u^k*&mZ8zp&1kU-wTczdt0RlDV0q+T zZ1{Ku)`}o>9UjF*EgrqJD09i>=q2R~uq0cW8hrcstn|>G&*QQo<}5#6@M5k!%oRHH z+>Z&4COD7ugEVvuO@gqVlQ>A9=DZWBmV6IYULv2Pur5~Myp3b*j{IDK)3B%Nc}p{e zF|kldm6Bt7noMoOwxa=FS84#Z#0=F#+nEQfF$X=@ix9R%ZsBeNCeqFRHgxOSNEwQY;69dE zll>`PGH0+$I(x{ZsOr-Xo-rkah2yX06Qx6EkDoI2a5+dB8@EccyPf{^G}A`qlid;5 zg!p|20%vq&LWhWL9K+v;Sk$$n(vPC;+}UGKc~L6F#7X3;RrPLpmzCe44oEZ5nAx=# z^F=&_PCzII4=9aR5K6oKk{PY}eOQ?RZ6I$1O!t6zlO2U&!%JUuo!)jQ zW2xi%*<80T4&2NzI8>QNDSID*`<+u^5rW-+r*x zVMB#)m;&q~V23>&pc-0Cg^UZL#TU>5Pvys#tdi`sQ_BRbQ}&tC8yxjL2;Y(de1pcI zeX@kqg04XqgKOi1hYr##yQk8J!M<9QciC7ZhlF1uFa_cG!DUS> zmWrG1zAMUL8J)q4iL3qfbwEq8v-HKxvvW!G`pRWHn}mT7>GW8k>@BSUOU2_FO4G%I z1BRpVE!FPl1|sJ-(gll;##)*bop~)%Chaz-&B#3aX)KUjW-X zyedJ&^vc_b*j5&&pXgh!qPZ}|y>pZ@s^%(FsS<&GduU4X<5Hfb%au}b`^ScZ)@Hqy z+a&<6>m0n+{XQ`@bIbM47Q#y{B4riD?s+q<24lYs4?3EMVAqWpXV*AxUHVQ8UbVDt z+IYs$yqVG?@wNYR_C??2hqbkwp(G#HFs`cd@ip(5c_)|F+|uNkO`)8h{?@#sMFmM7 zgRb`CP2HcM^MI+Ha_Y-T`D-%rV?-)Hr|- zNdkDoL(C|eD7_BPkJc_t+N;}Kd^t}M)MP=yrELSOxmbh27ZkBgq1v0GCQLTnhvKrZWETkWo99B} zV`g<$l8(We+%EISSAPN>Sn06wTM0OGMYU_B`a55Z<$4H#C1Hs5xrZjgO1v?Ll=|rG zlI;Ok$MXt2e{#kb=#Swgcfu{7>0S1hSnvP{C8O_SI7h%Jhb956n1s^@+NpLV?c5Xa zsxrPBzaC zzqs%qFy&YE*}J2Qb3^m1*`^Fc?@}F`3#uV=r+6o;42B||hrM#t#`gEuK9_bJGU@m_ zhGW#}wp_N?x6bFOCwX%cr)S)zJ$PMWJc*Yq1cjH>bKDrCcD{RiJ&I_;p4q9qgpize z+0X4cGIyLuXWP7Msdc=_){OCb+SRf_ivgd&=KMGQUN%*l6Pw>+Nj^(;dhTxP-Ln_# z6RJpLa+Rq29&UkUHoDH zAPD5S#p9!BDp^*<=@mKR8M#iIE$ux!OZDiSj#3klO*Tk?;OL3~)^tV%TD~a#hpu4U ze}B$H^3WoA!2oQ_?G&Ji`uU*unW zl(aj(%4G6|s}%oS6)RMSV8rb-$+DoMsM!72`p5DQn<}1HsL+1)AP2F<_4+?5JW(13W%1bJ|;Ur!lvN4zvC8rf0b%kA!+wAr7 zc;}l@>^}S3g0`j4KD5tGFDQsjLyy0cmSwna=9z@<##53{Ovh>vx1F8HVhbpAVO{UI zpLhc*9wgNqp23L3TYxSA*9bQ$f9auX=n~CfeI?4#nPc9`Em;7Dm4aX$`-rfrs{ObWQ<3gdiV>FFO*wsaI#}aRLuJ zx2o0*vlw@e{NMT&oV?$o=ygXY+{b?krrrJ`WN0$|Cc^H5vQ0J3Uz#9`L@MeV?zVS0 zpME#b(degJ@~wZ#My_k^-Qpi;w6wgNo~SQ=nf!V@{9kzaOIRlyIF%cRIREck|47_l znV6e6M2MT`!qk_)taLhO>VClB5I0?M!Vqe1tABCeLK^z?R899&kdjNkn$-L%X@LYP z>g6}%lIml_+d+p6O1*lnp17*jFVNj#biJ!{*<9zlafIti_i*9MQ;@3aTQQ~zhapR0 zMCy`Q%(`&aoQs9Ir=#w_V`EdQX9 z9%aV_5mpc=le4OE?U4nUr})YiewY+<+5Kwu)AQpAc+G+w`+c9(9h;M$yL`^SoUhPa znPn;xgL&hIQ^0kIMTg=)g%oofB(Ks(_q^ z6+OdX8~ME(hS%9}NExjF&t}DT^>r;AGV~_M=~K!27orMaTr2{b;nWTs&xdsbh51BP zW_v`gXrwampvW;lQ^17@E;^IzX4w>mk^i>hkrVpTfttNE%KG3RYy`YO7yW~yo3hM5wVxKA&~N!~BW6BmG}upC-G|mzLf-@KmS@cN z@>oiSd5e@4DD@a0)ac~Y>^rKSN@pY2U{Fccl-b&*X8BXslQ6Zk};tchgI%f3w5%^Z9(?PC?0u zX&R~VD)fZuH{(X{RN~fRsSqLf*hB~qgmKd$BvBxcx&1*R--j(9H7z7X4>6!g0Y7@) zf{uj9z-1&pB#K)WvZ2`mZ>(_w3F=VJ-5R}t;Zt+KW70G-!&tiY7?0;VV`lJn>nhzfB4#YI##G7-2LKSJqJre2h-f50Zr>4nA>n8A7pWY zn1_esRen|meb|75)cb!vG!${uk=Js=*$^lK!^(Vo2YcZzxM(X@`FpjUfFdNU6im^aI#Zym-{b$9(cFObsYKN@&11} zAmC;eFGK+rl|pZ|FwBr< z<~GM}t{=C`g&ON_F(b?0YR2zwCZFCE(3{(p*57J0$n~g0L^uZ_J?TSwbWYK1xD?fJql!$579m>@%|X+U1u%R_6N2QzpBacPugTR%M9qEYC-&w zB_C{b2%V1l6QJft&dmT({fq4SULP2%c=SpT@y}5*Wsy(BJYBlpqnu>sAD<)-A^yVw z+cOeR4p}MK(*A#43nN_$j; zFZg;q0vFr-^<}(;AVF$~To~#;%$m?Qk#MAKWi3eze0*{?l)+~Z`!8}V=v1ys^fOJC z{%_-Sn@J8$twpo`=g|+^yK8P64!+$G)t>Qmk)Xx9_h(VU1ylD=KKUd1=l}C4jr{gV z|F5#;D`Z^;e047db|?klHyJM98XRz*@|#vDteT)$S_uQ9w9w1Sx7~2XP2O!wRXt{V zrKX(4%i=d~>g%C7r_p7<7Pcjk;TEh=ZmzsRm2rhZD6Vzg#Q*EHr#T@zeMOG=sxfxE zp8APr5`=Y*xnRdC&9T*Q{^b%JYd@=;=8TSNbsz9u*N!HO*CXgsMkEE1C;!vr+wFG0 zur$)3QgQ4w3+rLXCbpA;f5wwnpN=KcLUPw2Edi?B zm0WRjh>m``D-WC8uFy}-bc0Vb%!W2#N@Yc;6`q-tob;QJqyC4e5d?}Kk5vO978MzW z@vF1fUJW0nAn=2PoWjF{mN6h&h?SkTak4O50s@7i#bXBul(1B+n>2W(;>oyk9_)o0 z2tIVOEH$#7R6)_z9D6oU5=Lm>;rDU#LV%txS<~RJX&QYc7k%?#=k~g<|Kv45 zr`|ZLhhs~8GI6Dq#qddW$^whBvTw(hs=pY9}gv3|E#q+OV(|#;a>bII+p-d8Xym-NQASSFpC0BcHEAbo zb|F)xlE0*?Q=oO3G)UMZh}5fPXTmorVl1-iJ+1y`%wsrrx1TE@V}??T=mVnfQw0z# z4#k21r#{6Qz+OWY01{dFvy6TxO!4NwB-+NPCNGsdplCEaF31w}4TV465d5eKyXdWq zmxikea6K8vcmPP)G=+2VDb#TCyCn@ie3WV2@qm4XCNm6OpmYKf9s~Q!LB|DuQ6mM; zyG|RbK~(UEm%>QF1!gCe)=UA#B}PnXrI@5pA0etXAO zyO?`ucA)($$eKXD+tvNNj;CLyjaTz%m-onKYrnPJ(jZBx&~S{Ql{2a1OE@BcR+C75 z{c^SO&xE7z&+YY1Yf4Oq>=%ASwz@SNXZa*Q9;q@Ii=P|#)hgax#*2*EZs*<{;V`-+ zguW?;rkPP|X>X>R-e%$mcukKCbvKPju~(M=1YKTJ0&PwqNGN~~ve7*{bhDk|`!LhK z09u3lY*pLtp!CL1|56X+GiTGR_(a(;SeYg#E{DB7nLeYeXXI0arLqr%xr|{508RDt zk)V|VrM>)SW&JpYGVH$JzJO@^Ta#29>|=1XgD@r^&x&f-Iye)k4A-Gg$59Gpmwo^( zpey3fxG*X^FSYq2)q3#7&t)R^CG*jANU5vR64%eq1x$*;z48vN`4cZ5aZ>9|X3}A; zj&~o;42^yp0&bKR6AAh(5$jQEoY4(%Q}mtGUPJP9uk;yO9qBtV_yWzC$hC2}y zswJ;HCfi5BaM%4#g!A%HuaioD8h>`Xb+n74b4-P;*;kpETU#&j ztW{RQt@!_~G2=y))#J<*d218bO$I9Y3JY$Zyjpp*b|b3pj6D~#rJ`9++$!4dZThL@ zMmJNGOR34tm3YK2cPBkVNA9C9t;Obg^W45~p0&wd0}Av#vfa(mA1$!$Wo+ zf<1Ziz9~+05nw9C>AUhkY$%yi-`r7WCXk?xLW!&bTPkRwbAsEuk)9~P0I|MDEh&(& znwgDhlOby`{3|Z2zGFK%JoQmC3~f*_;bk$xzrg z$sWM&V1U5z&FCU)54fK@?i+T_#9t2XDLx3kB5)iZMA6t1X2OJLF~Ta{48;M4bzQks zC+!S|s(z}Sk0C=n@;3??QbbEOb5Q~iOd9*4D{P5e7!qaw?iFGUe~6NTf%DCuj|%9? z9lNX!e!QW{V|p|_FA@@xAW|W%umUj~U`8cPNx>aMOU&d4qgNd!$N$WHJfk$gO4A4N zjs=s)tF~XTY5ZOsEx^SNjTM3^mMnOf3N@2<0zTbgpX#JLC2-Z_0vADNui>)`?`A&k zI~T?qcQ7m9(26H`FVGs23WeuOn&qZWHiH!IZy!|rE_s?o==(pU?i{0GB+UsS{)XEJ zyv{$7SS-^sl-Dq28fc~DWDKWhta1IVERp%RVTUpZE?4u>&>eLZr-HA(h(h0zNPH|+ z;UoUQ)Obo{faBo7y!!IUin1F9U!Ol7@omrTjBR%NsMuYZzj)NHB&(>bzc8GeIGreV zw>nkzIt(2km~DO-{XW19y`RNP zfbzopL{i<{exFyHdXcc4-oF&Zsn+cxvBL1j`tpaS;>AkbXW!k;aLFv6GuZW=95-^3 zIz87tj`78&*d9CWyau-yAEgGr?I_EUu-zJb?=SvLf`csoofqsY5PFBvTRR&ho`9Mf zS_o`tN?37i`S{8ngM{24sd~J5xew{78^<2d(4D_}k{5wyugd4Cg;M*zQL?m$fn%-d zgDI(KQZyTV+QqC@4v<8J9!f#8S5QL~=;y-hRwj>Go+6tW(3xVxYq5+|17^1=^3`nefLW9u?`mRy2o?mmf+ztnd#89@2?KYOwfQS- zV!8_2es0Yk^Uol6lBxCXW)Q0?H18_B;0fl!JUzYfB$V73boKLAu2-pfSNja${ zejV|vm@^X?eX5PF|2}jX8ASg~YVdr@#<`bLV2rS$1Nh=FMaHADiK_=7J(*nqR*mwo zpuMtnFehSEA^xS`pZULFB0D=~n2805LX9`Mv2YJ(n5%)1O~04_a4GyL)s5ayV!CEk zV|e14RgvHI%rL3Jjxjy3SXfF2Gb(@UuK%@Uslj*S7^XD)Z5&ftfjl216dwSg+7=Kj zEiRNut10&*2;4^fsmr<BZFgyEzB?`ZT8}gUp#N<}?Kh3T}&WS1K1I&l~hU&8zpC zr+eez8{?jnn@ciR3hxrB*k@{`yy`e=X!27`r?RbNwZiB*BAxB(K)>mA(wsp=y3eiq zNh7K5rsK+g=l8N*u_O4ImI*uUuKIVg*gSZ^WKwmY!*qDl=aI9w`ADqyPNlr}PVhjS zPW84FX}a0iwH1|6HaJ0FF@Jw~zLJGF)!k=weYnobA;NV|`rX*cBBd!|@0$m_nl^HX z)4jKHxHN^AVZKQCf-kFVELI>p;G6tp<7aqV)8JeX_*ou02U!^6G< z<;%-+@trEWcRu+K{9*v;cQ2QSS^JsfG}pQ_KXVt6CKZ73&WV7KF^DwFC#Klt82w-*O8*pZ=2mqi3M;*o#rs1S|x~ zRfM#DVOe;L>azUu2p2C9`}hJSSuld74t$h6L^z7x5nTs9jk2lV+efJNo+7A8XiDnV znLeLR1@p0kh1p!HCK^YD#r3&BaS9A3vs$gRC{OK77LVtgEwAz0Fixmk)F0?Jy0OIR zt=P?((;55zoyDCuPQGE48>&{!vt5ZD>_%nNK1DpWo%<7KO!TwIyNk`NCZ~qCv+v}e zc)rihE7z;DZM{Ob()g$VVDeVQNh;63jMmgax5wY3s3qt2HZ94`8^o;8dq_a z)vy#>`TT6GYsPHv&PSZIPESy2yWI%!wZoi<#L1uTi-q=hv>{ zVD@GkS4Jcle&u$_qxWX!qgL>Fq=aT4%7t0o+i`_y%Z%$zp5XG3Pu^>8IA_?=l2#n3e=RjRc!BtC*hDc!J+&WuNj)QQ@XOIZ;KUzqZ zzY(A|Gxff(sJiq)LzCW^Dny56Hl~vi4M`fZH z$df5N*YdngialU|OMkTb`N`xpD=@~GKq6jL+H9H?5Z>Ih0G3{lFmrMhEX-FPB2R=C zEBlBPovJA2^!v7-v(0w8W_kx$i{P z<^SI9oL=Wu^UEJst_*(rQG$7ElQVgHXqU3?X~Ofcccu*x_@|++t(K>H{oeloQ61Jj literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/background4.png b/misc/avatar-sprites/male/background4.png new file mode 100755 index 0000000000000000000000000000000000000000..68396b9206ae754f7c6d2131df99b40a1eb6600d GIT binary patch literal 13302 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 NMFnN~9JyNo{}+46M?C-l literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/background5.png b/misc/avatar-sprites/male/background5.png new file mode 100755 index 0000000000000000000000000000000000000000..011ab4f67e3c0b08087278a7747a979fa3805789 GIT binary patch literal 14083 zcmbt*bySpl7w$_VNQeV?5SUR>2?Y#FYEaOjyQHM#&??fcA_4~)Km?RfLK^7~9YB;+ zB!+HKx`*ce-a*ef-*>;Y?jP5+7$@GE_qX?cp8f1+g49%Q(b2HcKoCSHkCD}YAQCM6 zM@4Wca9XKw4q zT4#zq)X@=ZkJ9ft{U$0S>H6g}Do2}A&@{q^6w{}anRmzrzI##`2aum0BE*^0S07v6 z&F^W7GIkl*shOUe-rbOzp3Afz-V%_p{NCEL8?tY!cW>E5(eCY*zSLU(sAE>`nS5kS zA~K8(;lSn{Uhg0*eV`#OI-nyWYgYO?k?K`oK;S2nbNRkkr1|=u21d=F;VNm`mAGWB z<@R9Z&)A&!%jdEyy|P<`m2!@pObdFX)jJ%S$ zJZ-KoBr?#xr(E}_U94+&Z@ui}Xj&3}?9$AwGgJY!#~Y-=-Zlq%iMuH=H%yPsE$(T* zRiI!XkfA#$&p`52N1!0zrx2I@J}FjKh!nhuf`S-)QlmuwexDJF;47A+;ggI44^lbc z;bNB}4IfWDcvj3piiR)=+tfnXA`kfCwxAHU{t=VhTG0`uW0E;B^yrRHNQeYg?gHh} z@+l`3((*}3YV}=g;Lmo8`of=GG?*}lQy92R2@W%4pNaU!lVmkGqe%CJ4U@ZiDkZN& zgE}P-V>&5z{t>B+|HL(m&%#4R_I`Hbp(c`rp(1;|`Jp2A`vsxV_EmP{^J5c&G~^VI zNXrE+AZl<{Xd-*|CU=siY`aI-5%@K^AH?|0$f^^a?ypAnbL_!YdZthBRTMKARgxMV zg{HVX`uOEsO!H|&jP#5K2AajNnskbZ-gUpq4+zvSGHz{MbH2>HeEP z??<%?n$Tva&Y!L%Q#1`}ZKtCQMIPPBt#`O8EfUI!aNu+T!6PJH+C@k2+Q|@(kDr=; zyIhBJJZE?=fA|$rRa~;~l7?AWY+{;S$n^K_Z7s{$ocNsgDcbKON=J2z9WV7?yJ5b- z*S@|u=-us`HB(-W^kvN?%=mQU^_DLsv-wKB^j6B6YJA)+)i)hyv%jBJTv{WCFp#*p zSKsG&P|dyJezf{y-(ycD?fSc`>T$Cd?W+UJo7g#r>INRy;Hr>IsyFrXkly+5Rr(lx zj$glV*2T5%>k{%}U0q!c2y5J~#E_|E}}F)mBuuX3}j zZgFY1p%!R&c+s06rfj-6a5rQAiZ6|(ufRc0lhyR%^(}|Q()=;=n?n0u7j|NFTIdMN zp091CrnOcH!{?7OxCWVpG^Y341U@m4&2KmV5th?fkyeGs@AX2wuU>Pc(N3bAjqfQE z?@b9FEm(AUG;U=s5RMmUX*Xh7TeQx8iT76SGHsCMlPwK>f#+Qv&l2w9UHZd-!XdwF zwItS=$+LTRE=C*a(&m5#7Z}PiC;7wH?x1Sw-bm)MhG*9z!rSw_c?J zy?W}Ql7w;d-o_#upUtOGqEqJ9EUH2mzNuoeKK#MnoHu-JicQ`o@fb^Q8bDkW=O8W) zE{KcM1>&Lu&oizHMIc3^lg%% zAg&&V%##`ZT$7#|AmResj&8VX-PBE_0H3IKKW4*>v0Q~BUXBxAhsU4xxGe)7%ov

a@Mp)CM5;a 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes1.png b/misc/avatar-sprites/male/clothes1.png new file mode 100755 index 0000000000000000000000000000000000000000..c5d082c5d08675fa77263cff2f158c7d15092b68 GIT binary patch literal 5879 zcmeHKdpJ~U`<|J`Zm`QlQaV^QA&E&ME+uEvYmFY%7j z{T>1Ba|rhF%eU;{)RZvwgy((G`B5UsGs`p8>lpU`RW`aV#7Hg~1U>07LrS z_&o@}mGCMixB{sY2mp7QS`>~8*aMdllUVJkD_H}B> z+vFT`Crc3fXRRZvulKn9ps1I>vfZg%3MOGPwIG!o@tTn-(F1#P$wG?IXoXMzTBA9H-@WuC@rJ}2jxiv?g}5>M3I8aP$;+2_yoa_ zv^gsm4TB#NMUc%y%F+&Ct}Au|P*|=c63C75%5#LaJxhL%K<+z+A;pmhk5xsm4zn(Y z;RuI{3k#?qBV{9!(cx|P3`rkqM09Ue7a78TzP|}`Pu2i1J(u7783%z{0=~IWs3bFF z>jo$+6@0n@K`u_*zfK{Oi6K>M$Qd6ekrc_rw(DRSUa#vhqR8)XNv13k@NEol zMFK;j8D0z$#63Cd&}kTajp~nIR1R~Zu2zDyuK}YAJXW?%eh@k&Mc621-#cuHLKd%^ zN!DNH>yCqCK(t7e6WynN1T5?+Lsd&N_DkUt_x|Pa_fn96mLiGSx(DwiDgyYPTj3Nm5L)F zuI0tBMGMB~ol=uEyS}Rps63H7({&HuR#MqXbFGV^QDzn=(`<{cb~jx*(syucyYDof zxk1&b!1Y?|a82M2ijQOE(hxn$^3fM*V3Lu$o%(GoS>i5dx=D+kA}$oBC8`I^P+tfd zBs|fTD%YE*T?P#1>$3^Pf76J-2v1?QOc>wmeN-?SyUjwG_%gAW?zHC-%fAO`}mozcIixPr*naQo_gG-y#m-tJ|EEekyo3^@g zMT>s%=s@6j$~&U422Gz=9W3?5y~Z8aBDTNIY`QvFxqQ_L8dJy{eSOL;rdU1Nr|Mp- zaE9XJJRhgTJW(d^Sr8uR!=B%DbLiGO7ky)OXSN{ZYCT@R*sIrH6W*4XgEMQgWc0OL z8tCz7C~V^ZXY;A{k2c%h`HccfYtVDVa1qV*TQa&%#(`G=;^V_{ulRH4-M8d7kD&n!9Ghe2cE`X!RY@3x9G?2Noatf_tjM49_9x8h zqr1TcuB&RPb~lEAGaz%1?=5o+U=J+&BX|@AhS`{QnxN(tsy66V)_J(j(W9|?S(MuO zV>1)wdOHFx>CTAS`>%|=I3B)ohE%-?$R@7Lu6|9{R_|^X)@~cuoa_E)nZ%w5>?ef)#y{fMOL%$+dT8#m^z3Piq}Gjzz$(mLW)>`PV-RTxq= z7cOaJX%qJEIk*XMWbK@5^r>7Je1W8<{luc$7 zIa>m$nEg^pAfls)oPh8D0Zk>?Ga}BNcXAOW$M-v}rn}_7-7h8M#;kxfr^%q=MY z+mqD6qEo-i8VIM}8*}Sb8H(i55^i}#TUKw66mZFU9=0eA@JdreuzF+K^z6+)x`8X+ z!1aY_Q_`rGOmksgNC&czG1IH!8k)ObNi$ zznKx4Q^s&BtcShKNYzJ=Sj#1Xvp`Ph41;7XP6y8{!hezdeWRD~yZ=p=T`tp-zeYA0{gwBWbu-`USFF{+BVV)+SptC`9?DT9h|&+Fsh@Ho z+f4*3Y;vSTJN&{H3a10zM`VD6vC%UN;)oy9AVyyDdAikpGoaRVQjfkD^D}@6Uny~N zP=jCOIi+6%aIxYGS1uM(H+VK8K>_#yY*mF`=TCLh71Ki61cH%hKkb;}7|ls83NxJa zZM8m7kGS|Pv(@{t@((Ays!;C2xAv$6=fGE-;Rv**|4d)vH*C*M`9fZejB~ZMwVjqM zw9T+jAxR%UadzZOLcn-&s&go>lM~9oE&UY1m1M}m(kvZR38>QxAerwn0j^+U zC?!%+a`cOY>-Nnk6bhC>3d)Me2aD5vMEB33r&Gc5w6SAI5Q0GRO8Z6N*w;EOnu_A& z($^`defsk@zfoqE RPe8!K^n`^`p5cYt{|8%WNTdJ& literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes10.png b/misc/avatar-sprites/male/clothes10.png new file mode 100755 index 0000000000000000000000000000000000000000..f0b3022f38dbf99e5d7e12ca39532e727ab36567 GIT binary patch literal 4898 zcmeHGX;hNy76wE`iNdl>Ev2&3Oij(46_1&eM=g(IIHqN$M^nJW32bys%9D-I)f{rj zDGi03r%H-4hpuDhEFeyV1L*m>>;5{w?!WuTcdd85d++t^VLk7DlFmBVB4m|hK_C#~ zH0Goe2n445x-cmqLasl-0v<5V$@Vu;$)`QjfCCM*vbO?(%G2Q@KS{usxr*_?fk0cE ze_e2U*vkMAXgmG%Nh{|lZ{8p_)yqXudXDy*JeccGy2YZ+5; zlo!-c)scA9`I$kCYhY^Y}@zJ^DEU%uNdt=lsR)DkZ<%#+V2$rJN=~L;{en+o(P9SY|>ynr9z=ye| zuSXNI=^>YYeBk*+y_pxh4PG1W;SH?MTj5?j*xMO6dN&-ULSj403UWD`eyJR()U<$YR$;5?AR+pmD)w{!m?L>pA*}E zO%lT^EVF@cM``tOcX<|qf*KDoTUKE($}0EP17`&!svA)&kzfpmQH=i}`bj|`YB%gF zS|$L%1UFYxW<#ZEI6++kqTq-odzuB;Yt)iKr^C30$S5qDtbY5D42*J!mls?BgbT#G zJbZ7GK}ih@P7oJKD8|KVk)wt}&r~Y+bVh-}oy%IG-IB5t*FWhgULjy`#W&OMLY*8k z$OB`~xB0#SgCP%gssXs1LA+KKFj>{`et0SpiIQ{oKJ%|apuv&L@l+@jLyc@cucU)Q zE7iBYVxYmDg}lh}6pgbMjm4#5;|p3D>2D@E1BRm5_LPw<>!(ds57WT{d3tMc!!7aP zxc5(CddWavMJdj57fo8v0?USL&I~>|_<8yn|Jry)`|YOPGX6HZH8oT1ni1DHWB%9b zdNL;uhZvP{#)lRzKHqlfq4QPEk9KPj+oS@8IUcQ%^Cg$|aaJl43|`Rf&C7*&>%S6GnlyY)e@5eM{C@T1?EdMUZfU7LxQ(g9hT@9? zK}LIFTEVF5a%aBxpr~IQ*dNhsZ&|}<^*yE2JZlLvQ3lNSleU2;%nkJ-KdzS@R^8$< z`nYSJ?m++Q=E=M;%8xriX9igw8h+*s52WaAVmv>$x3n^Qq*tuS8&TvaZ=1FFqU>!VcO?I1n4l~2qRnvf$j6NI zS)z-%<-!E(LT}8=NyIj8tSlsaYeWx%^fI6z)-9I1z_dnP;%q27rpa=0MTtu((M;kqJwe! zp&DQyIx1%FLlc22))QR1O7Edwu^Sz6NrV9B`h&uL=S0M=QDa7`#;j zj4SS$F8|5yR?;JBLjVjb*Fi5P4e0RrK}cT5P9Xbhr@+>oAe$sSpF+ZXYruy5{M9DN zmtdOErQr!o5T*;RSRR&Jst=9ux#%Rg4NRVM1@YKY0el#F_@7hc`~?3XqUME}K#O@7 z|5I-P;RTV+D%W!72(uY}wsF*$SPx-SZw-mnThp8KM!XjjD>4BVg^ed+b%uNkw+O+H)_wBQS8$P z!Wks|IIZl(bA*3eqF#0QcX81y&8$MmhvY~Jw9r44aoYL-iJ@h1=)10a%=MkLl=zUV zyeWN&;8UbP)*$N9UN7DGEQP%13}Gs$z$y+-@%({`rvmAQ-y|Ucc2Rkvu2R0SDItKb zcwoqPwID8#E*ihzV||Z`P1DPEpytzzA1VSL0Ye&4 zDy5(p?Qmqh12~(g_NR)24Ds1^r`ZfpQW&d-g+u|UmkBurD0D>9jb(x?^5cP^Ma;_k zo|wsS2EguSp-qndhdqk2C5JpQ!nb$m`@J@h&&rnSYPjBwp3)fI#x?Rjy4TZ3-iFRK zj#t`$Oc^yeRFReb`yPh)AUHexsQV~pr2yDAT!n_jSfHhm>lTFfAi@$6MAaU(g!nm{ zwtjEuD|^rWlQ_}Xi;%j4MjQ=5#Nvmq-Hnu9b$eKwr$rSG%a!cz&ad%o0|Do>jl;>3 I-+ZtC4U4VsegFUf literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes11.png b/misc/avatar-sprites/male/clothes11.png new file mode 100755 index 0000000000000000000000000000000000000000..036af3a7a8309c5ba30333300781228f6da22e71 GIT binary patch literal 6058 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 SUW5T~5A#2)E|i_S7xrKLC3gb= literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes12.png b/misc/avatar-sprites/male/clothes12.png new file mode 100755 index 0000000000000000000000000000000000000000..a0df5090a999153140df654f2e3e9c9f23b1a77d GIT binary patch literal 6172 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 SasvU+nNybL#ee+yAO8aT`^Am` literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes14.png b/misc/avatar-sprites/male/clothes14.png new file mode 100755 index 0000000000000000000000000000000000000000..089f9035afd8b4df38ac1db82324a7c5cd872770 GIT binary patch literal 6105 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�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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes17.png b/misc/avatar-sprites/male/clothes17.png new file mode 100755 index 0000000000000000000000000000000000000000..f4d927b4efbc9108d62fa1c09fb79e691c27e454 GIT binary patch literal 4820 zcmeHH`8(8W8~@Ij$w)Ft_A_Iv&M73}h%8Y?F1rw~tz_S)jD4omAQfkbv>`gSj22^G zlP${>BTUvaqQQ&?V;!8YAKvSF|AhAk&vo6`^W67y@6Y{tlC3RGg$_y|1OPzD3}a#o z0FbmjLL2}kgeI*XaD!lNO)miCK3OKnzi~!(Wsvyr34)Ow_n5$R-INZ8NkdBZd zF8~nrGcz%=k91>=xg@zdO7Z{d8TUDJTqAv}%;RZ>?bB>8@9@9Oq#r+VZs|@@N!nb1 z!|dqJ7W5~QZI@l{Pxm`q|6(Fz(k7$O|H?iu>8G)J2GZ-!k>5p^Y)zEziqa_Z@f!KKh|*%bV|%f#;U?4FV3nGFR)0sw)+5J>d?VZRCcldzA1eH84YU>^nh zDENOs!Iy+)aMk-Cxv2hyXyaO1K69{Wc7|Pc(%dfhP`9+u^(e`cADu?N*tojfdZ_4W zKeSMq4ILW7+6C0qlIQ1Zd}kbLOK9+tEJpXoVeuVK*XfAFFubwpt)Lvl&?fox(Zs1T z%-o<)}V-4D)mO0~1e2*XGKr_MpcOIG_2yh&PK`~S%)44>#9?B%hiJMGww|zI}1(E^hyF^qgz{jE`4Sf z@MXmY^?BcZfkZFH2G31S&~2&iGBJ}@g7@>nxO&gR)eFf4p!lS3{ADOq>Gjy#%yvOU zT6;)Xsj4-h!oSWnun7*sG~t@pa?Bx+Gg(hxrZn%0Akmi#%%IQ$vpS|TNdk%P3i%6u z34usMoDx>Hb~Gf=#LpTiLm;I7U?+11XwRssz9MnL(3vu(S~&sQP3TT;QC|~)Y;z0h z#b&jy<=bHe21qzcW ztC(SorUpl@FJNjs?1rVPC>D)+`4WFt$A)tH9O9mDt@9POcGQH}Q@>LB=>mg6y8Nv_ ziSKgTB@bgA@ABa$x{9}FzlZPM_0fuDkACd?we^wWShZBfaO^Ex&7})gb-dUPdp;2D zrio{oS_Wal8=W+O31z)kx-^Le5zl;;9yyk6lWYAMaAiwr@PfY8&VK3*a3o#QF z9X!y|RQ01-?%6Qb)6Zv$(ZXugWc{%#!%9Xb8{B(5;ww3L@@FlV*YZmiA_v-Pm!2QT?tG^a>LUzq5 z)!_U^9qZBf035f)I;H7N9m>-RkE1Rzu?FKy>oQ;l>FNBc!7lZj9@)WV>V#HBxRrW{ zhehPOl9!BmoiQm#J|!M6e%bDN9rdnpIP>^aE=|th`_dYGNET~A!Di|c_6X)a~ z#iCG$d6|%r{{kLjpwHT1xX#zjlo)qXHiEo-VZYPUa4?+nqF zDXF7O$1(SfqMQ${H*mIuPZHRE4H#xuco>fggxGF%BGOn)8U-kJr84zz17@?iu0o=q zydHss*w!WK83{w7CWIC1V>RbZ2#B;%e=REaAQD3I`7wTT5WG42_KjG*5=6mJ^i+4P zxhNW15G<5EkwO4O&qROth$_ht>K>*ZXl?NSNe2%VaTshNT9VBPQ8Bv=wq z>|#8#rhqntVbpGsMy`XBt~Xv9u4GU*JCls^R6ZiAy>$|Y#|$@%MR4~l{5+y!_(|5) zh_nMQPeVv81`~Ao|5=foLQWOfT_F7fT*g zn|AmRMRp`8Nu$MLsP|H_6VfH0J8C*mWtQuIuGPgpkCCRZaA*$vdG8?zsa?Kq2mj8V zpY2qwZC?HQXUqlpD^=cQ?9_4f=rcucj;hN2XMHE#j=!%Ch1s2VA$W=La|FfF+Xf!m zwWv-`SDZwqkSbj);--(}psq+hF2S{QMr{lgtih`VnD{uswDrclIQ_eP5&6IdnzbF4QCyZKPWV1KfbjLO*f(;MYeoB_c z6doYMI)K@Au;I$O3yD;VqT4Vdat4)Qix0rBXwvV_>MH?FYi@?3jDAeCkbJkIe-!|i*+oke@&%7O{{qs$+9d!0 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes18.png b/misc/avatar-sprites/male/clothes18.png new file mode 100755 index 0000000000000000000000000000000000000000..771876e888c692c47d7a05c0462faa4f038a5db2 GIT binary patch literal 4757 zcmeHJ{X5g^AOGwD3qzKNj+jWS%k{gl&mR-(}P}p=`qW z$}r+Y9_JXT#7dmbA0Pc=+@dN-6{V#*5t0EMR?Q7KpB6+$w1MJ?d(<%oV;&j3Z0G?!Ntp}*7 z{7uogb0h%J;r?ZyuBgXB0HFVayNlDA1cHRm&${PhsrgA#p?KLniInQPfq+uP^G8edA++6KIBG)aB zHt^K@{p{Q0RHt(Bo~4o3&b^~7R=t&1XhnupZr$3yAZ>_Fxxr2FF%~q6@Q9Z+N25>IJEK#W@NvBHg8|Y{j}qdepqbg;MBdDY2?Uavn@95*ep>m^(cgW; zwLZBC)88m;suOI%U##-HQ`d<}+`AU(Q*z}pJcftWLohn6gu(T=-&m+S^WKH(60%Vi{63?Sm zh$pOABLr=7^}%TJP>U?gA=Fx#-+W~V-IeBrat%%)U^GbdowDG(q?al!U~+i9cLm`nWF5U zAh93sP=HhL6Z&Q;-$vc7d-t@&@{Pb-8~IIj6^XO8wKrvZ`0>2e$+P~yw?)I~fsmEB zxwU>$Y^C<>^_jW?iM8u{w>Xap+MS5gq8G(Ho~6!f1>$7vq_XC>P%=6O+!EMwRau0!_J8f+VNwo8BV{l9e6 zrMMnx*`RDHkn_;5(bi03uCyS%eE7Dk{@QTye#xQcR*iWri3k zEKIJYTdTfoq7@%Hip;`MS&Vt+F1OZg=FD$>+f}??|1a7)M9a!s@H3 zU$rnS@m>4wY^xiXJc~@{Yc7VQJ`av5>VdCl3}G)LtPjk-TDl)!Ir7*(wTUR2EGL!M ztBcywuU--!M6es!!@i5$ZOI{BYyN)92bsVvN2g0G^BsqU!wt(ZQ8S71=Y#b#@|#Hl zToi0+eWjn_({2&7>=os$Fx2;d^RoA>E`6r0(!rjzKywORDHAeVhSEZU4GCITYqn^1 zAw}aJ9t}@J9lzYp>*SP)?fo0xRW(-0K6VwzyAekcv6K!YQlAYJr_}vGMuvkt*IvNr z{OSIuK$#zJx|IUBiwpTW`l@&{Ob_JQbh8<21O~fMVo&XCz#O5#=p$jayd_ONP)>+Q zKpIf(?5nOoG^0T~u=?iRjmPv+;F3sqo{&ZXHlz6c?!mmxC@{JHucIRBFi>V zT`GQaBGnSA;+-x!9&aJ~1(Ed>`LPHiE|GyVtv2RV=^=j-xU-NkK7$P+xJqHJ1jN1KEHP#bcM zKhI5>QNt-e`BH)q8d5C-l)~}C^6Hj(CKq{_mXMapR}S+O!bLQ8Y%RuC)c`}FqV0ps z5hC_)yvdn4_^Z`->;RCy@P2LHc5L6F`(C~3-p z2j76v5^m{%p$(Fan*5_r-Y8*o5wpjMTY~vkm#O>VfaBF=sKx z-|A79fL*pmBEel7t*TA*SRKaBP^)}A#LFWwDM^`r;)qB68 Ch{#9) literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes19.png b/misc/avatar-sprites/male/clothes19.png new file mode 100755 index 0000000000000000000000000000000000000000..7e8400b5d9eb14e98a975ca9599180598f68a670 GIT binary patch literal 5490 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 B1&sgz literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes20.png b/misc/avatar-sprites/male/clothes20.png new file mode 100755 index 0000000000000000000000000000000000000000..550934bab09af3ec80c5f3756657c96001088245 GIT binary patch literal 5352 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes22.png b/misc/avatar-sprites/male/clothes22.png new file mode 100755 index 0000000000000000000000000000000000000000..00c9060ea3e213f344493ffa43c02c16e542fbef GIT binary patch literal 5206 zcmeI0`Bzg(7RQqil%)j}6dDAhpnz;?Z~&1&Tv!y@S7QY1&>)}$5<`Rl38Dysz;uH) zXv7VIvLvW9!5AVStL(A~LS%1561ET^B+Rqt%pWj)=7;%#AL_kVuTFh#)vf!z_nb;~ zb8*-qr!EHqfp(mBJmmobfwR6hnQg!y3dg(^c!BXA4ktim?R#f{4m9Mr^KlTUJX3z- zqBPK#jdVPR2Z0pozBh0qwkQY$Ql341>bTc6|GD9S6m+lV_IWBS?jvfh3DwHw1LPOrkqF|Bj}b^X9UnI7x6{_wf}9EAxj z_%o@xG{teJ?Ea=f{I98oXI>q9g~xZWm(E$bR+&u`Z8-Ors8z>~Rni(2!4Rm75)4TJ zZGCJxVJi~0RIsIjEfs93U`qx6hbn-(CY~wi_AK=wg;k(j+5Wa>>UZpSjiV9efA~Gk z?~`7xB$#Ewkbx3NR0vNIqm%Abt0q7G67F*l{2Qo&DABE$8exR8F{A1jsKz%GC;U^ zbl^L)s*1K;z4ndo`UQ129pJB*q z$zED8b*MAxnYM`!77$5{`-hPfYhcRfcmgz02P&ryvyjPJquM}%5?nG4ARp}jgS)q( z615H><$4SYcIo9&K>DagRIxAR_0;4g2o$BH1TzZUJ?{qgcvq;Oi*$!V9o?;Z{i%>= z2#d@E$UrR!BuL9q+U68Rg&A{3H|q@rbeerqzSxyw*xK<_R>?9GAPQ&pBU^?8inX(f zDWK*Y+ofh{$Eo*+V4Z9TwtjigMp(O#qnX7aFOXN#CR*Aw1P~2`MSk+>PO%jzxlGxO&?lt1@QEZ>>ZU zp&0Gi1@DzK;IWLK)=&BM5kf@ga~tI}Pf(B%ker8*?M#F(% zcqF4L>+>*krDeyg3m>&9P$Ql;wn-Fj*l~}1W=#=i$mzsyjzt6~wfMPZ;RE*#+fh%n zG@>^r{y20j#7|VKrho}mGpJ)8N$=Xz=x3R5QY}Cu3>_V}xhmf*p}zaXky?9S?l$XN z$1JQTJjAEkcOA~NW35`i^%Jz1zlo_b;Ty4xV-KS#ZzHW9By}XC_;Q%HNn%0F7x|Y5 zb9G`8r}p{QxBU`RYRbT@bxvVR_l`t!|9nDK%rG7lq`|eq2`p81Qu-}+7Tk5S{shReV$~Wy(3pJOfle#W9ziVI_AOvkSIGyr)#UbnG z=?Xlnk6gPUUVtCjR^<1MKR6i>b4;G49{!wr9^KkURtX zAZ_%*6uxy?fHhpwsj1=bylm3wDRNrL>@!0wtr5sEG_+X{ckDpijj~()NTHgH&YjeS* zXS^_Er9?E;ELne9S7TZ&pQ_sCxt1y(eswwWquKfpZw-#Xiw14;zm;CtxWssCzT!)H zhKnuMwn#h&#*t*QLaxB)uy9g8g7kt@y|K{QYQ|+}pZB!2iTWWc{zJ04=11;|NJHuw zJvu5bQON`&n{~q_vS307h8!Grvq_M3qFik;t)D(BQaDAKcyI`U57s#~rSY8YuSB;$Jk19$q>fj}43h4CGCi8_%&>aH|-ssbhe z4PZB@vvemvyWzp?`*64$-Xf@z;mv3FiqD&d1mzbCfPlRwR5yNrI zOam{rvc!S{Md*iXWI=X>-fj`;Lw8NHJ`gH#DfbwXW$wt}*gk1slt9!mY&E8JwnFoW z-f8!TY02ssB9}R(+ZgRHndd}bkTeyuj5h`0SMC@jEUmZs?oF8OGsw4!nQrJ;X4j1_ zw^B8@*EahMXf6#X;?2Av)a;K>9sGwEnggiJ=w*`UX!STLX>t)h7T@$e!q{O oV& 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 CvXKh_ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes26.png b/misc/avatar-sprites/male/clothes26.png new file mode 100755 index 0000000000000000000000000000000000000000..3fc99e1e74c2aa442e99c27397063e90088e786d GIT binary patch literal 5155 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 J)|?3V@gEuLvlsvX literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes28.png b/misc/avatar-sprites/male/clothes28.png new file mode 100755 index 0000000000000000000000000000000000000000..3cf3e557846e02af054480294e20266bc2825e51 GIT binary patch literal 5096 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes29.png b/misc/avatar-sprites/male/clothes29.png new file mode 100755 index 0000000000000000000000000000000000000000..06eba5ad9f09611895361e7aab8bf43305fa743a GIT binary patch literal 4802 zcmeI0{Xf(D8^>p?8$`!(8)bQvyEI3gLb8^d&<&Yx%xyPnr<2Aaw+ri}Xl`~AQbv+g z7|O}rSSLh@br6xJjN~x0jk)K%?fv~DzCZY3pY8Mcyx-63b-k|Z`fQKIA9Z$EC%-`+ zfk3QtaXu(JjR8;m5D1l%PImi`h57KmaA@8{t<~dBW4#&IcjWxOzGz>YMM{F*FcZzU zDJ%0H>5N7%%51Mvy_UB`U4yCm%^ahsUizp$Sm28%YuT*Lo4nees7SDw$`toNx4v>N~CtAPGpU2ctH*IdbHal^hVhIEYHT(m}IPu+C>+paSKXOly>a?GmD>dcz?7UR65 zOW~L$xdM8_s|8l9fUBh5v>+J`c*(nsG}7$~(x~XEJ5-uqgc}o_qW01VQ6kxYDm|Rh zzqo$QK+c4%Rv4fnGc+ICr0;V>D~FWeuqV*5NXw}_L%J+#M=pIEJr9}Tn$^7T7Sa_x zXuIbWRo;%O7)Nu2$-IYEEw;a+hgsR3^tsOyvoy@9)adqZ*4$b$f>HrJ z!n!wnmv1Jx9+qBjwUxVFcp(ql8+dGkf=}@Go!QAfL@aya_2roYU7by}S9s&&&Q{zD zjn%fv?T6AA$9c`^x~%ZviQ$_D2HApl1{FovKR;v#ncfwb9_krH#&;)bB@vP`HqCBw zXXpy(Rzm0a&_k@VC(gC`SV#EzW179nd+Mj3e!a;tRcFtgozod$XJ=B>8y(C^d$TV0 zR+D++=w8-S+`G}2v5IP+ATdj%6n8PZ)}{Z8ir{WoSABqN1jh7s z(?-Q)q><{s^`M8y;_*?%1`2SS^f~LKn&TPA^6+h_+vey+-KO0stPDXBPW0WD>aU;c zSyO;~tGyoe{G(yO!2NA>*340~cKnZ!fM+<-Dm$vbdGr10G5IY4Sk)$dm8!u=V>(O5 z744}cUR7Ize0yIR^_&_*no9#KKoh)d&sGKrQLK3{%$;+%ofZ)3FTdcD_ zvvXj)g}uaL9Ce`OCi1N_kveB2<)V-bmK49`gCB#q@k9atBKG}00}(eTpz_3cZ)H^5LW2`+?G7;0<0eerR0xa>pRts9ir z&ta--_ZLPyg{kfu9BsODOl1aD78W{t@a?4x^dE#<|dVTz`jIc52f-8lL-tc zRiD~W3|wE9dh=?%2ul4)rZ6fVO10+Kb%Fi@QWZJAGuyy@AXP-xW#ORI!1;fD|K}=a z?t>cWd*G^Vd)MDHFw|;WEwat|BLj1(Q0+D$MG z@@Bxv2v%G8OC6{IITWf@);fcJ04C19TijCsN)P6()5(iC1RItS8=W`^t+^=2EO&!0 za@(R8BcNQdxbuq^lp8AC7y37pTS*=fT;GWjz5CeEPx2T2(cW%~wQO12%Ir0Ge*$%x zo%b~{#LJ_GGOG})w&e2lFqK6HU&~RWr8Am~q%|+V&V#Z(Os;iX=ZjYv$nY6$TEpr~ zDY{y8vaE_}xC+`wNeE)6^tA^xj~R=6Y1y61`9os1>;Z{6z7` qzG-n_dG>GoS#U4J1U#qdO9)9otD8`CZx;OTgmAKVwqx3yy7nJm0KfnM literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes3.png b/misc/avatar-sprites/male/clothes3.png new file mode 100755 index 0000000000000000000000000000000000000000..eef469bf2f4707339ff8dc58371c6f560ba1ef18 GIT binary patch literal 5020 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes31.png b/misc/avatar-sprites/male/clothes31.png new file mode 100755 index 0000000000000000000000000000000000000000..e57a92d4097ca6d8ce6806491e0b5cd3c8f16d51 GIT binary patch literal 4783 zcmeH|`#+QYAIE2`!#X%5Qfj(WIV4}J)E%=Gb#KLpverqOsFX#-noX;G%dOeI<#0Qt zP*So`NpmQKZnRF6$ZDqDS|h_`6W`DF`Th~#AMEkCu3gvlxjxVL>;3w?-=8bNhy2GJ z^g=WOftW)gdiWv`dVK9MV;XpJw#K;y{OO(Y{bMtt_@!kZxG@OX}+N z!gCMIb8p@&KO;B4jk%tiwz*_@QOwdmlkFs4$7zKmn)M06xV5pPyUmRU#pV4^mzrP0 zt)XW`x3ZD?@h?5!yUIsj(sN8-hP7gl1~ZJT2xk#`Qx{VvOjW{E7ff}*R2NKj!BiLg zA9cag^ClZ2q{PIYe_rP)K9tbzx=Absa0BO+k>ZQ?RwBdq;y6~hLDFy|uASGz`msdO z_=26ar_WfVI^r6NuYSXeIUU!&+=#i5DGX&KS)|IM4p)r7_4rIy8TO{BMmu?;tfPW! zF7MghynrkhF}vc$_--kcK65=(53!eO}|0eo?%*0*hy3S`VVp=k* z)UKoH+zzfq64n1Vnk?q8HhOpZAW8A2hgTjjIbo=1ccFY#u)C;Z;hKBpoi$8qbw|#x z4)*uw0ik1S9z6{<96jVsqtkfN%SBE?r#h$R!MAB5cUlPJl9t39e$Jj8A5)drRCo4w zkKbmgzBDR^)?o%OQ@TT=9rqm>7!8SYnz-Z6nQh!LDQs$8(h%TPy#Pq7v}YvgWc4>L zb2H@T$dumqXHsW(88Uws_aEf!8xT!w!;@|J%5YpHCllvt%=|b@s-A1s)b>~JB+F`J za`Q}s)R|ortM{kx6T)oxhb`_zj<8S>wCS^?8OXxqrWC;z&RSGy?qz%aErNftOv%e7 zm=eeM=vG3O&(@RLIUlWK&^}E)LPXxSP_lB~u z`MygiHD(}EyJ>{>oGf$frAiWMxii%3@3(GL|5o#nm!=k+8tsg!NnSjJVfY}?(nKV~ zHuy}x=Ba=a=hIgdC1#4pEX6FNfWWbb>{wPqiCDmRf)Th4dT7!DWCud8-V4rnT5L{i zIoYBNzD0W^tDGmi?9)-LAjaG&a~c%t}|TJumvvZUaTM5kF| z#`9QeQ6@V7PkbxoWli(uOXI66 z(&iI2u`hqv@FQN6seEMmdc#qXPfO!1!s<~jV-qL8e&~zXgCm`DX>z*q$52)k5_M%g z25s$b7`j1-D5FZk(AIQN zj0wbo)tfoe){96IH<+7g%dgbiVYLpMU4e$sHR)UWZ$jwICks-@q(JEMHijHR zl@ZjhWC%^)UElx&YN3gTvll^VR7Cbe69~0WiSN&YQ1t0Hz7U%4fY4ddwGj|{f#5HUhfs%4&F?|b zukM^xB3gwDoZl;{irEDCZl+C=4ede>eAQ9Bosth<^`bqK&nI@Dwc(%B3wUg;3l$W& z!2Uq7F4RuXpQYx;$ z1w`5|RHB-Fb*Y*elzh7hQ*BEY1*9QgWE!Hd_=|@HJFOV{xrDzPVpX*;s}9f+H=xw@ zvQv~>I;kyQfnVfc97wI*lvA-5N)4W29{|QdQS2nED<49sL)hJFJ18~sU5Eo&CpCTk zvybL*sUDWOg+xKASq5e`z;&(EB`S+%Kb_QIgZt{`Q0mA7?|>XA6&Kel0HvUn+Q?EO zfoq`tUJTxi`=6`$0YA!Zom5XRF+v7i(KldAOyH{tUlx6d)Ts)(Q187r4^kbN?pgPA z3CuPgBP9YaKmo7VLce?!E{hWue>eqdO_t7yDAw76CH}K=l^;yYsB#B+mrmAJ(l3=9 z0v?Gz{VT*yw=Q+{Y5A7DV%!x{c5_S%k?5 zIHcayS##X@@oO@uec9|F7w+x-G(rVD)T4p=gGo(G*c9(#w@i*v>d peO=b=Fqo7O?S)TL)OuS@qRu^a+Mb!*aUB7Eq%CBR;>`!o{TCjuuTKB~ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes32.png b/misc/avatar-sprites/male/clothes32.png new file mode 100755 index 0000000000000000000000000000000000000000..bdad812515b0a0d3704e2dd7cdf41f9da1c4d6df GIT binary patch literal 4815 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 H>0kd1c7v$d literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes34.png b/misc/avatar-sprites/male/clothes34.png new file mode 100755 index 0000000000000000000000000000000000000000..81d94f3de59321a9b79e3e0e8ad6ac18c9ef9721 GIT binary patch literal 4809 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 PKOwA7+gg;L^!)YT&j7L~ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes35.png b/misc/avatar-sprites/male/clothes35.png new file mode 100755 index 0000000000000000000000000000000000000000..d843da7e78b7db9e1ee1be7dad2a93b1dc570d57 GIT binary patch literal 4573 zcmeHL|2NZX9G_`uRMgU?V&|5c$b^PAZQ8WCxruZ~S<5Brs+45Q7@y9qi1JBYeZ?vA zN2Dw5(a}U3#L)RVK6gr(X1?>NR|NC0}WPMqHNESUkh3Hq@W((H>{-6GJ_Z5# zOHb3H&ca~Jg^Om^kyIH6gV`kqQvxH{ht*PM?tyb_ET3ORQ|sq%4>j+%z$5f{6(x6_`|DQh`YYCKddTQ~=;zJn?w^ zDoG847e78e{sZ%jXh_krzj#u&fV{0(kjOGynD9Dv<5{(1{im%BiJ`oot{gs7KjxRn zOKouLouqCB*yYnFbhy6jF<+w-3oDF1+fH-h<5}w+Z0O9p%t6j6u97bq`nH=l?4H_w zXK-Mazaz3yF_t=Bs#dw#HEGvZJ4@}qBMRA|+w=*!Lr2}@D?&-GYWF4Iy2q5JfKKV$ z%suQIZPDQMSFJ5c&gq{G6I6+Z)Guvbe(%xKR1rCpsg2>D(eTu&j-l<@#1CIehv4!A zzw89ZK3wq`=D2_DT8C@y`Ce*YinMs#BYj@1X;KWG`=v2u!I%1BXVbY6)x0RDj%f(j z9h5<3ZyXYi8D#Z!Purc(VL%TXl`K;>qW7cm>mMrTzGY&-!~l2D4H=g<{>->J42>*%d(#cffCfV7LKrF=e#hu4 zo!uOPM#c>ZM>cP=!q_4TJa_jeTO%Hl%8%OXrv0HLS05#k0-zif%hv?~7;t%>GL`rc z9)=z&T1~`~Nl+-y|84;X!g{%se!P+YfP|tw2%|4{^J9I&K-iQcAq_ga)!FcY$;aCB z4sa+G*CW39CmF)JI}V|1FZ|ehsHm$??}9iCC+H^d<(%5;jIQ?70GZLBwcx19oaxjjOy*_5 z2i!r$hW=H86@#3%{CRkT;Hy7hhvv5?zhL|ma#}jXee)`{XsrivswK0x#rP>=XN<}(>Ed&U58;J+wys7&x1S|w2S>WdiZyg6ZUsYQ zoS3Mg?u>5Iy?ybAp`ykaZ&3DS%vm&ueOEe7Q6mquihIQhcn(C!4c)n0`xoW|Jkwau zS)F8se6a<)Bd@!xC2fYLDD~oIPxCGac?$Y)+RP|Nl3z5Zst|vhdr}k)O-B@REVqiZ zgXm%iAeC5egjhNJ8h>Oak*c}DZfL`A8s7da2Lr-iIuhFg@m;HUm#Zf(hh|LeC*m%t zG{*#nqQ7w<{Fzp5W!MVp)7yA1!`r57j!Q@Yiq=&K_aAVYJc{r-ei}ss{PapIWZXM~ zep>P*DbIQ|nY^=#bfqi^7)7+n0MydOo(@?bb^u@DGuBlu82%^ph_urcHiLG7M z*#h&bHFk)CTPrdx!?Dgd+qJY;RlWEEh$ZLyBc}G^z~-!vq|XQnFghl*FlCtb!^DsO zQo|t}xS6$rj_uH_+&UfxH&#T{hui-|ZZ~R(z z5}kPKR1bET#gB5z$-;n>m*ey{meV2f0g-oM{_8Jxi#KB%ubgo<<0FZSNZN#WsBbMR RhQ4HA!9jZ|HM@>n_!ohmSM2}* literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes36.png b/misc/avatar-sprites/male/clothes36.png new file mode 100755 index 0000000000000000000000000000000000000000..8b6c94614539b4f762268a919b8bdabfaf3cd369 GIT binary patch literal 4593 zcmeH}e>Br;9LHxhGRlwgqgLBQC{At>b<9S%Mn6bST}OVzy1OpYrEF}>QX9h5`~ z<#x_oNnG=zj^EMTOT{o_HVb2hFt&Z~cb(3;|K30EAN!v3obUH}p4WMw=X{>``+2_E z0VjPn!*{?T5XfdZa8Z|AGL47-jl;c?6NeW_jT`p`x!k^K#Op)y<5Ka$oE6AC2xa z{}%e$?!%jWt#6z~WI3QC9rQd780x+*ed^@rEAXDU9sn=7)&L3jy_vt;*ef-UOSeE5 zx)EV3!RwZ>tD!v-elnJly5eGYy)f4VFhaYhL$sh9HyLU^G)2%jL6ZVa3N$Iuq(GB` z|4|B%d2gqur~S^w#KhRm%*>Qk9-dGxV(tA`lviLqi+>|nBlDw_4u{b{8xp@hqDiPraUweodAzj@Kn-G6 zJzUqPl1>OJYZSF3P@ZF9tK)4VqL*yHxbvHwWq;_K{B`=;Qj6)A%-HJG_h$|K4FKsv z1&!C3HaThF!lAB3sr4?1C)mUNHn?~q%}w>YCtaU%Ml8R~bG+4DKy@pM!%S55BobT> z?hL*-P!4@aj8ya-h4Pr*V_~iso+>gHmOw~ZI^((?GCTC#-E>EphazD`f29pvjB68= ztJ?i)Ck-8l&M@y9LJ8xj znVaG2U!;R%4(BgsS~y5re29|wmZ)KivuJo}AI3ms50d(6cnZ}W)K0mTg9;6D2T5<@ zFZkw4_idfb$tnf$lp1E*8Nvdi!KImkq&BY94f_Ptc582A?BDkUBugBfO8KBH0l)Z@ zs@hf!cba5DE1Y^Wa5*5Ef$Bq|0zhr#guurW?H3VOlWN9ARwm^rXH%Xj6X#Ti!Ype( zLg7L&G}-cCjBu z-ckN`P|ph7levStxTD>!7NdJ)C$mY%s38^76y#*x3J}C@T0GL!qPV=y661i2{L|t) zv$Qoum9n>i&oWpG>y^-!-zPE(>y+;$pIiZ|iqB_=5F-Ni?xFlGa`DJIV?2Tu)dMsB zZl+ZJ23~J1sk2`^@z_|JNA9?Mp)brWh44oPPO3A5j8s&N2|u@g4)4X0#yOwFm8m3Y zeH!WR%!C|Ze+RENDdO*gC9su_`}ccWw%vq{Gh^n8=fd$93*EDPGDmj!Gt z#oH$B@}vtzp7f919XHj3&j~mBM1GXxvKuV?b_SsH*+U literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes37.png b/misc/avatar-sprites/male/clothes37.png new file mode 100755 index 0000000000000000000000000000000000000000..93365ac446021e108a860205c7c14b780164f463 GIT binary patch literal 4584 zcmeHLeK?bA7@x7!8-}EhtMZtCd5543dtS79lcg-ZUF(7#C_kh6~@|VsZ zLqPi_i9VspFqlc_!qV$XsK&!!W?8;o9wEd?@vz_Jwcm3WeMF1-(Y!OQJBWL4lrEXP zeZ}A{xq4+6Q1PP^WdkaWJ9l{qiYPjOl`&tm453@yf@^`{Srvt2u^hZ zHT2KsK!-vcCDwxU zK*V@y`Ke^owj|n>M`Z3PnqZy6J2$Q=k~GpkAp5JNEtsA7FXCWy22c4kpSCt@vTtA+ zL8H>VC?cVvl9&!@Q5|O{i0Z0T#U?@hZVMj|s5>(;5PeYI(!$92ECVpFX<3q+|8 zP*mTIOm>gW8{<#|iHz4}n7!@@d1wb8J<_WQX;auypX{w!!5DJu%#!&F2TUGd)7nH;2Yq|$QlO&uO4N7YibaP(hAnmX^pN_xEj1p|r?xAe*WXOl2k`PF z+4X6_))cW#YBV!ByF3Rz$#E^z+5=wXkkzLVWth#clcnr3jD?SsawZp9jj>=^2nE=Q z<$)l8=db$Ak)liyeO2l9+E9xec+K{)1>l_tKFynKOXVXcEvy0|!;bkfzZX>sf!iJX zt40oiKm~64u%-#B8x+lgiq>pr)7>w_4}f&5K09Dys9d?ieKq_593_hw??yR>-(m#DltBvI^OcCZHTHJ^3xtjBJ@CYbPU{ z&3u+78Fp4iw()6--H(#Gt0)P-il3LeP#m&TrbG;i-1w9%!c6Q(nNOB986C%w2rPv8 zS8`f&I30$qG?D|~Miy`>&9D7L>$d3nb#8r}2HO0I6y#P-NFqKqUMNON&ME}lu1FQC zE+LPe5nb|yXBhdXx=mQMoHdr;iBtF={W~Xn+9YR$E=PY&CWu&e7dqpChirLLE5$j6 zp?=dlI6i>OYgckjoi0vE2@HAhCnsuX zM@xc1f~MHU6~GG$!m6!8z$Ve?XCrTPD|{F9@neQ)4BV>JB5N^nxPYW@XP)cU6$qxQ z0>K%1Lj~k4!+b_~k;g=P$o<_E_^yH#(1|*Lzy=2^pdu0tammj4T{<=h@+8~=_^+al zi4ZRq{S)Ct%}_lgf4~3%Df|K`^wr(U^J$IbF#jT;YZ|Ew7U)R79qHYgWyV10}{|qfQ>> zl3~Yt$9^XExgq2qdk2k2vNOjnxFhh*=U#M+dSwb^e89R`?qRZh_VHGNa~@$e`ykn$ zc2&6t-ySR&HkaN$sVaqs&c}tLJr04jVy)|=$E~tCEQO|xAp2Wg`&OMf+i%rUmq6#( z=kJAX4gsa&?8S0or7TXks=F)h-`CQ+Z{k3$9+xSKb|QL4LVssqzTN>|b)HAh{{<-( BVE6z4 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes38.png b/misc/avatar-sprites/male/clothes38.png new file mode 100755 index 0000000000000000000000000000000000000000..987141607ed103731d4928cb26c29290843fe969 GIT binary patch literal 4283 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 VxFX9jS@3TGI_%(VUuf%_@E^=Vn2Z1b literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes4.png b/misc/avatar-sprites/male/clothes4.png new file mode 100755 index 0000000000000000000000000000000000000000..5f801865e96aac7ad6af04800d4b8aed096b9a76 GIT binary patch literal 5278 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 LTR%Vad(?jc++(Kr literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes41.png b/misc/avatar-sprites/male/clothes41.png new file mode 100755 index 0000000000000000000000000000000000000000..647da4a554cc1c319baf5c2cc8d758f6c08f6c7f GIT binary patch literal 4274 zcmeI$Ydloz8UXN_G2=1{F=V^W3`x{(N2T`Ou`rpLq{d|m<$7Eimxe);avQsy>|qEGq6TGM{C}FS36aX9P?BR?;)#Pd}h2X#% zaWuaK6iTc8p9|f|t_(w=bf|QSv(M4MX_S*Q0d*k4M+P`Sdv5aj`E-SuotPkdl)a ziwH#mMA;LiKt{H3+B?Sb)U-FS(>WiP21X+{?lyIt8yxVaI###r$`i1{=UTGz-0p8R zS)VM*dqujM*q6wXK80m)>bUZ}9;(Q3X<{n9I9I*T&8a=8uk))|O{>_XA>_$LK~im% zt#-XR##P@p71?^uW9Ek!4U^4-4*BT;zTdy({{F-^-}Q!owQydPZq}Uq>6bO{4*Hc{ zAIy3?p36ND{B6P3{D?!I;z5V$-?jl{mRHEkyhoC ztwjfZKE5u7cP^5f@~l|fUDDVboU~9MJ2O^o!|&Y1OR1mzQgBoIfxJdEQ;TFqtmB2{e=)xeB}%uOYn!^p~X-0Lxk8q1(VB*~x6+ zrI75QCg6zdbTY8mkM8e`@O%(axDgsBi15jj=rD*|2Br&kBD}DIb45%D(mzsYwTeNc ztFDPKMdQ3WhlSf=^z?SRA01LNMX`8D4c+Y`(Pa?pCZ-GFg<*dQa-KramSe_i;e{F} zEkk!eYTrojM;w8+^aI`36H+@wNk`E*-82eDLV#Hn)20Ckk5a-gV?5K z85jVm&tA;b!07w0wEcdNYL+qWs%g!CG`>n$pMkl$1HDK!U=Yt#SR6=#;8ZLI3*=>4 z_@@HXRdqY`8N~QV3qKUh7pzV`0Suv9_+o(}csmNvbFIaGbztZU7c9_O&0^mQ;J>uI zI$&{|Cdo`4V3_Y&C>vAZ-RTX4!Ltq3U6AMIVk-bcSkp_YeJqGb(1lf}a zJY;z31aQ=i%&-KqjA|*s$5!OM*1#x}yI5eGDtXU(V6<6(2Yk<(*CdahfHB0e6Tpl2 zNxL@#W65(A;F)rg`!?WVOAHRkJ4xF0E0Aradk+pQK7vF?fN|F3-+>`+BpL-6Z)3L; z=xIfw(tw=xE;yjGD#>j(?;%dt+vl1AKE~$Rt!c(rcFn*%keqXHKVYd&LK$ErL7lf8ZQ)hIZaA-$XF7$}Qi8hIZSfc~S{ z0uLyQ!oQk&)UEjuMbiR*gm>AjM;wVDOg{EVymau=VKBIrm{W^5Npv>q-YSZft}Y z=Yhs?Jjkt&=xAKOxTf(<8N<8p9Qz%naAfKM(Vx zvWp6oL)?(0S7C`4qIDnm5bZnn95j;FP8TLMk93C*2T5Z5o*4W_8c|v7dg16R`Di@9 zA;qCJ@iRB5{C0WSy^TrEL~q{1X2r;CV@dkxq-j=e$}fs9_CYaDa(M+LzED|RUhKQX z>GbYPZJocDpEjKSwg@wIx9yG5Gb?^Maw#>n{@0q8-X>nMjQROZH6v*JJJ&2|vZY?7 zj~x&M2PQ{O9b<^EAi~*I6V>6cXT0Tvaor`Os>&3MIAz6Tj}Rf8!m!$Qlp=FxcMHzi z@(oPPMkH#-53tMf{~NKFxZ$=Mfi~j0ErEmU&ulOIlRY40-Q3H>TYlP9@5u7S?iP_{&CvY{HCn9*Aw{5xU4LZqHRPXeRBn|GjC7++g1lRrbpA9 zfnu50=`A`4bAC89Zd?~_^xpgY|6XppbRn4iE>`YEEXW;g8q`09`KWOjH=ltKA6Jju z)8bDw?%E=AYKiX4vac>#h*yfW(`pTGt8s=^?5i&=$hc$ Z-r0TqKUM0+aN$1#ioSCXMd%Wo`5#;CZR!93 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes42.png b/misc/avatar-sprites/male/clothes42.png new file mode 100755 index 0000000000000000000000000000000000000000..ba0af88796a6d17b9d5446e6297ff9d87ce7bd2f GIT binary patch literal 4254 zcmeI0YdBQ<8o61w?^^%=yWaQ9;(G0L zRVS?^;cz&0H>QgZ4yS^CJ5;}iNW8?R5l$*6eO#S!_h0Gs0N{^o@z{dHJxEcT2_gU! zBba+m;&6*=z8xxc;rRz~II@+S%a&cy`+7e}lhc0ISu`-+W`9PfE+R_jc2rdA#p_VB1GqNr}ep&=(4g9?Jz%XVq%Dbv#Ojp@+EWF zUN-wf=1o?WOfl}DnBKem42$lBS0z&z@i-M^;bNf(3!Shq1q)NKFa--!urLMx7gM0? z!w=2aCmclwXCsldX5=1uNa=*W*Dn4O;`Hp3D7cHUYBU92>hyUe-wl*EUJMW(O=J1ar z<2lDL-#ee4&glB^`Jm3;fPXA+m(MDzD=Uj~M*TZa6-rAw3j-vLtL0MxR`dzV zA+}}VSzBv+&m;ybJA8c^J4kL@cKp-VnWOgWw#7QW-=Rzit9-YgK4Wp{!{^ECsrI6Q zQ#@UCtflUD=kId08!}qQ-l>_-A4Giw|1-Dj#Ph5;=|F5l#Uu91q5XR>c-irCXsrI?0sv{n0t|rO2n19;)u3rx}rOwW`*eQ{ZmP%R|JXXx3zF zvv?Op;lru*3*)qXElQs=J``}ggG8s~^k?<;JDH*KsGNS;vGmGJ(#O-U71`|5*tMsr zqlERlKS(xh-P_3~41I|R8moJ5^)g5g^)MOla3>6fos042oG)kF>2*~hw%*>HufCL< z66@f-e1yAUk?8>v6}^7)l38LrLbO!f;0%ZcFEvYwN4S%~Fm00X~UYH}5< z^^(v7fV+oL4vys#J7y zDQd(AyIJc}HK0W{*+>9(vv#@wka`6*6oR!~cKaM4C4p?13)Xh|odbX?PND|+VC_~s za0Vm?lMU{Iwfj+Q0I2GV>KA~uU-=9H#BC+(-v?{Is=h&uiVj(!lwzz z30Q~Ka(BRH&EmKa6@muKp;~*H7v;jD!0C4g$!IKAxOOd{(J+P4%OTg1GMEIF6wKJ9 ztm88Tp3JJt2uUccdQt+{Am>5wZ_&h^hXvTa-QWIAG zJz!1hLE0KV!@VARL;`$%{XETx&mcX+9xeu~%M{WKA-5bW(*UgJ*U}6iw-^&G1AHm` zNYjVhe5`aOpfn$EPJvuLR-y|iD=?C-=QDdfHCP~o?sGgVfJax-%8yz%ez!)r0k zuUszuPmP{JjRqoIl3`N=r{PlTOx$(Yp|fafddYc;(n zY3e)LcEHV=qOf1#OIdq*j-^3(?GfevKIrzIMry!|U~Ml-N?MCktA`4qSt_o$>-sHV z_PO6PJ|0Pr*RQPIfY*AlB4n;X2o36Xqg=_hP$3Kj?wot=0$-A=D@mT;&-p_7$n8n) zIl#*+GcK%p9(bXjvt?>r(K1D4FK^ZExbU~dnuuGBp9w>Qb67&zz58PspOW{r*k5gJ z7iE>MDENy$5L?mFzC-ykJ!dpdh={viYOTJF{|T|ye$kb;sJ~J2pnIy~+QV7LGa)?+ zae{wb$%=vrdPHnwaVYgUckuA!p~{u=Q9Ls_Ctrks^-|sN4k`4tCf=k zEoOO#(xU#K{G)o3RBh&5cMFf?!og2JXSyGJtl>@J4bLDDprSk5z9SjU4~DuDnz=PK z{?pOny#XhD|LZ64&DwY_{LJ%-wAxekF(Ytke7v<(=hl&y7UcW!5H|8*O6tK)h zWRNJ-9FIrp<6_@?bE3Ki23j54{bR1RX(e_$Na7K1iX%jIy(p6@p7v(wP95C<)|J!d z-RumX|Fy{Iqk8>?PqrT?)kbFRXK<+GTd?#cRCJ~;Z?!AI@}|+^C7T-0KAC*Yk+c-` z&eR?FOE+Js`);J3Bl&&!o-FUkr2JcFMn0trpGwku`x6%rI7Gug1)STqoi6vC1JC^% DMuDax literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes43.png b/misc/avatar-sprites/male/clothes43.png new file mode 100755 index 0000000000000000000000000000000000000000..27b92089121cff62958723b0930e6ae1c2271dd2 GIT binary patch literal 4216 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes45.png b/misc/avatar-sprites/male/clothes45.png new file mode 100755 index 0000000000000000000000000000000000000000..53427952201583168c8f43474bf7c1cf460fe650 GIT binary patch literal 5411 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 J`SZ+`e*q(%JJtXI literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes46.png b/misc/avatar-sprites/male/clothes46.png new file mode 100755 index 0000000000000000000000000000000000000000..911b89e3a1fb618b95161227c8bb38547ae63384 GIT binary patch literal 4266 zcmeI0`#Y5R8^@pLY0{VxQ@bhIm=4-fY15!q#)H;ja$08Drcy~E8Rb}+VPvO}!*no~ zuaK2-$Y`q>IhRV3RD&s$DYO!kYeR)GzIWHv_5B;ZKltIfo_T$)`~KX|=YGHM&kvL6 z?&>g~w3LJ($b2Wq?H&k%3cfx>4OrpTo43FV4fAlYMZ~Q?3<41RZCq>+5K`oaAQWq-?KaHgKFU{a3F*)E=ItA4*)kFDx8EpXhM3TxT*cS$ z9kw+!n_APA;+Vl_M_l1o4coiB-ynCc`iX2r^Yg6Ij9a0(oWMM_qda1>38O56l3p+n z!_J)1+JO`GVKLtPp+Xlrfk>g^JOssNf6O*v)(NvyFgpdaQ!qOP zvs3VYF$Lk$}M-14lD{e|+v5gjfN;^rzv@(#0EnRPSY1b|`k&aVEOgd5bv~ zWA6@E9(~i0A#%Mm8U9GP!LWd}*X@AVDtJ-F>T5Cds*UTTKM!|~R)-C=azCj!T3nMH z>v~Jk9vA=C?46xe5kt?ILsFV*Q>`SU?EcB;I!(SM)31+jQ-_;oUY-7vZvES*!NXO@ z`Wow{Aqw^WlJT++Zp+oirS~nwWm#<%lj7Ijvg0#PFWcpoi^X*DIOk<$*nnc{^GN;0 z!^=dQMmRUe#b!H$C!_e{4;ivA<1(3SuLqAAjk9}dDy0V=q?Q)T=LCkwzLghL=65gn zT}R;UdEY^pkx?!}PIv_I!u>6{n!BAOYT4qekv)GGuH!DpwMEFp(5vdGQY&f&`_;*8 zte=I&dh=-0U1pvtG8%gGGIC-Uk2abl*;9lBR>zi%c;mdWp`h``xdg|)`OKJd3@h;V zIa^^u#aSbHlT+VQsNDCg>Jum`x0SRVA^|q!3C{xhj<>O!NkqZ*953=}Dt^kW zJu(R}KU?=KV17h<36>pHVpC$pG`cs$$*gM{y+N?!7Yw-bez(5`+nWy`SW*A3>kG%Zo5L$?eAy$q^Ji?-CH#1icE4Qf>ed z`$<`bES&cTyZrG%_+)3i?Eu8Sn3hy;gV+K8$fGE_u;z|51DbICi*qUnoFDZ<9SUtt z&8d6?+kesR-glaZJiNWxtd55yDh^m?``|q15dVL);9K+pu5WPNK*b9SHy_g_5SrG9 zcN&NmQK)UrnHJw+nBVHIBNsfO@Y*-d|Cx`Xrutmzqd|xZXCHbD3TK|P@BW7gamMBs z4uR4w43RQyDa55@ZQTr-9xCiG|CtYQ*yD?x3j(&{heSIff4+9Rba28U11$e_geEp| zV@ihGI%t{B25Ara(wRfuf$Nj)|BCC}My~-ADSY)?z?c)Ky%N6Z@lAO03g|dZW=9<&e)yidMOH;?ftl6cTPE`my~bCbL9mG=%8|PWj!nwS`-23{;k*3m5e%~- zO)U~>qo{|2A@f%W4=Jv)O44`6d0O@(ca#twdGd-Z1*+&5D|ezk#o%gf)6ENJ)Tp5OzbkA`3zTKqnH-C zMC&AHUZhB(aOz7tqhqLkqn@66qS6(vyLh__-+_jX^wj!`+;Zz;d+#LTljv_8C&CohV+5hl@BG)=rovUN8jY4I+VNd3=NCHTqM~}UGb_4dLZ(4F>%<`I4 zD(5>KtiL-|AF5hfZpo#@d0_?3o~3KBbU2rd*iB~b3WfUNqYb#KvDhpfH-ZiehT81rIvQENJP|cx$U5_1hF>+4?HToyV+)i^r8*b4(Hu^G!GW_L~`c;jtjSG&n^~g($_R|oA}=uj<`SDI37>O zhS2Ng25Ht#6 rLr-n=jG*+*VaA2t literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes47.png b/misc/avatar-sprites/male/clothes47.png new file mode 100755 index 0000000000000000000000000000000000000000..6049f8336aa5410dc906cdabd11b7f35342f4ae2 GIT binary patch literal 4536 zcmeI0{Xf&|AICpivzD7IrG)Z1MefB^`>MrZ(Ezq~Yf3Ookv7>&Jz|f-f}wme=5hiXrcEg6=oze*rI;P)AQk2ztO&QyfzP?@La) z`o%!d(&s-eR9*Dl5C~f4>E`U{LkSp^@uQB^X)iuHbUN&!$DGt(OUsCG&XD|QFb=37rr z{7m4^9R4N9F5QdiCyrW@GES+Q-$#zF=z)roPO}}1xyt*ZT)$MN~j`i zx7Q&)a)`=x@o#Amns>S6yvdWVpUrRXw-zQZ3W=U<-y|pfCObAa^?|Z-eQsqx^Lt`t zs$QXp?G;Sth5nnYR*f}CdFEh$E3>AhDH~tR=aU~YIaC9MBJYsh2m^zzA25A*jt1SMMZF@S z(S}}ZpF;r%?JpuRcpbpr^>eqhf)Pe$wsj`JwpvzPTZxBnzZ7P<1MG>cAT>1{>)HD| zjYa@F?osip3dYqhnq#ya4>#!E>C6LI6K+E}m|Mge?`SuGC3hV80e;1K8+c zpV~wesys2+))3TnF}rZ=Dk$jc@@$v`xSiW8*oP2W$)UD6Z}7Qw&|AS!!PGNSWcFMj z%N*XZ4**##k!1q8N5esEtm~IJKQq!VVpvDSdPX^qbeA_sSC4g;E z_a_H$PD#?QH+V6yaUzZ_%+=2*+@ zfe}o0(;u3~oce0Y*cI$HDl*N5#yi+??mLWA6z4UNQLAI1lSowdMU z{9R^0{gnXxMZL7*pf~VWD>42nSg!G<_t-_i2Ct$=1z?@JHOK+}VA&*H1CgM#%Gvy? zS76lXMZ3Emf?QSG8O4?`aw7hT!V<{Ws`D%Rft;weqPYynkL=uwH^NB&B%(41_8{&| zemNHG&?3*hP8={yDmE!m0aI{V)!Gc0VHLLhCxDALiLg62nZbx|WJY;A9uG&3Ici6O z@GY}>MJ^zG{pGzbnIOEO(xgZmgu5HJit<4C1M?FnTtIk>>V-|9fpjAnSK5K?2gjU@ z27yf`67%v>LHG{gUiTQZKaHx>9m9WH`B-jp7nMRnmD}|t8P6EoDE5qDS2i6cKbzJ| zhY~z=hdQXXKqhojw7c2^gA^pexQ?$n);wTQ$Eo>1!4yG`+^I{;l#1x0v61H^76L!D z{NmoQR_*cMXS);lT@H*l^6WK>lv`3>Vze;zl-gry+4Ly7V!OZ~h^pW1Ym*ddeNd#^ zCzeD9kuIGgtoF|_XhnxSpbPeAdEc6bE`CdgRtqQMxOcc*BEP1_Rv{V8DNP<4Qs+x$ zQi4v&aSe6;7qPVTU^KUq7%1zgwm*B?dL^9oU4P8q(uDO3()97(a7hPmWc~Rsna@Y0 zBTst!va7zAt7%ey{BMHmIrM@TiX(8%K2Uuv#wF>M#QsluDt{>*ukjL~B)9 zw{Os+%E5uK43;BWY|xTFQ@u#5+j%p<|K_}g%TF*S9U8%2p=jV(Dqi+kmOBxep*@M` z*pp0ubX-%Vp4{X}^xKQjaQJBWqJ#$ded~#ll7Rz0KJU)+V&8u=k6n*kJH523;T#(6 zOrtDv<6$xN=ZtSQURwtvS_W(7@F?H$$ip;rh-vSwYzyEiOgfSEA{?PvP(~j|n1X|2 zcRG6RA9eOIN&o-= literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes48.png b/misc/avatar-sprites/male/clothes48.png new file mode 100755 index 0000000000000000000000000000000000000000..c9c3817fd53479de48520d1a111a65bb0daee0f5 GIT binary patch literal 4650 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes5.png b/misc/avatar-sprites/male/clothes5.png new file mode 100755 index 0000000000000000000000000000000000000000..f27da4dac56dd1005557e3038b2f0543bccf523b GIT binary patch literal 4268 zcmeHL>pxU$8(wP+jYF(07O6pnq{bmrjpR6FkCBqGR6@2)Dw~k{ zF^Ez`L~0k2wnN(?GSLBz(-4M?aoErPz59LthWCRH>-Vf@J@z=r5$alitC3KNuPPsoG4;%RFa z4g{%I{r$kTfw?Ck2(hrSvTzDzin|)(jra=8%zjLyO`P{4j@CCw={N)vh$IBX7GD;Vu-FNUQ?NJ%i&L;T1&dSg ze>4Se)^62_|5np8=53bp>$>Z8q1)3{MK+VcT<#>7J43%yjLQzXe&hua%L~nP<_wqi zSCUP5JJK^~X}3j7B)WFoT{kUH+B3W^+%yQXW6at{htqBkjrf)8zp(yMTA{C2razW& zG@07ZE3$36=wm{Y)!*GcT2N3h@5v6Io0#mWePP1;TK&n7=C0@G=a->p8Zz9pM0M5q z^>gQfbCrL35qoI|>#lNFI89a0e70LGyVltAZlqTK2!keVi3?u5s@Qx^YeeI_$sknh9ca729!rqm5+IPjzA1gt(;EuSxIl>b0Y$)N3WbCFW? zs#6EBkmz5w+H3lD$xA24$Eo)kY1zs}bew4FZSe;P_iE#*Pa*%q^ziTywY`4*&=F57 zn~*!=5ab!H-odq)zd`8jMC5uK*FL>T=*=Kwc8Yul`ljH*ijmrs5B?$SH*ir|v4pF{ zr#8=p{;N%|(|yc>NVMkfB|pA`L-$?UBijXr9p4KBUIN-jm&v8MI7EKSe(VisU29w295MVx>l20vpe^uJ z+Pne9lvu)zw*hUt@$%o60owaw4F^E$e=9K#AhKF1SAda0$bkj{KqULfE@>d>YGHQ2 zC7?x$*(@azKRNsmR~yjQeAsLOVtZFZu80A&ul%p)0$N{DtGgwjb$CK|2DDGON?U+h zB~)lo0BD7#H$_0LG+vB21KNPw&5wcF;c80ECO~_}Ui=gw2Amj*UIEk!bEfM7qVc0X z4`9?WcPN|*!-?(fgD-*6cZH3#d>pEK>o?X9jLt1-%Q%GLy{#o7p@8;z6cfz^r!js5 z)8Le+R%u}le4F0CT}mSH6>jw}F9LG?i&q3#V0iJnJ)``6z&WubU>VREOF0+2A9yXh z?WGL9tst0?j(0 zc>5jKB0U&xw%bx^vj9LN4jEBEMRk0$83XPZF0u1{nFPG{bxAgd19i{$JZQfG!1L0X z*cn>rU8d@!VLQDt$3j1ysC7i7oB z$EUv*2p-n946MA@O>e1Or7O6gqd{7UayW#nmlGzxGt^Nz|0{_K1}LV`O!8DYjNvLJ z#)ElVP;BrACVvqW>taB{*F4Z1d9xJ#=QyOzOK@@qDQ!(G4MadavJSqz|4-8=f;MRV zxg=>hf_hepSJ+|rCBKvl|Ls09im|2+w5miujdqD9*M)_ zM`oO=x(&ZBST&v5bpJf#v&=qa*gj+XSz*q8U1b7IJw^k4;li9}%)D=sW!Ck62)-AQ zR4}!Bm4Zvt@1e8SI|G{pko0)pWcz~H&3W&JNO!_D!bx!JE!dk$dynad&5o&QPHjo+ zE`4Tq+npQ~olq;uVB860YJzM_?MX)jM-z5AGV z*N_T{@7vQ-L#RHkZdcfZL)&WeK}|cVs=l|=U`O`(PG?*Tv)nMHjiBE`{|&Ml7OFKr zvmVQfw_mA@$XSzKo68ZZbsw$+IaE`tI<`QxE*bOjfLV~@-3~7dPwr_0X&wG@VtOb8 zx<@f*Z^Bg2)fzGt62f_Q3zTJ-nM%amGPJEGCtf}VHoU~jfMM2E2Dm2*qocn(j38un zP8SzK+we;c!^S99KjsUjWa|6Y*-3lcX=MhbdpYWL%E+kw^7Impip}n3?Xn;Li8ay` zE~3sgh^PtR-X$SbosX_^6-E@^Ci9C!_AP* R;12_2v&YV=!1DNozW^paj2Hj_ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes50.png b/misc/avatar-sprites/male/clothes50.png new file mode 100755 index 0000000000000000000000000000000000000000..423dfda443a133011304cb0e40c2ca74d57dad1e GIT binary patch literal 4502 zcmeI0?N`!g7{~Fan935W9WzY$&8&`tGSk8)DyF5*(w1csB-KJ|W@M&-&tyxS8Cp3l zm!6gnsf&p&(dj z{xSJx;87 zrqRNi<*G?|U!9?JPV-XQn&f80x^3zEU)~RUxwqeaY;>Suq?|-& zj1()(b8P z^xIUje$Vm}Hh(ng3{I@9+cxc@rCLRGYIJguNaXKMZE0u{3WYxW={HjKfVf11A+ofp zM8j0=*h<8^*4`JMGuvY&+N#uQ{ZZ92iI})21$V!AAaQqf#v;~QV8hWY^!*9FF)!g5 zK%juPI%N@LP(tr3pJeE|fK3}5y2jXh!Qxjv$LTVFJ$P-9zzVtxJR-RO2RPB-q8y?i zFdB5|>eyX$FG*m~7q8zyJ^@5^jB(FklQGxeq_(901@!vOn z3a}M-M5=L8wci7DSB|xAw#AgBj>HbyX3XgY{2I{$tx4?v-tTJ7AZ4cLZku}{lnOSr z_z2A^GiraLsbof3hm?@9(t2f`#3)zY^q8$6i1d#f+ZlM&5(3=JSJ>M zj!31qE9GwbW3|j}!uWK!?NiGP`sslVqm9^~k&v*@_vFyS)yk=pRKf%+BgLqFBjGLI zbYl8l_XPzH`MQlJqLXbNT8_+j{oVqfctf!xFy&B(KQX8GF}ttn$KawGw_NSn{l?Rg#& zL}epo8Ag+RrG|xkS<4I+MvlDNsVOCw$^6qMdf)7VJF^X_lFlMInMS*lY#5dKB^Os3~fGCqs2 zvVqh*4IJdWgLiz|f`st1{b{6q1sU3>@Pf;`u?O_&Ht`&;n#Y^YbcfOFszNe4ypVIa`5Tbv6aY89TWD8i!GpMrSY>)Gg}UhC>bUA0;S@w9Xv9BJiPrv;sFalZtD?#*CkdEf4of z7cP*;VOq%=1-&wAh$PSTOl0nZ5K=gfYYC-p|$UP*JgAe~6| z`}pjnO3%j209&qj^oz9x*V-VPl(F7Ro^$P)GgDdAG=eu%{qmNRlM@yxCcs_67UApYk4r~U?DYZq4l literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes51.png b/misc/avatar-sprites/male/clothes51.png new file mode 100755 index 0000000000000000000000000000000000000000..83366f2656dc06accfd1c00870d291375c0db04a GIT binary patch literal 4584 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 HIvf8x*zPxb literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes52.png b/misc/avatar-sprites/male/clothes52.png new file mode 100755 index 0000000000000000000000000000000000000000..c22ad9eea2e053fa555142f1682227b0bf469ef5 GIT binary patch literal 5170 zcmeH|`#;ltAIHC&X%0yaakq3CDIG+G)TJ>ZV^mI;Axn*HOFSO9NO-$?S4G&zu&K9{2(auyV2jfQK21%co?)clj`k zX9NJOYgsuVZK3!506?wH-p0x;8b3AA9eToJBm8p?KOhLMuRct*abh1hTF)(%m+iUt z6ngn>Hmdw*L8pTMrMFHt8&upoDzB|qvHtMb$^b{HM{mF0`6%f1!x_D8^v`uO#JI68 z0`Dy2d!q$6N7!gt@DN4X^WBO9K%g+W^+@#U!)g&$J7LuYt1eh|!Kw>ZUGV?lg3l?? zmf_yGu(T;sA@vdrWey`b)!r|K$yC!0*Li2;k{m;nNP3IqwT*DLcVh^VE z_gcs?)RW@)aZ7J!m$j>!qoT~xra~s^Z5nMqI9bLqX$`!Rr)@36-v(+#Oq%Z0Eymg; zX3yCY)P_UC+r4+7e=D-? zQli}osv0Fu&595tk8G~^2K4J@2;0s0D-fd($JE~+(@vRHwu-Gtuh_M8{!_8U(TStc7{T}WLSHZa>w84qG6bM z+uvWnWK)2gJ161--Ov;{>RF|}NCu#SH0>h@B2#U2u-@mFxd%3Yr$uvOSbLIH3IU){gz+8)l8q zJ=anBpXwU!y7g|wpCR%pZ(lkzJB1U(Q{ zYbSWyuoXiTZrxH+w7HP*fTf1wb*;g;h|eRmi}(VQgnl2**%9X>O;^5F#Tun~2L_Fv zcdSQMe?k?UJxCLe@mdKjioBZUxY0>=fl&fsN+8%&Caw<)*`1-UmX;RTb>#Omg!$`{ z`M*BJM>SB-%zWO4?$q@256EKz_Cg!W$F)!Et8a(&F8f{Z9~NX~B{!F}C2CzrZMLwi z%=7w*T}+xKHnm2+%Vlig_oO^OL3U}*;e>N%nZ2M1#=O1qKQs{MgR1^Ay3c$6>+`pe zj1Q5~a?~UBpI_1TWYv~bTaXihjC?qP^ zmSXaL11nn(O`f|91lH?|2t+|)j}?X9+@vb~dB9+0yd1SS_6rko8oqDgm4`^7Y~jdC zvoGjo7<}igvjH0%qhm@g2aS-H9hKuRPxZYNEnnuS^9NZ2qB@ze%xxB>*0RS9_w0tK z27%3gM_~e$49Neu3OuNNhV62sz&6=XZftKk$I?Mx{H22~t(ekPQ$xO3qk^;@ujXXR zQGFBTs9xBHE(Q!!Z3V;RSeMTkK=s~hgKq6KH2DwqzUsuGG%5CRHMZM9irvZF$=V{t zmQS3{BroD|BITFjB=xe=sH1wItyzzlfX=b9d?OY(}xhVD!UQxvU7x;k?k^>?5zD(Rxh?*>h@woAko-|bpr zIZINQGius#z=Z-^I!tl2%7Pbz0bne&&qI7yS_6@8M%Qsks7+_pB0+XV0%qRyx7<5` z{QeX`zVGA|Tv4LnBlggKOUWXr?t0#tp&=2Fff#I$j@Ni==2#ql>vDu7}3`S_lbK-mnkZL37rwZ7A7`l=GFY4(M>gHmib6E~bA#U{J^ggHpD zzNQ?~PAT@JGcE5gDb_Q+?>1J7_2{+L*OOv7gkXK?B0kBA{IKv9sLN@+q{!t&g`Pk) zWE!T#^6bsh&mz&C8sOiO8q#j^l9<^2{sW_?$sD1iP3Qjj1F?`hQmB#?0C}W?UWAnZ zfpj%IV=cHPSpjL)gJE4l~Q7vDL2EUgYzRAq*x6XY|>RpdSZL+20MapYW z2sM$Yr7v$n2C=v{uY3BjvqVbVIXKwNkBV@kq?J9X^Ph5mmxJg*$1Sq$r6=zR&uW-c zy&M*BV>+PuUq&=zYh(^)v&%>5*L^7ck7XXpJSfyF%S{G7?Y_Y;IMdTXZ4r-v(gOZo>QRZU4X!6GmP2 zp2cpapzI`=mgstHFADi;YyQoTEPg23zGuTB S3!4T2JnU_c+EiNmUi>%nacXw} literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes53.png b/misc/avatar-sprites/male/clothes53.png new file mode 100755 index 0000000000000000000000000000000000000000..cdd2f08f290fbf5bbe0407925aba07a691d8ab3e GIT binary patch literal 5383 zcmeHJcQo94l>aHwgA_!NAbRu~y@yes7QICoB{B#`FA*(78;mw0Mf8biWAqlC38Iej z7$tbaY8k<>-oAai|Li%td(OW9_MCgqJ)iGCpL0L=e$V|R{br}|H zK$8AvQc+yJM0d!JTor0xUF#PB5Gej7L6ep6UrbeeQnF!OprkSN&<9eSO`yui5(Ai4Z2k+@t!p7)D!;H#i)ght|L)l41 zm!m6XA`?wlu5s_i@3H;8eJg9CYB4lCz5pXtoh#Q1;sX-kBvMJ~A$KQbJ3taVNlOKE z8WwblvnO0KY-{A%kwm{D=?uttq)!!n8&C^P)%XOcJtm1pXW2}C1K^1?^}+bk|7lHv@2^Ojqp7T}=>RAHXH)&{J^f!pr-z4E}U2p|r!bk_xH zP(bGxBW*1}MF)tRB*qB>zGPkH2_!%h#bEV7OT4(tw<5=bMc;cm)ygFwm6WG>|V>D)&LZ5&08M& z{;7@jyL9y2-1^$utX{8%t@Ds w9vD1?H>{q1HIpO&C_Enx3N&6Tb@{`}YM~)0i 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes54.png b/misc/avatar-sprites/male/clothes54.png new file mode 100755 index 0000000000000000000000000000000000000000..69350bd8bbc75a7e77e3328af4e45ee98928ce30 GIT binary patch literal 8599 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes55.png b/misc/avatar-sprites/male/clothes55.png new file mode 100755 index 0000000000000000000000000000000000000000..91692948165d23d9c7c832c5904a34365fb73631 GIT binary patch literal 4411 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

O>8uO&q*uD)i_ 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 GQU3;gEaH#= literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes58.png b/misc/avatar-sprites/male/clothes58.png new file mode 100755 index 0000000000000000000000000000000000000000..89bb55502a0971dcec5d340e50f174d5b5d20ed4 GIT binary patch literal 6536 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 Gp8p5=HdJ2# literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes59.png b/misc/avatar-sprites/male/clothes59.png new file mode 100755 index 0000000000000000000000000000000000000000..379c93e83c22c2e20be0520e09eee84a99cbd8a9 GIT binary patch literal 4929 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes6.png b/misc/avatar-sprites/male/clothes6.png new file mode 100755 index 0000000000000000000000000000000000000000..e0a4b935593d54f4ed2d962d6a3e5e44a8d41cca GIT binary patch literal 5739 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 Z*>L82OPbX+FA#8f9PrxDa5?$YKLGH|;J5$) literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes60.png b/misc/avatar-sprites/male/clothes60.png new file mode 100755 index 0000000000000000000000000000000000000000..8d40adb2cc9f9ee3b790d14e54b5c2119985c837 GIT binary patch literal 5608 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 LYA965nT7lZ8z*N) literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes61.png b/misc/avatar-sprites/male/clothes61.png new file mode 100755 index 0000000000000000000000000000000000000000..774d3b6b2eec2b6f0977d059c5709320a63db4d9 GIT binary patch literal 5349 zcmeHJS5TBoxBUo`GXesFLy#nr!y$(ujU>rAhXE0ZIt0N%vLIQa1E^#qOU`jXl7Ip- z1YrmQ0%u4=94?+y|6l)oxpg1zdAn76SJ&!?UbWZW-MwNT>SuarHBb8y^o4b>qZcBoygd z;s%m%ic(c}+8^P_zJcXcA>}YKZf}5wq|TYc?~)4-I0==PzsK1{+yUSPOp%iSUAj44 zBDbTjsJB$JtnuIxcwPR(4^+5jSoY{f*Z*A1y zB{hHlzP7qL`=C$N%HgwF2oBm~*JXD3_%u}h0(&LM9qsv@~aEBDb7BKW3#!yO|$`>Pl8%@{DD{@XRK-pfB)UdE9aFZ!E*w|B}t(A zks@Aj^8FGUCxT;bUK(@%t`#f*?6-P#f8`?~fV+h+kHfC^lrA;%?*edFNQw^t*s5_0 z8Go)*LXrT0T7H;7wF>KD_btILqTAg!=DW!+?4=@9x%+xlX;jIa;kSM5`9Ho?<%=4v zW)rX%{;JF-(PiKkmFi6;)ML^_rQl6{=0K9$&DR!2N~khOLhrya7lY^c%A6~KgefcX zgri%FkS>lJG!%2wfKxkJQcKkEl`+Ufi)~-Q7hfjYTB9XdZV(WAc@fp7DVi2mYoPFz zq8{8_BFz$^@t*vPv%hF|B4d8e7vE1T3h`3!Hola*QO_kRf{`L!KW`C>_dOO78t7H6 z`9qL2)oHkf^CLz1086#$M}pSaBd75i7$IGldKak_AxstIz^3d}7G8DOj2#p~b?LIyC3(QA;e7CJ4GW7`cjA?OhdLWnJaiw<1G0D*F_i7_IOb zetz_Td5vaGVvWcpQ%uF=L$={U$vb0O$wW)ligyi$RR+-|^b$|AWk$mpA=-r%@83+Z zxG}k5-K&23x6m%UVb{y}Vm3LvsrfVGC&3|%f-;IB92o=UW6rrnd<)79yH%B`Q^Y(K z$BZ-4XgSR#vFonC!#fkA$a9lC7*MDD~~ z7a+*tL0KO4G)%IOr)Ko~^JfCBnU`#>aSCOn?_|K@55&#t3=h&=m59-qJ|}Pe^+-4P ziZc#EUoGC;<6q%tEt1e_7Im@qC`->sH!s&JHz?QKZkMXuDMl2vtG8O5hf%2@AMjf9 zYC;poZXh;{z8ftRlNB@SD##vH3YB>jvc79ogLOVB-p$PIu!ZO9coi=Owr`x>4iUaI zzVtjRKGLKxC#s|1CPGn+-IDK@^zo8s6Goyi24I_BWpJUx8;6YLh~(x8`48VTUTaXt zyAN2SxzU~jo&z6vhH~o=HoQuv*PFm`eFV)cZ5;SlqQr3+Uys85EB=x{c>0+Ls2M) zbzotzef5F=k&n%C(Bu&!r!J>wrvz2CE4Ays8$F*lB9X_RYa#CUrFRhg!(eSfi9GL( zh{w{$P<^m|7_@$aOV~*`*{ouwy0H*ehIQCuQao1l%|k1q<)s(J7A@>Xq`Mji8;A9K zy>jg$m%uN$uAHxet|owD_+30GL2Q^xm=*r{NzikS&IBb{l*@7L_Z^k^{ALvfmBg17 zFW0&&INSz*B~@@>H!{bP$K0tRABO&%{zB}q?hw}-O2Hc$9cdP&l;9m>&N3mIAqkt9 z2m39lovEd(E#^Q)^<}E=KadnqEE9SpKPTNH(V{dUdE7d zrHh?|=oQ2YIXajrQ+UwEJMi6D&tYUSW2q3GplrIbPK@3kX@9EF2$V3!-`%H&-Ay11 z>|yJHatcpKO~lNCtp(Wi_O%3bgHnDaw@C(a_lp+_t~E#SmL|37Q0gq?$mTL;KLdG+ zDaf{qhNmPa`KXq0=%zM6x1j5;&xSv`MAqW^pTso^v%eu8@~BJtc*Ej8S%YfPPh(5I z83E#2sEe6v=V+w9c$xX=CB15+4XLfA# z&4n$N>K)Fa5Uh#}v9Bs`qL?xmUd-~%2duG1dwuTAnos*wTHe>}JnlN_y1Bl1Ki7&X zy)0urgX#(8_qk7$OQxT8j*it)!WpA{sMhcXaPx;w`KC6P;-RroIVIx)<3r;!W2xQA zg?fjXlP43qtif%^62HEotlF@bibEYJ6Fd{$Z?4~5&LQV@Sf$F?vdxq9b5ENJJx`w< zB*7%XB{3IO!%XwnZ)}qa#)gU0_qH{ukas$8h&|YSN-0W{*KY?_xV+T@S2wYwOIUVF z*|}%&!5^22r|vvsgR%)fQqA7a*2po+KDTnTYSAB2oS5EP47$)n-JyOfA#V}*;J|pu zeQxvRR4R0TJRb1|5fUnNI&Y79-w?dvG`94J+H0?c#(#NI{VHxlu1#*tdcVnkzZSJd zZ`Nd%T_tPhx#hnlk4v4>N4CCg&8}>=_GsP>YOfD=#cs0ZN{=lZwg+Muucp7{$|x+f z9|U<}`>{t$j0>T@yq9Cct>0n1yA^HvZFYysJ1XD73(?<{tZ?(Qd-E?Ib;0rvCgwG< zM3Ld+xa6ZmYVeK3ti<6c%Bbz!KNMwTR+M}%H!q68;dUd^S{_Q`v>;XVF69AaJ zQtbLQu5Bm{L`}swVD8s~egdln9ul*3FJoboCz~*WhA!tji1D$qACZuV9}!iUL|u-R zceI5MB_X*~3?(a}qXuVe)J0u6dt8}+EBM#p9oS0c*>mpUEIobxozOKerN-@cLk~*8 z+6>JBC@TXrGyowXfQNS-|0w#4sLG5l{(*X7qSOq@{R?TaLl{*wS9OiVkllq{}}b_y0*)bl+>fc0$SmHvnO1P^u@ z^Kd|T5m-KG#z^J+S>ev8I+=8Zo_&=Y>ZhZhk^53@gOO|GtI({S4razBH{`byqxTrK z>&G2))}O5t3`pf8pYB(R3A$lLhCX2S>=u9Yg={bu7N+5xG@aw4Yor%2jW7yVN7U+= z45$H5fjtgWqcmLoVKEMaE{53J9GD|J)JtomcQCL!1NrdVKe!txfBFO*Of7AmD4bxX zht3`4NvqJajeL^FMGCmx-dpnX_PHp={KU?aGFfN>l6aOAn}@!f!bEgT)Azg^Pc;0j zLj4owttnH4P3X4V4ic~{&wG}ct?v|P7_WjC##*h;e@)c&diMQIr#}fq3!#r58@v+b z`)jiC@&9wO{{zk6VKj1nMb(a!1%XBc*`w#sEHpH(D_?@G3GjO;=KI-a;PClyXy=Qo zoqXi>i~WNSxFG8GV(gSx2kx<+T@_{oiF2p?`%n1q&*zVm<|LZ+g6WF$pi`&Tx59iD zLb%7t5JEy%#>BbeX~oU+f`rBpS{Z5$@%e0?LJ0^9t%|a}DduNu!JeUXRrGlWE4Y>y zR0wfrgw$!do0X1o7RJVaKq7fjhhT~6D#ID!=otU)xR^F^5LkZ8F>A6i#nLF9x3n-` zoR*L<^MYb^yz>evhjSENe0IL()uC&lsAXEbQI}$vU0^IugNNt(Fp2dl?=lX`zu+1$ z?Apo#<-Dv&h=l`wTI1y#y_fHGH^&UmgdEGxH$0TCO6eD?M_DImN)lwr zb>1L2CN5xIY<`MsShDOV_-i0fx-O_9AX%tfGziqSvtzMQcASH{9nf@yrsE5dzFoDn zdLclw?Ltc8ortc1BFe396i{JG>a};Kdl`Ohul)(rZGF)$NJ!X3jG1j5Gg(@=I4Oka z>Tb3=AILtv^gRh^)bnKAvk)$)s-q(${9`(*?fQ@oecxwwp@MU1hEdzf0|8%0WnCtC zbn9U4f|oQjKL(*7X`78L0o+;f_~N;Y+|01yb^Qq~pgWg#)xp2XG9&CR&Jy`|#N72K z-@c`+i#lFiSu4>t`FW6`WWD23h1hncGsJ7 z@U%aou!$~&$XbBRDAUCH$Ox61_Dseag;^(kF(XRlJ-;Fix<0l*k{8Nfj#)5^TU(2n z@Ao-!nrw@>fmI?myNbmerY>XI%BSLBwr^aKqEtTC*D9`rrd@0`DrvWj?iT8#6iB$U zYi+5(A9TUj!=_+ft5M!ywn=NPSqFYh~>YZTac+KiZuhyQu}KH8lTox%n4xBe}4 z6BGnVo#Z|mWihT->df4mq`&;bsp-?NAot@7y32GV0;*!0&}hb7**DL<=||x)MnY13 zFw`LdIlZDR6nbInyY@P7cdKdYIFDOD^?BZ^ddiH^>lk=f0jDpq{`^aCn=2MH#wJSp zG%ry+`N<=@5;$;sdI_0@OcmuEAGit?C(nw%q6EYU+WJFud=S?@5`d`dsa2}lzx*#V C_P2Wg literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes62.png b/misc/avatar-sprites/male/clothes62.png new file mode 100755 index 0000000000000000000000000000000000000000..979e9d50d5b117f7647cc1b372d81a9bac398e08 GIT binary patch literal 7583 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 PRsg!1MjAEhPA~oisxpHb literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes64.png b/misc/avatar-sprites/male/clothes64.png new file mode 100755 index 0000000000000000000000000000000000000000..a83574b5f2d365afcc75f3582e47ff53857dabe5 GIT binary patch literal 5378 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/clothes7.png b/misc/avatar-sprites/male/clothes7.png new file mode 100755 index 0000000000000000000000000000000000000000..a32daecc2fe2bb4eb30739da367beb10df4607b4 GIT binary patch literal 4850 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

  • }o^Nh09G-o8#|NV`(r`pF`b&r+0vV=3Q@_y#gR=H&Ep3CZyP=5{DFr~d=z-BC#xF5j}kBpC2Pe0^${exD;`1+ z9|GhK9b@cH+|)p#|H3!|VdedG_XRL0X35q!Q3?Y24cybPbMkj2`lWQi!yF>0d&;n? zEGTgqTAMyo_&Jy`Qc8;4Tp8P!u${fFNnc=rk{EE|Ol!}@(#UDxmctnBT$%Mo#S}3YDRE~ zA6quKPzqV2_LQfSZlZ=8$Z7V7W`hIen(LcxNTnN@ zzAPv%YHP0q0~_NGd2|`~K}MivVe833;RF1a z?`2cm>*l0yG38jg58pnag}**FFrO2xqqf=6X`siU8g87kW#%ldw+!FGs_ZZ-Qjfb6 zy`TSV%3P}&icuLO3kkm5ESy(U++g~Z=vh3Y2TqB&CdOJa_=_!27Pif6qQp%!_I}o8 z-7Gg;(+!?|W3+IosM4QZy2g9x!k!}KWJO2SmoyK|O><%-z>9LQS&JnAgm&_N} zDI-UWjAmCBtLNFGN8>#4&7~L#Cf!e*AFkPa;#=K{s}t>Ta61J{CVZtOD}9W_6Ejx{ z9R@Kb>xlvWkDDBbzHzuu4S#_3#WG7wC0AkK?nvEq^i#D=KoN=?>v16Gb{${*BG-nl=^M%Y#4yzw3m}qV=Vf zz|P~c3dj{$YC<}SnxTn?vRJpfWr|O|GRt1S)nS`|y@d*>UDrLJS0e#%8c*!d;;)=m z01owAwa-n_D!?)g{PXI1+D7;@RG$T-E)^h(J3GOduLwzyyyx|*vloGk^`JJ0u{v7n zcbgN$E0N`&SLr>={(HlQ7l^RU_P3`SO(uWi9hB5ub>@`S`=L=dd*{FxK4>CGoD3 zj23#N|8h=oVXCG6r_gY5?~g}veNGmOPf4@py67$}7xLtR2?kpM+PeueJ5TK3*{NI9 z#rUjbbxxdm+1j5PRT8u4((I*#oS=k(?~UEh$ls6dN@zW`u|0^wbBKHf20J^bKG8cz z3@|c1rV?C9QG;RdSY7`VP~~h}P+OnjQ)L9Qv%_lD8kXjt<5K$~Z*}@#|4npNw@Op6 zC9+kM|Jf&160A>m-sX}ql+++YPt|cOjMEHY(qFcnLStS@N^Cke6rdWH=kt=60~U-^dl#mcOH1t6(^sMPghN xk=%yWm7&O47U!Wy+qnVJvj;FxY$YS_uev>`tDsAzNR*^$#n30|Nj6 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/eye1.png b/misc/avatar-sprites/male/eye1.png new file mode 100755 index 0000000000000000000000000000000000000000..a5544324de8b75844d8f2fe01eab2aaed1a12212 GIT binary patch literal 3815 zcmeHK{Wny37{B+ra))9xUPEq^A~~@X4Th^V%~g5XNrj}uHodL)M97s|GSsM~L#Eb_ zq(~~;Xf&kFOOmZDZC<95(ReGAVZH6`KiHr4oIPiLc+U5EzUMj5_xU`}^Ev1Fp7!x# zFH&Ek4gkO+58Ryt03iRHAPdMFqQ?Fid4SOz_6FeAb7MJaz+5*^Hvp(Ot1%O-O4^hN z+&>xsG#`Hxup#_p{>63-gmJITqyniQ`%Oij9Z*^U2DxDgVjkaj@G>%nIPu$chKHqd~oyt&Ew*4Op zg(8_JTK$vfup}|5|CN>aEI&|*F$nfV$s)!p66h%I9Fj?Eqoa-yQE z*YL{!v_`RkE0NDNRdFv*uC_%WM(DWI3Yzs%W~%rM77Buk;~hs2($LX;g>)#Dg76=G z6-It+Uj?c+v_i0KU&EP;gWO#{4IbqESoy{DbbA~NG91I$0)A%F_nDhM)THH%?O zeJYxxwLUrlGPAqhi(Ifmu}y-Y`AQA`TuV2OmJ$HPDUW}O!smzlppy~|!;Lm0MLm|- zrh>~4C^0CCIbvm#ILH}|sN9Hd!w6wU)^rkRJ2EvWsMQ6*y~{W-jAvXtO7UHTVwR>6 zvI!X9=hL8V;g1m)oFC2|(nn|W#o3r22`P5%G7TEKtf9~XdW^Vh@p(LMvuU#Eezjs) zpCM>2m&^#KSal`4%>pC43)OJ3wd?$sq%*q?w2EeCCfI5%-srSPr>^2jhoye{Qq(%A z+RtUaKQTUXZs<+xl$4vxlPa{hEyZIMvF$-$fCGv?X}^9)Pfo1#O;Y@qj~%I%vR8)J zQz;j$s7x$sZcDz@5nhx1Yg>T1`&5XDwntxAC< zcCesSf|QbF+>RNI?tmN9)5?!P)*1-aDVvUBoO{)quSS6&XNs`9Z;sifI-bFr$cI13 zzwQgeVbkl*2ID@YpRSW zCv~Z4Fq?MA23#Cvl|i@3Bq7y5Y}=`dmz>|~kfKRKQoF8ex(c&gdaE4~l4{UK|FQAP8U6XSEB5@O2I>)5giPO7`|1-%VsD%snuV zAi?;h>ww_7!oFQl4jK8W+T|)Hc+Rjb65d31WrcV7{2Nt#UKVCX-Hs6_O*|XxV7#%y zBBR!Z#65GaWg1uW-VlKps6KPv$Y6*EV?-;!V|sQ;El z*tlA7QiWfaD}%u>czjnZPDr-TFH1AQKiA2|rw)gQe|lsPTQnTW<@V=R%4msJPnX+V zuFW!XxYpU(c_<_+z=9HJ a9(2pUzp=`H?Q`;T3V5)*+;45zbK)OV5_{GF literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/eye10.png b/misc/avatar-sprites/male/eye10.png new file mode 100755 index 0000000000000000000000000000000000000000..7dac67b25381e7a8b4a019b6918b2994a894d26b GIT binary patch literal 5977 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 B>0JN- literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/eye12.png b/misc/avatar-sprites/male/eye12.png new file mode 100755 index 0000000000000000000000000000000000000000..ada54a4ef05d617d463ec5df0e2f164f9a11f83b GIT binary patch literal 7200 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 Lqy71s{geL!U>(f{ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/eye13.png b/misc/avatar-sprites/male/eye13.png new file mode 100755 index 0000000000000000000000000000000000000000..e0d459ec6b509cbf912a56c6b63973b237fc6a2a GIT binary patch literal 6304 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 GPyY+MWz@3( literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/eye16.png b/misc/avatar-sprites/male/eye16.png new file mode 100755 index 0000000000000000000000000000000000000000..4cce85e06c8d9e3e67cde7994ecc9d08d518609f GIT binary patch literal 5273 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 IP`i8o1a;HPd$C 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 Hrp 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/eye20.png b/misc/avatar-sprites/male/eye20.png new file mode 100755 index 0000000000000000000000000000000000000000..63ba11c334dfc34cbc1404655f8e4fde31a989ca GIT binary patch literal 3985 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/eye21.png b/misc/avatar-sprites/male/eye21.png new file mode 100755 index 0000000000000000000000000000000000000000..31f40b0d9f88da0bbebd57af48af1501e55af53d GIT binary patch literal 4036 zcmd6pcTiK?7REP%5PFd!V7MSi?^QY^^ePZc5RfJWMWl$*1OrGDFNjDt2r9jZAi+p4 z0)m7lH56$gAaF0mptOh2$DRA;&b+^L=FRLq`~1$Dv%j^zeP+*!J!hs*Ps2q60H8NC z(6I!7?Ed!&p*(zpX;6H3xKMi=*jxwThV=JIHX-NR4FHY#WjOrYId?BVuj}q!-n@oz zIIp*_m)qs5t^fp#VXe>zt3`Ho(&Q%0I0p03*vpa)!fOeO!>}d_it zbo=7~z+ku2gUNvHLq0aL>_otO!Zk(*xT}Jap7VEg0ZJOMx*4}BgAoZJZHRO;0Oi%7 zk-$V-0U&fh+9D=W1W*J6#}0n}0B|QAu6f24LI_ANT-pQAa=$ z(OIe44go+XJ501(n|rhAq@2ne$x~e>{XEJ#w3` z$$)|-PJs7q46DUy<3t4m8Oyr}UTXvBy1MT%yF+N+TKfkG8qZ%*_pk*FS*q3DdsHn7P~W!C1}9gr5it;q>^jBDlOU80()^* zoI1&+>&593y5csj^7AF+HL+VRJumzzSi*E0sTC>wVZ2T}+6E{Sl-YEwlr90EuUxGRx`qu zomY%F=b7f^=P6y&WVNlIW>`)Xb8wc=Eusrf$lu6N?v7wLG|nx3l03lW z&f!kF{QQ&OYvze$9<$V5WPjJ9{-@MWh~$d)=Ti#hz6MfMAa+1fT-4v}!+k@7`sTURID8uE9 z=mf%X?1I&()kHo`KD(*9%2t_Vkw-3fPK}O#!?pa?w5$&g>R=qr1lVd zp5OAf^yyHPm2?7>L^{GrwKobrUTRROcH*BFaQhZ5c&<~jQ|k1cM0}sx(?Px8^%(D6 zZnK*enDuP)YiY`SE+nqg^*&lAa0HBmKb?|#?)qkIakdZpOXGeb3{HTlf>c(Ww4;;bQb zOZlI;x46P;&hq&YN@5w#6BpuycIH4=zbR{3O{z-@c^&fmo;nqM^e96y^a3>W`b%F{ zmGdf-8H7ixnjvpCQx>Jrs2--C5xH61i7t`W%UG+-0ev(F8h<@vBPK4^IJ`?TRYNk9 zyKSPQZqCSW%g25?sDBHaS((|qQb2sZsW6{9QK_p^4`4fRqveRPUz38fQ?jE+P`X~uiUpt$;EQWgCB z#^KkebiV1N=uBp!Wz3bIOBgALY7|LcQ5#cwE&p1xP14Qg-5?5!GQ4VhN?B60O!3;) z`l;QOjp!Nd4DD<%N19ZJy?0;^p?NbhpS@6$MO-CC%Ou9^?885_nM4cN@10pc;eRHc zCa@XWj6N;Zr`Q)W0=E<8FEaOfrUN4J|@C9aVb`){trRZHW9c)&b&v{z?C`uM|_g~hG-OFeG=Zi^o$C9-T8 zQi@VPrZQZkA02y1KXv})%GMWMqEu?PFtH{A2gg5cPBL8`iXj@C#(|B7?v?jAQ9dsLX-7(y$Bx#n#7Aav1NUR_TTFFv1|Sk^osP>zdvf5;rG@FoLeMOPmy@& zRmN`K3oe(95*S*s*oCeQo|uqi<+wGH6$y_#5LRc{Q6rqYcE{ z%VUe-14-!ho_pA2Y)Gi&*KtSU6I}3u3t{RCqu1JNCco)^-GjIV)ml}8-TEuP^$Ozr z3FIqe#&Z=1&n3Slwf&?4^Y)rYH5p}iI}iM7P+e898)=a{ONlVCSr_;x`@zs)ma_Up z-A0fX=?!UXihUx~S7?vWRWs@@v|3tgUhA-_wW2)=pNJmRwA~*cSsTB7rO`ioqiU>;v!A$?zz9E{ke<*LMIW`Cbyh=Jc}CNBZ*eyt-gBu(FpFdV$$nQE2fI}0_Tcg` zp)aj3Cv`nFsloGB?%q=4GUsz*TXP#v{o4RJnTwm}cUGGG$NiyePp25o=Wg-d7CvzQ z`eMtfH-9IIGb!nSf;??w*F{c(c-U|9x)@lR0uXfOumg<%;OoKRy7;62Tyg|JB@F-$ zuLllq^Z=k(Gt|*W1dM&2=%x?XV!~Jq2fU|*n7T9fL!hW=XfK2{$CQbycLx>W!_ZNW zY>a}2)_;y=VO9m(Lz57|!~`fP02!H<7C0Qgl75IBDg0_WD(Z*cPp6|Yet7mb8mWk2 zF6okeY0-DHeQs-2Y-&v+u&xY8db+qUBQ{NO41)o@yx#`|0*?KYeuR%=hxA7r3v*t1 z9=D~@7(G5Kp>SAHeR7wsT8Q{Ab^P>~y60 zm+Ze){-WK(eIyeH7 zgCIkaI0VT80=EP~Nyo0|*8RDyyQ{sc>aMP@!+YO*->a?{d&x|no`#bK06=eOpkoOD zB>A^VMRBr&X;6HBvQYaN*xUl(XX)Q2WKzzr2LKv#4>N7 zx0}ZeR{#RXaaL%A)iRs5$C67GK%5P8)LO-I-{#g z&efS4Lzb9`Nno{*po^m!rJU!_PmFjH6W6sr6Y|7!xNdi`=jhdl#!~qfuDX}9k%}(e zK+Zw|LstUhJ@YZ5qqTizUP>#RM#u*+QB}L}-#Qe8fW0s^wF?4`ly3nfaFCV?G@4=? zrMaVz8CPIgS0I@CkVgNMi^fzK7N8ZJ2rC3ydJqgQQ^X47k^_fsXQw%ENfJ1S-d!97 z7~Eb~2n5(YZn0$|2Jtp7*?TFr@3rNDR{Ou?rb`gl@KPL>}Jw8m4xzyYunwtWdb@)o^|Cy^qcBw@nJTdmm8WcbZsC z(m$x7JwD(W6lgVcBA~=s<}8?f6Lqo^wqy$gVqp)?w+Rm%yUb2Y?2~CsD}d+MH6S4= zlEqh@$-WqiGNJq%XLkYEto3gCAVx)oagUhk4LIJ=Jk-w>1{gQP2fhGY(-D$FbX9A1 zPywKm8!rA_n`^u2oJ1o9chl*KCfWlB#rrU!)@B$JjK&4S?dNd5{2oj!s^>Y6xC8Wq z7LRYO?AIh%F$Q!-lV8@0@-^9QFZz<55uc0)IZR@f)k3B zIPdG_)AqUe%Va09({F!lTC2F$! z7R{mpsl~=GMc$nG+Ir4ORwf!{AR#!+oOBk-6cPh(RT5&3h0BT(l1~}Fc#0Tc9?%=O zX(_lYQG%5>;1o=KH}2wDMXCHyg6~3S$(xg z0@H&00)=a)thV)&Y|F{wJj5A=BwJWT9^UeqMRf65`Jc0udm`8jjSDLB(*`-++1+(UOeH3d%M+{nw1AC709GWBG+_OxRLXN?Bjt+#h zlFVx6QWj&Dw>3%}FMfwLrHdxbC`}}dOB{+QDJ?9WDy6mFvhGGCm0Yt5t<SIxE=3o6BQ&3e*&N1F*tD3mn8Tl1^rJl;HQI zFN^v)T%lFuMbFrs+v2sEhdj0M>ZK)l%5XU&Ib^lv)89=m%ed_LJtv#Uf+s# z^yyF()pSA>Bs$_bwKfG`Z#5oh2kBP}_|+CIc!6V@W5&$=6hgn+lOerd^cWL7+ONzB z&3UzZwLcM|5aAawHeE4Y&$cur6rL|sHBmL`=y~6h-!q)0fK`_nkzK+rVMnmjH4e6c zwi5Va{A*Xks(IT&n{|BM%}85in*x-z?bT|%3S5QoaBW3x(U~HGS*lrC&M>;=`LFnQ z_>vlq=L@40q)NOOKGYHI#E!0Mt87_MtxpYo6Z*@cIwgJd7(*G4El=33mwqfNmsO^+ ziI3JbL)*5~m!W7>FH`TR+#LRF_xV;2oE3IZAI**?+=|$WiH|kD*DaNyA%*2?pX{uk zH}c={y*d*-u!F-^W1H8CNzc|5*FDywCmz3-e|$d2M($Q$ODFuJ#X`R(?c+3Q&*}0o zbGUgp`qh#k)ESzBtQdJ-QxH(P>$t(L@kPV$@tnq-n$nc)l#Ts+rN)}hnr`zJ?;QKc zY4}~iW0&LL<9<+t5r&}2V#Bq=?N06Q1>fOsNYqpzxqhh{ThmU+C1|s1C*7;Kx6o9< z@80=2xq^RpDU+B&^k9g*6!vMjkJ53`F}@{?PBbz)5*ekL=o5qD?3c+<2 zrjxESg+=8d=02Wwl= zv$$E>xe)eDXy;X*pgdypc4QG-i4?PhO1hRwjM>G9f750XFJ?;+-aH#1oJbSY%+rh( zfc7i)$Be?Si1V6l8i<<)Klq$drw}C6CRZS_K)5ejl3Zs(Z!(Eh$zjXB&F3Ynu2L@( z@gODH7gow|nuHA(+E6lun*E+}s$POt5 z8So>74?{cy>IloE;R~z!3>`ncJ;H4SNYX3PTmSN?eOAy%Cun|omwI}amtJN3c0x$` z4CUZYw|US!(Ce`5&1^laRrbD}lieHh_Zt1fD^tM-`lO#2AIYoP1Q~51-g%5K-y2Lt zZ}ukO(r}?+QeP(=Ncs4XC1>LFbw=-vH%$IB1G>lYOR9CM#4DSx{Wq&f3ulq9k=f5w z?7dd}SJaMD2hBTbAJt}860Ud>)`RO`g}Ci5bLA)zC%5Z^eq}oz9?DTxpRC^s_TFvV z-I->a4D%B`BzD)11&FR!)S1`WZ)>e-kHIIShcxYuCPp_V?p|*U$ldCn(BGwqjOaZ| z*-2uApH9k3>W-q1TFtqrp{zWs>36t%Pz3LF=@rRgKgvJqu4HF}hV2clju87Z`|~n3 zGg2G8?i3uZG_Ge4G{|w;c15{Mt)F})GoQ(e^`tIb1hyOMD5!82o{}n19 zNEOU1@?8DQ5@(^yz%}TCJR-=Lrdj!rLA1006B8gO|7}424K&;a^+J!|rE{!iSX0~{ zyM|rr3nDEF`%nGth)w00=jzbsxX>p0f7trN`0tkgCHn3dm3%k9_u+u#jo}6VIttBe zKPi9SI#`Hcue$K%w9@YsA&`Hj_-E+%U>vlMVl@UgdIRQPznu@5RKVspv}G15to`Q% zPndrvA9s1-5$+VY`F|@l4Cdmgf0pLERzHOL%hA7-=#LEiD3ib7=D#cEp9%eEXFsU^ rNA-R3=)ZdR7fOMdoqzyvd`t#lwoi9cspJLDwt4KV0a14DD_Ja8vd#hfFB=^#DL`aRm-Pch1Ax-}{D#w-28Y9M0$C z=k0#wni~LtV_0hx!g`5QgEYAXGl@e#H1W3LpyjiIC7{_c!s7gNtj2Ntd7~VbjYswL zsCYVZ<0umo(f2qkB^mG1kI>BVKS_*y8h5vAcRJ*$=TI$aq37WBu;yafCbp`Vrh%3* z%}~Ko3C&mxJ9YF^WP3~7^qjPIIK7Y$V5P0P%ztBF5CV3>pil{c2AX#O5;(v>3mVL_ z8)Q$$l3A8vnHM4GC`f}p=Bx=VnjL5dC&CJVwmt-n%@DQ*xm3WZ+tpnAc&LN2-t%|$08$pPyPLGAf)OboYh>$g2wqf!1_CQX zC7@*lvX*htVt^_HICTgL27;(ez^=bx3;k1~f^|{+P^rvHC|*caFWjD1%9qC0R{E4E z!H7$OUD=t!IZIo*DJYX$K3tLI)8=6waxol-Y&Z7<3CtA)f^s5`*->h_o|-J+;xcl2dE~;2HX8>-@>4Kr0q}dW`x4!9l{N$c0M(|-!jcV+53Pl%4K{Z z$zZRVfxO2%Akbpuf=7z8&swtiChBJ0+mz22h=)B8YdzCXzC1G}xl5@zr37AF)r5p# zq>3C|DZiSCup<2%W=H^R)Oa_36s4s^dqht629Vda_6>5+0JOW&1783x=?Y0Bx~jC= zX#vp94Hti*!?V?RT(W`sWaE+XMut5nQ7($7h(ECMDP)ANE?+)3u6 zHm_oXrAJJP53_WW%^PM7AC~XVv^kBUwc&JBIvupfocYJ%ATD>2f{Cc4GljE)!2*rZ!zi}Kt5tGrq)32VR)sb#z)52aD0)< zi75Ri3?DB0%Vi~T=4OBJdv!wNo^syehf)ugu_R4+yKKYf<1`8_*JP#Jnqe=`O46mc zcE1!TV=Qeu@#1_LWlj9HYwybdDz8(ry8dUr}Bu)Ac{*0N+wGfY&LDW5lO|DtV1jGZ4|6$ zi|Ib5mD-eG&#hSVSfh&7i(*SqMcxRlXJK~x@zi$Brp*@cXO_7y9cOFX_!wNds{$qY zJ()^lZiXwh2*2zZy?sl(CS#wsCPAa5I8PO>V60$UWwrUxU5jQm!*}PAzd7BaXkq$h z*xgC?b+H*So&rTvyqw!b&yuwCG-Rn^sb#6bN}Y1WY9Y3uPOrvpH=J3g-B{$Jhyf~z za0I((J!(BsNMFclrlGc7Azk8`&y!c98&H3}a4jR}-6eF6sdwRIP~GD9lc6&Eh<&f` zh1&*6#kpic+&@9VSNyV7=X zR%q6%&8zLHFtsqhu!-5S*;lMxncRm?8WTi?5S#} z3xO9TaYeW{Zbp@J7YgjwaJAQ?FR0q(BW*4?ROy#v%g+qel-CpO6c3r`}-O+OtGWPrMwq-!*0CtV^=$` zHkn0uw5Ao>x|OyhgF^PQ_Kqmb;*NETwOqkkXAc;lxKQ{Tk(+S|@g@=7(&?Jg**t9% z9d&cY{@cC|)4~1Q*zBt8rqv?i^EKtQD{HaikKZdk7R#|yxbdO61OCZ!zE6wcajLB6 zR9Tn>+#($HdQniuRR&{QKK!COKcIx#I`?w%IvhGl5#!$>$ohl5X09-(O~x{$M2noUwIP1`ii{OrR&bXdiUIPaa=I2Ldwkv^!2 zw+SU6)2G}QHv+#Xe#(5qP~0r|!52)eQjk!qLcZiYK1!rGxz?1)bRt_VhcoLIpO?Ib zTAf_v15C0ntc2ez1&3NjEx6z6E^~{nJZQb1P%U#Rm8R3PD!J^4ofJI|R`3~dL3CK0 zrV{05>t5dz-=&&Xnj_J(`o5}*n5^<>{V{o!t%+^=0WLqr#8!$IxlmVjRkaf88$_g^ zb3Lt7%Yz_NBrFib|P0g$DI+;@xXbWSnsa-%<+e>ic4GYmwVm&-Io?7rE=_<(@N48 z(wVO_jgGxynmYe#b^EIxQ6{}dlvopqgX5ppL*LZ86?PJO)U^=L5L<}v2<5f@iPz4< zJJD{q(y7?0SF{lQNUd{YPyxfwXs|G zLdvFT22S7NMe)j9g=KAI>1SJK?b^H8zqNR;**CO28N6peJk9b*5o#A?you<%GPV>k zkb>Iiy@yT3hK5Oh8+Rf;!G$ck5~i-Qc(1=@^`Gw7BPT4X*QygPZoKi|s3guGvwdTm z^<2%-YuSGpdXO?;(O&bYCaVH}(G$NGT=zP}owUT0qe7V2stfv)lRPw-qpC4cw;AkB zY9(z?aZZH!iR=@)YeoY^*2-%wY8|(*IH>HU#8u_Kh2msG}o$ z4=~$FEbt>qnMvI-Off4tXEjw-XSDqGm-Y(by_b81bGQzk9CTN3ams}446Y0l`ZD_R z(l^pm>b-8~?=Ls3a6c!uHMO03*BPiFcWLYV?rLMecmVJE(P6u(UG=bJy1{mtk%OZS^U=+7qM5GBp5hA2URE4Xek*tkmOViPCP2q(93_xF%wgGZ zL{E>Jr!6arDlQHi%V8Nc1GZFTv$%j-S(Zy;2e*EnytC6{TG9p^Cj!}%5K_v zC}Xmryrm+Ru@KI8RdcTCzCQvLp&<=`&=K*bf2o|3zVhysWfn$e@^E5ak2^>Xl z&Gi8+emgA~0_+|La6qyW0RK_fC|%&L21>fm-qizW8Nlvl(yRi8B!P?(%FPgzSAlvG zD?T6|#?Mbf`z|UHKZSzPq*g;q{a-PR<@@K)wB;v2(*T_eA%7x;xIJ zbMXedRSc9}-af%*BWEHS#y)My<`buz9=k4=D;N#GFaG9aFXiIYgv1V&=7b_BzpM!f zPLM3HccJ=XBFc*PtDo8eV6ED#;k_7?3hN#=+3inR)!H-2Itj3DM)!RHxS%U6g>0|X zYJ~!zn}vgw>+oze9FwT0Ini)lypUUC~Q7SUDC3v-ly zug$AaZ|NS9=*=wEX!DX;!<*%s6Ew3ytOiF%tLf4{1#!NM7K(#%rG;+`G#FB| z#R&7ijbgVHG)Yi2l(o8x8UDNPAq!M{v|5buo8<4xb8&P8*`v6yAsqvoi1%gZxU9!BK_l=_*}eoJJ+j!k2R)Htst@pQ{aWvdJ<~87foZ^WZGnbcw(9L%wf8wg`dHNyD~sR zz=Nqc;yO;TS>##Q@XZ^r>eM~n>KKip!fX|Uys?IkV#{KKrCO!3<$QcztzNb54vtx;)mZerr~xLP zbQnKxJ#0OePoK|erlGo7CROB-%adKL>tA;@e6rQ(MISG9Ug=iyXG?^AlQtsPDak2i@=gM=M?I%s|5tsM*h?+v zr-i3ITRdBGL})|=L`=*U%~sN_%!qm7d1|I=rmbC_U5~p4(iAf^WC!KuGv+e}GbXAW z&jp;5AQTW@x*Ao?oXfLaA=F$AKc`}wi?%suU#VY;FFiR>U0R)gB%f%WXkMH-fN3iK zOn6Hutl}=89ikzZ5j+VYP8eq{Ox2sRrj^9n#E@4ZzwT+!GDQwE7xSLu4ZZfUcWo;fhwsn~mfJX$-oXwR=c@nsBs3y!jH|I-}13!-XMU3tNwhi8i_2A(f&jmBG_8 z)>b=X?6>J-KN-}!iO;CaXk0EJKV4B;xwH~F`lwUkk$9%9{Iz#YZHNz+vprf2kCJ3O zCQ3pr5EeMhi+Lew7wH64>0o(Pu7A;%(<+zd7fs(s)0)%j%Hwk5who=j^;Ka*#zh@M2 zZ9?~(ZnExp21eFG<*B5xB22SL>azNX@+*Z`S}js;ww?WGJlg1r$q5xHSeeq*E3YSZ zm)9ew@KX%a!Ca}*ZT8-Q*`&se@O;ifDK-h!WNp(Z^V1Lhp~DI*;EX-FcGUl59DQIT zZzD!fx<{!eY6x*2#%I1}2r~=1|0$tHF;Mu8e6GYS@s4QWy&6*{)3FTIOwRNh{GM_e zs~5UT5($_^%$(bejuO}Kiv2fNW2&V2l4#$0RNgB&Y%57mfaiTgo)a5{ z(NIlSYoiDpA8RL8Xa7=w?IqV zPP}mX7J=u{R)BTJ`riIJC5o+wRHUq>+~HvXS-JxotixZi{nAN2IOB@9xABY1{$v;-(DJ7 zxZRhCS?i9)C*eavrM`|jk{=U-=Uqq>msz}4U$Od4_Uch$=GAJ{NaxpH`mI%vXOE&@ zqSBwLI(RPnEvoM)_F1%6KdeqKBcAslt_0P-2zJ|A;K@`bjcwEhe&(bM^k=GQjMc6O zd2PMf+MM7V3-uMzayY-lg*3?s%O`?c)$M~7BNZ(XkU&sy&pHQ1sF z59{7f*oPwh41y-0D0L98)tWx8~jK8c~^5LSS)64^4}7pxPN`N zY5gvLCy_fbkwQ(Cy1wfoFG)U_H~C!*t;_%jI(aaGh5_)Eaf^fXnN? z!yA17sOODzb&vrgpT-)P8nqeqbYiUz8(iIR_>d2np;Oo-yg0w{!=%hFGseCUtcCrr z2cs=STN|*l0&42-@pqyhMSidFH=}{N7(8u&M5}i()z42JI zaIUsJC&h4LCH`~WlXWNB<<7a9`EHyK)z7FuPL6dJ5{c*@5>@z2N7Z+6?{8=zotV4ovn3pZ#~C|1A6ehJKEazwD>qANQlbzZw03 l#6MGdfIjpe1%N`K0_D#Izre~L9elw7Fw!&EErUDW{wI#|zG(me literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/eye25.png b/misc/avatar-sprites/male/eye25.png new file mode 100755 index 0000000000000000000000000000000000000000..94f053394e1bcecee2fc1b60d959e44d0b77885e GIT binary patch literal 4009 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 JE1`CG{|!|PuV(-N literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/eye26.png b/misc/avatar-sprites/male/eye26.png new file mode 100755 index 0000000000000000000000000000000000000000..897f7c44b23b9ffdd53de4d2e1e8a866eb0b0f8c GIT binary patch literal 4028 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/eye27.png b/misc/avatar-sprites/male/eye27.png new file mode 100755 index 0000000000000000000000000000000000000000..ed30887123ecff7c1d3b4d398e92d634050945e5 GIT binary patch literal 3986 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/eye28.png b/misc/avatar-sprites/male/eye28.png new file mode 100755 index 0000000000000000000000000000000000000000..ba97fcdef40f7180b4349656fe08d4539456a989 GIT binary patch literal 3999 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 CrMxQu literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/eye29.png b/misc/avatar-sprites/male/eye29.png new file mode 100755 index 0000000000000000000000000000000000000000..8794f6508732913bbf71a13e4c98a7b63d450fe2 GIT binary patch literal 4019 zcmcJRXHXMb7RPS@=}n{vh|&Z^dX)|dy$S>gg3<|!R8g8>=pZ~0k!}!FdXXZ*2q?WL zG^wFT69K^|0YNEQd~e^Io&B^syUv_5cYgQ7{oix`ckZ0{%cgn^v|O|R00sknZ3_S( z4}T^#J> z?Zz!v00O7bmPokeD!bb5>^9UW4)xf`+k%an*8-Y=Voebe<)dLXjN{9nWHWC$siQ-| z-JKUlo|J@2WHT3|e?U7ywZ!)_dcXkupYM3Vkak; zmzE|B+o86Oz1E>e$X5Gi>%&{$!ⅅcRsvb5Db^O7OqFJ_o20a+qmG&z$2O{r|FN$ zdI$A%qywH2{&oW=EJBoZ(VWFMNjp1{C{w^64}El@*acv#!Mo+X2sJs%J#u~^fb>Pc7^L_r1HTcONQS{KwAKZgtD5m1pBTosR~gXDWn z9=T?7_n1^4Mu}Fd*NkdDOg|i{b6Z3j!)YkAx~We&@=e7-oE{(qlBhYdqWAb(^eI>p z1bKVnSk3v3QsnieEgrymt@L@e)cnYlV(oO_q^NWQnTUg!Mm_1r;Wg%J@9FDc*kVPl zDBWjtgD(Ek*~#pAIfH($xYQCA@>d4S+?l45)nQ#y&7V$F$+q8;lIU!MR$mgMNp*T7sQcm6wzvDbm9YDbnuG37TKoJ1tbv&!3k1$40GK1g;wNaEMA(&7N3&4ldXh{WH&G>sCbq(!sX84zI)^4 zC;vAmXVT7^W(-;n_pR!E%J@XS9YD_z!xq^UhZNz=IZbsM$r*6^Wu|c<=STu)7hFnF zdOdR`iz&<73L%OSy~mc)OPgkxCX~i4DhV$sEi9carL!Vh^}&-%u3Lsy>RQQKE|$=| zPcO47MPFXGU90(YUDF;?2u&Z9IvBOOtuUuIsWx89^sxlx2JY|?44*$-#b>M|6z6V^i}<4>Sh zEGI2zifD`2P1KZkDkVxi3b^wdv;*FG6>VnbzP*mhHTEu=4Qg8XaVAvq5Psi(w7lz5}lZc%X2 zv(vNlxe%ogpOBHsn#pFig$cIsLZOPWig6dNANLG5mL;E~COs~*lCzRCo-1v_PCZ^FV`l^ym0mAC)wOZW@bjA6xhKh!wlSNq5RMWEDF=SiSS4+s8Vu+n&EaSP#6L$NRAFJ{e<=Jff zlTD4#j_veSNhD%`d0;|z5p$~VLi-K0WzL8mk^_mo9Z8H!h&PJplgLn)$l>ms>26vw z^xyHlHXl5^gU+eVY27F$yxdgSys;TO{j^{1>4jVy+1rC{-LMbl%R?G;Pt&A4=E}p& zU}oXSx)lLQXUP=nit(!Yf`HOp$1fb}-_-q{E~+o8D$dHx+SvCiHrIF8_nEbM=h{cl z!R`x?Tu8yBAy9-m4?&X0hiiq~lI`yW-{X6iq@hf3{Z=!%p_Q12)ne01j;M%OZmHmN z@BaL-f^T;v6Q6>=!5Dox?9llqBpEv~9kaUK8z|b`8_MG+) z?R4$g9Hg|F(o1nec~SLJiJPiZif`oJXmm=r+4PSh&Onoql?%}Bv{0h(>0CbOfNnDU5izh& zwRU@li|1i#>iTn2l26~{H9Wks&5d1c9HGG z#h5FU<*KhAU_?Df&B`{cGb+QHgn~^x!mqdVMzqvHJl5%~XqTfy*Qdufu9+buZRYA6 zf5f1<)!E`7RI(B{GT81gz8~coR)bq4k6m2XW9&Nj_6YqYK%7B=!RogsoeKg!+CfXJyEJpVXBm{I?k0wm z&r^+@yUT;*k-Q1b-pba^vCQ7Lb+Ub9)~`M^wl*7lphq~z^h8e8CdiNo@3}Fx8ZnZJ z+!{zkr=df`B)(5O5T0Q|R-Ey3H<`S@ykYjAAJ!oytf(}q;O(|v`)}0{mQPu~w$6U3 zZ11_|zovSWI%3w<@T4KT5^Lvy-3)H33vt_B<<3>a&uljZePt(&jpiz;%`_2%y>~ly zcjnk4`7X_ir`_!(vBL|LB zc9NN3Cz7+0`(hYk)^jhZD=95#_#Lhu6u|~u2841sj-DO$RdTRPhV6~6kK>0jhw?MF zGE(1p-YYm$@!l69xqq+Tu^cSg zPvuNaB~g%P5)YhZ#Rt%W!bNc)|=wK_mahC)uy&jH?SIuw@m7q_00wbTAn=ns{@Wq%F*Ybg-Ouclwz rx=5fQ|(HqL&QG-QeDvx literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/eye3.png b/misc/avatar-sprites/male/eye3.png new file mode 100755 index 0000000000000000000000000000000000000000..bcc7edc82898199809f8a2c0d025d1404d69d48b GIT binary patch literal 5695 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/eye31.png b/misc/avatar-sprites/male/eye31.png new file mode 100755 index 0000000000000000000000000000000000000000..494050b18af56631a3e5e00983d7daeeef3222d2 GIT binary patch literal 3985 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/eye32.png b/misc/avatar-sprites/male/eye32.png new file mode 100755 index 0000000000000000000000000000000000000000..fa896148fa77959fdb9ccd447e86739335ee4704 GIT binary patch literal 4001 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/eye4.png b/misc/avatar-sprites/male/eye4.png new file mode 100755 index 0000000000000000000000000000000000000000..bf2cdf8bcc411d23dbaa436b5db5853e6cc83363 GIT binary patch literal 5698 zcmeHLX*3(!7EaPop{=QCjk&!+TS{BgB}LlmC8fBuhSb;rX@qO4AtBPDbz7uV%~S`i zwxp)0M7YI8YpfV*rlKJ+OH2`7`hLB?@5lS`*6KRzth4u7XMOt&``hQ7ooH`sxnEpS z8~_09M_O4p002PJk18fA?1`;6Y!^1b5C_Y1fYMIoS)l^@FB+G4*#-j?VsHgIaUGxsm4I@3(f~eDHU+zFmATbG z@xSX(i5A=N%`WU7%`F}S!)Fz^RQU95+v}B-lw8nJ!D^);?Ck6~ zeK}j6E{yT4cb=nDe(%qk97w<9tOM`)^2Z#&wVJxV*6n1#*uZ`N943((KYAiPjMMLS z9PwEnZgkd@N~2vR_^f{RWh6c=pDd4`nmsk?m-#W`(7g_&t$If;xvZZ&&%f-)N$1EX z7iT2&S@S%iSLGgPKGF6&e6{*^SPB4r2U%@%Y1hwlG^1qb6gq(vWT^KeCdIl zl{dRt999&YmzEL>IM#0AC2~zzQoAa@AJaggC(CC>jH!_d0fHTsi(9fzVb{q!YKKIe!DnuC+3hHdO*!qK&DTVea?Oo!DJ6{s z4tj-)Wnm%SBG=4G_YZd;3xmX|K*p(&eIeeyHJLfr*iE%Tf@iQf{|`}-xblFT15HD6 zdFfo!ZRO~9?qAZ~>c00FnTa%4o`P#)Ff*7T%8cPnK~`;Z)0>;C$1_UUw&!*^Sz_nl zZ}~+3x!r&->w9YO*m2(?|8w#NlfF*gatix2F&Y^`uJu&-KsE&HmeK!hD4o~W!8AQp zR#g8Sb=MK2LAkBr44ujteDuDwru&mLDCB!PdUkffrMoZa)3?pM5FEysYNA`b6T_op z0v2m)PS79V6u2?-TI(^Gh#6XX;jeZN)!vyTX1qeLhb#GWinDxe zQ((047!%j3P><0?Yg2RgV;3M3{hzAM5LK}hQB?x>w%lEs+bgfu~ef+Q?-5D!onBF1j$~;W@cvcV;q&If#xgr41z1TB4?zR&-$JXhOd2sN*3s3mP56c6-?{{c-LgCitYRps?y-eh7u46PFq9aVXN&K|w2gAVN%b4Fou%xmg7wd2qM7Gm9;Fq9>7xa&D9YUW*O*HGk5ZyYO4WaY+xI7+&G>F>R66{LE0S>FGs)57@B)zudq!MBHaJBqxJf@=`AVjWCb}NB_Krdi>jL(lsLG{4%T~dCcKw;c_emU1r zob>Hs{1Yj^53vCBhLrx5Jzy)x{TaJ0m@%kB8;Zz|E$9 zW8+$C?zOxRbR)zB-pl-T?x;eiB%e6fwv4V-EpoxcyKVCsa!^8^S(4G*UYWJkOln|s zNtG-`QYCMiVg7FQCr#^hqnpApsivK#b4D`5lqIW$(8WY{3^c!4$+O*Y56mSW9v-0m zwK>_Ea?d6rm;aY~$QuLMW;05_82&;a^->6Kg}CmXu`qoqKQ6EI+OT}5L=G`-hrYei z_5;GOQ~NC-;VoasNq5_k$4RMb^_(DNvHC}Ath zd`L#SU^nAcb59Vtsoy3lDb(LG?NxrQ?jX;%-n}IKq>^X!71*8 zk-BG$^rg4LZ*g;c<=1t}3wtY_G9DP^A;d`h0}F=^8AmzaWX_B&r?sqU@|2%9@>A8! zLOfTxy38`S8Ip^3o!c|SnW^nfNsV#yu%nQHk_z{9+4H!rgqVf#RR~bVwb(V*pU)%* zLY}njT~xGgDRLP9I(KPjhlxlwSVgQzj_+Qq@?e+bJbKR8`2F6x^Um6%;V!NY3W_+w zX-2Edi2+yobfcptdJ~DCi)Ht=6da}-C7Rl%D8I?i@zA74O2X{a)L!$&1|S0x10AJm zj5_YfXGV);{(eC%Zu|rYR-Ru07_6H&ss^{EwTL#~!M11Gs4!|V8oeH-yi^{mH}Sme zE6atFGdnYRzEL;@aZ)Qa2!#~U0k;zM5u!Z+$S?MFQ{2{%|5l7iqOBc2Ky?q0_Ml^x zt@bdz6rs~^v$|jDf9(MnKNfA(5w2R#R;x_-tXQ6~JwE_$)qhHb5q*U8>o5sULRSOO z4{7xmpOS+xV;XqP?bY`TG@T=cDwiQII^iuLEvaPO&Smr*|N*jcfD*1jv z`nB-w)B9{XT;#qY6fv=1$o@nBTlR~QQ2+R>FG`RGO?RT~CXNU#LjS{}@Mxyb6IT9t zU)|WcMBF{Vhd<^C9j1#AAG1)88TPd{d&lUfODJ88UK;(l($sCb>)Ia$5h$vdEtz|p zlNwV-mhWCLe4I_822X0piODt$sMQLt&MpM^jShc~$vrgWxY_gf8c{=~G{FehnQPo< zIC7hFFGkDd3EiV}J&+L0Omx3)`1n@DCK~Yt+#t@pTfbb#gHs4|*x`VoEo-CkO5RYp zY9XOIVE3+P^e%4^GU9!(^L*qDw0EJ2r-qBk_OA7QdET}9u-D%A-fLg?UVC5rzW2W3ZO&Q# z0o@4|5)%636xz&INJyCYt4N3mdTuxC^$IHCU|Y)*LS_BCW(9^Q_W0T3LPDfuDZV>I zU`qy~oq~mgq+5R#;SSu(D?&mFcTbrewV&9_x zm@hYsjHjmAC$nn(hohKd)oXoPUV-Z)Y#o()Uk>NA+N992s!T;6`A!j)&*b1)R4M7| z=f&l?_?D8>)U{!e2VA*m)7i4o@A^@37QOOd8Gov!jj-9JRs=Js!+)1?Tx+mnNM(=V)WAeRJvF^3b6uL~iljjRTu9 zL!BIb%=0aAs*;XolXF!RxusrFE%o@>wKp*Z38|w9^$3P+y+j0>`XZt--yb#fp?uLlskpVwTG`PG_K|ZF`C+3X9I8j(){S}o8V1)@)+io(#T z-mN5=+N9gSwuf4h2%=VBoadgvR>(Kki*L2p0q7MTffQGz zoUou%BEFOlG3I8!-;;+<@LN4t9~KrCkk-xGe1>wArVL?R-n^_SEDv=Lb;IGn11dSJ z!l=*R_f2GUo!KFEIyJSK4$WGD}?gSmcc?x;1EbvfCIFqg4niZPlEjR4wHJrGsVb|b`kfxQdG-6f2Er{VpESO<+t8nkai1K=(-W?M=s9B8aB@?9k>?mk*FqM z(*1RXL;<9EGtdyWPi`c9D`bfz&KsYD(!?}4n?I^Dki-i&K|B9HIK>d{#)1`|2llG2 zFrchB!*V(7@GX=AEtt|F{M49dvC0{4?qt_#!0Fh>TOHhiHk=IHMpGDK`)bywrv*W* zuK1)W3_#U>Zt3Og6KgPFf$3;J5oHO1p)KpM(_La>PX+T|p}b=!Qe@GND6qh=rc@_$ z6*~6@I2BcvwFgXsB8W*r1KlZ_L?`!^0?`kOHgL}6q;md&{f_Wi>na_!_fEo)4^Au! zLC+ChnYVCMvR6bH@@PX1NnB=(?T~#UFW^6NUOB=R^5J}dwZ-KP34~z8S+JCje&XLH z0?WyrHIt$xaC1u=;8^B1mv@jWWOEjdo`+kFOCj0YkC9=JxAL7YLRwQBtcn}hY3bEP zis;UqOwBa?37%Q5Cs2wc^35-`cLy!BQ%M;OY>lEIkS2BN$f$_ZcPOo0<0DS?WddsR z8^lv-RN70hw^x1rD2KyL+(cio=SD;{cct3E^R2EG)|^YC&*8RMJNlHho{qV2b7SY; z*8BJvxhiS9$=PZVfT`$HI+k`Q(4g9@741NhJrCb!k=qT?uEQgmfgM+uS3-_Rskv!X zw&~O$0ny0g@W#%BfYKxFjt?fZtAkeWc!PdVw)d)!?tk@G!J){|RC{|FYN1lqy=4^D zr0O0)$i*KEw|_jqx?xT?pp|ZeUhy!;c~1ZEsYEI4?@aeQNMtRxAQEc|{9E2{&rUyGBJWRE!WpU z`LZ-*-+)#FE$+5^E z9B-ZONq0#eTFt?%wnF(ao^=HFx79_$%=T|2~gLJAL zp?76)e@cTjju8XGVlJThWWolH?SFPu`BL!EY*BCUoWWb8%}cxUgR>ZP zKSBhpjxr4`xE#2}+ES1dwwm%6d5eG~Zo__E&1r;P3ux-s*f#?YGlLk^FB1Gaw}IKT z1hgg1tN%J2qf|1(J2Wv)m#(|?e|z7UGnU@sH`9{K-KiRp=u8O20*+7 zLIxtM(k{~X$NmyY+Z(>j!YbBSEI8gz9)F*PfxEk& zbm;Cq>wCRYwFaM_85Hb^lazdnfqRwkd7I=h&mK>DZ3+6K2fk-N5y|3I0V-{<;)1`aQNo?MBQN5{T)#Dg*OMiq=`3JQ0i z;mE*QKkpM?91=sYWUezWRb!(%BV%^f>d()E-I>Ty=yZRc9Xb~S30m$9t*k;SVqG-S zyB*jhzg{|&2*c1TjDB(ydvXUC&7R0EXe;|iBUhH>=oJftff zC!DI;kUFgM8l#XI`?kao#^bw*mGh z*rx9MZ|CZNUkx7@kTwUFRPIKrYOYQf4kiJsZ7e}gqRUpb*{=q5H$*?#!`;o_=7pQT zm3Q~53y-aJ;Z*JLsF^HA%5Ee>o@>F#g0mC3wa_ibk(WFf;K7ky(#tMK*CN~=F0x9| z7xUT-9@BoIls9jvP(bUSkvweF(p^f9$&z?q#~5=cihqluD7|UU+gKklE4LNuIY_ja z3gZ3nbnE494n|Y3rkt*s#+b%fcFr1&<=v5F;(2yiE4H0fuupI~VjO+*2k*I>EQg8Q zpEp$T^`DcS67V0EF^c#0Rv!qu;1MvdwFi7HRlv27*2kQ?oAftS$@1-4K^o&$8x>Jtcr?UY!TP52Q<@~CMPG$3UeaY2IVx)g>%P9o^Gd) z=u9@!UR-oY%oYbQ7)+H7LK9aSyd^m@LF&?+rv5u)Ciq*8_^n3#yVZ!_g4u7?@c+4V eYAgT4?Ujb&x39XIo&ud(=#=?6v$7MH@B9aPc^|F- literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/eye6.png b/misc/avatar-sprites/male/eye6.png new file mode 100755 index 0000000000000000000000000000000000000000..fc479fce3dbb2584ea944d9b4a6b094abc99dcac GIT binary patch literal 4117 zcmeH~`!|$%9LJw$dW;!LgIt=5XLD)GW{08_dR$^;(21m zz1-t#hVdF{g!^Jr1>H46KI zW$P(6L(35q0C5n31kWwz9$_vC|6vN0f;$s0r2KusChYgM=4*Jqf{;aA8+C5v+Jhlz@HL}MguR4oV4&?0V`0=5kYqK)lB*h^Gdm_g; zS+ITb^t_FVqDyv9#wS%bW(xB}Sr6k!rMxiyL6vPmqjW%hp^;MjWVXLi;jVh2WU7XX zLo21dBcU7XSV^jPn(m4mBL^lkwR-36>34fuQ;Lu%H7>rE&*z8O-0QkyL$1uIy)Mr% zQ9pd#=f~tOu41_5(x7mv;pb+@*k>LtW$j~68)|!Ao{!qQw{)FRj`2F4AiahDVdBGO zN@@bTLe5W=Xrf5rUAxfaiNm>~_X+FM;>tHB_~Qx)1kMHd)WD|Kknpmo?X?R39J)HH{fjA# zK-5#HF17UT+68Gk5JaUZ;&9rqnIF$a=bu~Pq2GnlZ?+yofy|g9Zx~l{oXdB^U4)>M zK&CbczNjHu3vD5hV5?CP(G|_z+AXHSXHh^Kw!+~|w}t1QK#16)GJrehWXl3MrW9EJP?$? zF$BRg$)d_mBrl3(}+0; zE=M9TkN*p^X{GZbDS->#{lLy}828FZPa25no*7i%Hu$8iHhgX3nakwr?4wo$y`lbEVV(ERCYWqaPmvX@pd51iRSKr-e+nBVf(5_+Kjhr?wdwN-Wl~0vv zLOLPN>52^45xnF?wZLA_ve3@ZGAy6fo&5G`@teMNukMMi|I|vRNpO+z@n%QgKgirK zQ-=J7!sDWT<7SoIH!v)W#Y|PB8r-@PMbnSofN&S~MRkf-Y_?CCVib%8FzCa(l|u$} z39f{put3fPXQhRbqOFm9dVBU!$Jjqy@&g&z9kF(4QgFww_k(8i{0%l-iMnCd6^Xu} zYwf#uodF8CL0~qH)FZ5?h0?T;9$ja^f0w+%z~rl@Fd- zVsV@BH%Ek{TMSnsx4J-w-K(*%^*@5Bw?c^~YSc<`#C`)TLx~o;u z913`__TWtWs*az=mH0EPZfbs|Z5fAj26`fBNxe0ACN|(M74)s(89r6}O8ZmwFd_`T z2zb<6gqHy2-9humFz~+6)?C)LMvMU@tEByH5%H@tKV6Z<-Q~jEszXdU{IwSg{nt`C~g94i2^1j;Fj&+pmz1swosN71LZi zcP2D2@I!Hjg0T7yN>+{afAe9 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/eye7.png b/misc/avatar-sprites/male/eye7.png new file mode 100755 index 0000000000000000000000000000000000000000..6836580580b37f645e04cb0a8ac9cb1768fdc3a5 GIT binary patch literal 4580 zcmeHLc{r47AD(%8F_toRX?wFaVumEj(o41>OB=#b9b1h=GijzUixx#Rii4;QMhl-M zlE%=4ELo4cO7%SO2z zB_R;&8vZF{bL6971VZTo-ofrLC2(@kEj(a+z0AxLC#_@_`*n44bcS*Nt^FI1DO<5l zO)Mz$PiZWp3fj=F@)5ajKRQ-_EzE{(;V&;ZZ}b;uPV5a@bc9whXTK1 zZ|S`a+~(cV{QG;N3D(0+lyrQ|D1~+ zo)KQ+RDIkmoExH1R(M%ct>;?w9a{UWfBd-nnpLYj?`zp)pg2uC_p4XN$H2g#?Rv-& zuoY`E^eC1+@OYzi^8qdATJJtAr_Zu9l2G1>uQ;aOpH7pyfAQx4DJQ%2L(=v#_J@n- zqNv}ZXk_8HzotHRfz7w0azgW;`30;s+lxQ`z_w4};%Gk@x8w7ZK<>nu4w|{Ca4*k; zD4qt1m@+{`EcM&O(upW*(TcSkwQ2Xg1ir;MLBtMtgfGxWOSfFPySUOgkvbCBBg&}Q zFc}HD7#5hK7(#gzQ<$x>m;$g`dd$cGMuOAq+-!3Ymbbe00a5^z*ULyjeanQ<(9HF7EiByNXbqW_%$kNxyd z+$CM9rO^`7id`o!s{E5BPke%=$ciGc!ywj<$#yxOVG_EPVRacX(>4snHV z^Y;PI7`{|cPCsF#n45YShqxu(GDi5(X4Xc!-*kunZ4M;K_bz6i4-eg~dnYsV8Z_En zcW+iCDl(g7x4z+XIyB5Zqrm9p(2kv?AzfNqT`0S>;-w?ml^Jl!yZ7O@dcZ_zY-2!uM}Wv)=&lVOg9lt1A6zXQ7s69 z;HE!YFvbVyEbx>j5Tb;JLLLXti_lQt2F@CWy)24ppB~P-tp@3gl1ad#3L080!Uu-w z!r%SY|IjwkMk04;F8~5>x@y_U2m2v6B=T0l8FrI8G+Owu2kl}6!OAKr9S9)!v};5z zDA*6vYqD-v7^)%jY3B+ zXU^TJB#-rXMand%XErB=`*&qj@%?FEr?1>Qcd1aYjx<=%w}tH2^{Z~dCx|!Mcqg76 z?N><-3nQ3q?HyK&KKW`#48A&z`=0U(`bg@{4HGHwk7`o*Cf_aYR~Cr*2HKcr%JraVY5& z&W^$|)}qyX@v9U}rymA_!}90G7b?!`ApspV-|1b{>@h3mSU|)`qt(?^Y+J`6bLG>#@XCsr)BE8mDrXx6d*~ADO_9jFO_Gf01nQi2QLGjyGKwclVc9>zF=RuJk@2 z!sf%!Z(74Z_(|AhW=_})#&6Qjjv4o$W&i0ZZ8QIAc0|5LB#*^t>v&b^X8s!@Wug&tra7r>>4jMOdPd=WD}Rh%uJ9;D*t&x+?e ztg7}>XyM@%Ra+|~PI|I%pJd(K+A?5^p}aL$U9Dih2aj9>O=zn};t7Q>)}2?!C{dCDt^@c4txJZn*qw23QS> rt3h#yLfT+57zVT4(LGe{1iv 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�RBc*O~0YFsv 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 z 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

    (jYYH8S zFM=D$>ZPD&f~O3+01lJ6myX-+fx&if=USI$e}B2_ep&5bB*HFY@8wlQ#(RT9%l==pH7bla!=* ziEJN(R4YY_xCc)B23r%?85Nr-hox-VRO z>lRmyw|?GkHximMyVqt?$f_$XZ(%c26q(lGY-RUTN$jqLqy6J?2 zP@6VN`^pDXYSrSuHFEmk@5lHh#mda2CNaDednzHXK=v0MU`pY5LyQ0glsUIKS zd9#HEoP}>`FLwkifZ+aJ93Xss+6yk*1F1u&k1MZsy

    o=5rXwB<8vc*I0Z|?D-e#G}-&es8fR9bQ%;xv?X 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%0D|Nr&Z>OJ>8^0N=z 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/face4.png b/misc/avatar-sprites/male/face4.png new file mode 100755 index 0000000000000000000000000000000000000000..a7fcf87e57e4876e859db8669303103ea8a6cb22 GIT binary patch literal 179594 zcmeF1*IQH17w)MNiu9(07Fwhik={F~5LAkE0l_aF1OlN2LhnsPI*66tk;o%X_s@}^JiYiJ!nLPFpFzeYOj^T~yT z(}ASPY7RHj^xwT{<~KC zfd)RA{~!U}c5~=n9%x^U>zaZOPc)S{6M4c{|13=_dSA=IE>SPj^LO$>yCQ^Zm5vF$ zPk6&G@p1&Ey7ZUCuuxQf%f!*;zrgOA>R&-6#2&Yh7W^uqasFCAd~fo^bm#iKUfbqF zy*U9k)KRjk(1~{I>flM9hMth4MiqbxR42H9Ff~Uy*d>pReC^9+R6x>3+KZaGu&|-F zBGk@9hl!NITCRC{)JG5Ow^a=(*q^v-(pT~t$CUHrRNO~ddDv@{i!iu1*Q{jAHR?od z`OF!uWgmR9)JW|9etBN#7O~qs2cQ4F9qEBfJyD&nZ}Mu{L0HlrJ zbp#P6|M@gt9;XtUmk&~x0vv7Jx_P0yjp2BLGVIdl^|Vh*d?MEEE|XMSqKeN9lB#%`hm!@HPqVQWrh$<7=F&AuT7-jdPR-oUja|Xn z?Vu18oZMbEOJ}pJ zDU%dzoXLRaD%k)Scv{OF@)Oe?h=mv+cSb7GPge!f)GvY$&tL{T;m`-_Zmj|(t`66z z;c1?J^yOs_ngMCSOY|fXdCB{SbG)EQLoe{UK7`JlVG)ei}oX9d-fC6`_&g+2uIN^2_)$uZrpa+-ICp*y>MuOMX3 zLHS~&AML+j!a%HqI%?#f9dttYq^5z<0!lM1XAd4@&MI+gdl$zfG!%I9De^4f!e5wz z=fYma*~RCLG?nxDtGsL65Lau&d6v|Q|M8&1g8vz1x=;IhwA9M$O}(4$=Agp_LCU** ztJ8Gl^(3))!T%Umve1Y7D7DzVueSVX-u`6Z&9?g9z#B2C(DkjalA$lgpK)}o<^;6b z7HrfK*H~;GxNWSUh6&q}+}(}WUx4Ex^P^n_r>PS2EB=qVU}3xcJ}Xkh*`X#e0^!?P z6}r{7=(1_KrAs5yt>a`?3I#oOb!c1P;0?Lhh&;x0mYi;HZ?jV z-;f%F)}aUR!+NwI+S?05-Dt&@!4lU!btPEeYjWpG+qhqrJT1tTl~$( zZr=GSPMtV|GQFIP=k3OP8SnBv%*93ejpyRj{2HCtJ40|B>V9%1$c{-~==#=V-X`9J zn^wUgJ2kj)XUhYvk=C&u?KkyNDq{VOCr>}Ybn{(_vI6mrg3<}iZl-gs>UE+-o}0$7 z=Tun=CxOrh=I4E!mqg=9*e(9tg@$QU1DX z7knc4t)9XFuu$2 zavyfk4qZIoAZ#68B{z0P{#!0KJ&|%*ju>4yg$>8g^E!+L`J~yk-M2Xj;O+{zh~b?) zsrUOwj(0$}p7tJxGhC0JcTrt~yCeB<5$>1!M3h26br?=raGu*8Uk39Z&T+~|Bc(r!h zty%;6W6|DYxQL?~k43^7{3bgZ@Wr;t9tW3cwDY{kJrk*KZ1g4?h62H{7}A%k5S~2++MP z&lVY*D^!R{O^9i+#?DFzmDj^%cOo|j*8WTax4V+H;jI=Kjw@=PyX2h+l(LK5gELg) zF-7Re@8?}AQ`2wTd{f|5C>8Z!EH{2)3;HQ|3>I=^`kw1k@XQV5g7JTNTYyX!o9n6MIvS=zOkx>!2k z#)W%rrX5G&fE% zOcA$lQ)2}4{^+HIzbedzwXK$*J0quHYYo402UkSAP~q3E4$I;5lwVbTe4yIxf_h{j-CUX7X(ahhjXuU=dq8X}I{x@%(d*v8@8@x(>=2b@H>GS0SS z=fjhLR9m-gYy197n*+7^=S%Nkb$*it0p3^kNCCp*W%dQ{@o*%;Xxl`gP%g?{o{_|FELcohmUM5U|vA3@m}k(D?7~s^W`Oua(*zmb7es)KoT=5ChOVHq&-C zNMiWcj#+d^YZ0+|wY5kM)q8|GsDT=UD0DfXHp27fZYIeS`H|`%Vs{#bS>1x7<(=1d zX@?a@I_%r!@IPhp>Ia~Q;r>!xa>f2AJEg0We;vnFzjBuwR*Noe^HTjX9zd(T7I#Mp zD*hL9O=nxcaizj(wKm~M^yo2XBd%5w9lk$*vPwiXQ`Kk?Mis6WJRWer-s9J>7B?Pr}@Fvw^ zxp}7$u=ubPh9)$x0xn^a&sSM!y-blYYV{{4D}h(%#V~Zi^uJ{JZjm>I=rc9;)nco2 zi2gS0#bCSN1bJSXX`1!<@AKkVt9pVP`h;O_zg-`(Q*0Fjdm*u#XjzZz^0ZgL`CS9_ zYJcE{xt3U*T5)Nf_5^{AZ@|V=%rPMUSPepd(dmZct**t|ceF;j2P$cM4j19Vcdh`P zRJ&I*f60S8Bah*LH&mccLqV9oCooCt)d)i6*JT027If&=-;;vJHmeciL%(*Gr$*hn z+|cAqn#-*&=tm#Z(ca@%1xj1Ui-?oICtTAbUBG~Vi1e)G;tdXO)xbc^`I7@1bst5q zK+NCl2C0&Ebs~rNl+q%*|72`+fdvO>0;xaMoZ5=T+xSmBYM;K{zB?CS$(!K2(j^ob zaC>PqXj!;5)+69j4Bh$7SFdHVU1~Taz0j1{s-L-aLABfFz7p>dAUQp9Jo|VWbLOom zM9>Hb#MC5rome3*ymRE7;RJT6SJP@Crbvy}6nI1{k^#lw%x~XQ45d%WWJBd{@Zptg za>BaYR28S7=)fJK)VShW*btMmShwEyR2cSxlN9DXy^tWg!XmW&)=6BE{%N<^i zt0a*+sE#<1YlC|)M9ltS)dg3aWgTLkskbHPL;{0ZlNpGyrder%G898HU_2SnW?6$jeNpA;S&A@YO~I?* zEW;w6TFwWp4s~(Ni^0=+9t7wg8Lv4n}Mc2tm zO{hzaWqr6pGXitEkrp<6oL6!=*x70TALz4y>%RS$>Wb6Vm6m>$e|pIs%iP<@K?-Mf zJm3eP2Ma4|_frG;Yl4~iYb~RN67wM40p2+=+FHFi)Tw4`SAf`uVQg&LrMWqMLP@cS z)6EsHpYk;cMMwG|>6glLzX|X#^wH|ErbL)3=EVC?1R>P=6nt-+{dfV5iCy8PtczkM zUD5``KVej+5s}ui2Q1rw7JQPJHQNy|D>{dAZ8B!E59`Vp5yeP;Z3}+xSdy?xU;PE2 zNp!1zDY>;B2Y))VqmKK>RBbCwL#7!Mj4OM;4xsk)TX&Wj^EAp9Z701_;zOnkQKcOA zG2D z@II9FE{ViZNN@@l; zKS-R!W$jN3EEcE*z7oW7I!m2#Thf8NqR&Qt@YY@l+deT#sRJJh4yMwB$~E?%3}w5r(; zk!dTBY3eaiM&aPhR&63grite`rW&g?UjYc&9{uwZj5t=(j0U0@DrQTimF#Pf@5|lB zmP2Jf`2Z0}5h!+VmsBA-YS`p0>&OScwC>>pgT(LZNMQTBuwjqU@Hb|<3Ii_*de(ODpP3VhGhz*}e}9j6-`kUG9^7T1HxTI0d#*)kZr{U0A!*N@ zAyllpq@X%)4id@;ul*N1t|ae$@-JciE&RSb@G0LN)0AvZ;I0m-G&}1FR0%AJWM(xP z`r85~8@j#0PT5PaU~Nb9q{OR`Tk84MzMnq%y}#ALbKm)%mv-6j&4HM2Dq)Um6BPDU zUfuf_AJIq7we2qb{P7phSpj88!R2zzEy43c(A1W~W&AGOXBQ5P{Ao1r5Z=o{h|`VF zh$G=<=VHH(5rxHUdR!P5V zm`TcKX*It$F(>&>1&~MjrBddQ+SB*(#>QmiL8m)k9K%eze$cD4?Lo}UCV!wqY`_CVQLU+kt@lG+OE#(_o~F{8TtpC|;Z_L1z&iLnH%oG*UaEbgr4 zg%M)j4#Ed94CO%@oZdp*A5#neJmW_9zGVOOw2zf8p|y7X&PBO z7hYlbPdnC!ZCwvuH)Z{30JU^7iKC;GRn4%blqG0hl?g3gL`<77gx#c8TLr4|?8{+S zMj{sjmQ29yR!Yw3ooze*lq^kfDR@nQb#3s`NW4q50jKgl%NrGh+G&s~c|xE%PL2H@Bx6Z+Y|Kd{-t^>@(PU#vn${-s zx}Qlz`0JR?p^{Ls!gQgMASu2S7J4ypgl}4@P8s;(nB6~oN{3X4&Pq!XcmfA!fJ+c% z^ioc?TnsLMLKSnt2q??dEy0g320XOu>3sAnDW>7;q_cfo>t~4Gas*<|OmOoR2JUB{ zbGqlwtXv4wZTkX7R56=>E$1`> zJ;jXJ@i{>4N;ujT!Uymxy+uKiX|Ai`YVI+rXL$cU1lzI~ZShK2EJN4er(tmbch#ej z{e06{7zJaJQE&e(ThbgegmRLOqQE@F-7g}CjwWHdO!M#3`tQYrmL(SLAX8)_hV8Z# z;*;cV>5c3ArI4>m#c*i*=xcRLN zMP96|Kb@avZ;5CHw2jB)CpU_QN0;f(-rXLD6r&+JudIG9^_ZP$lb)rd1Dtc0Yp6@wyaOc(NDHa#XQMq)Fqc= zR2OweYAsVEl^GtH!01?l6)egGFdWR`pbvD{fhf{Pao9^5}9sk+bJ1r zzd;|gGAXq)pqPyZPV@mzl*^K7T>KS%5~3N0#_$1htq|#!T=IVGB=&4Y!soJk+vLzQCS$e!Vp?{f5Y!4&$Xam^9!C=LioCQC=Y%-BTF#XG?*OE4;vmG$A6-5xKUyPAL z&R!?>Wf12Fi)(@FsYjfNoRPv0vP(RKni~5cw_7edZH)lpPIUGJK$HOnaKR0lDSb_cE96753>;9_$O} zdZoC1UVyiVamoYcaxMl6_avNY&f=PCR6E~p0Jka|@*bapQypUegICAxw+Wi`wnplv z@vj*wHR#fq0%O;t7MO&JQv!0;d9?bIHJ@o)?*XxX*i{x1{=}&ciF8ZTtUb@QN$9{< zhVGpvrkFhi*23V&ZPG)NDf7|6$p>FD{A*LAJCfb2zftipK&%9R34iuQcXHHtbz?3* zqE6%R-QqOZ5?9nk)vwTDe=3)XY)d`CIe7A;@QRQ#JCV{YhKs(x@avB4JiHWI{jVdb zLngU)V$hfLE_oX4(WGU`_29z^#C~z-HCkvIF57=EqPDpiLzZGYXK&ZW~C*xW_ zN2hc{0NRe^4YLR2OR^#q;LlZNYKWwa|KNR{X3u*ZHEqFEISCe?yRmLD=F%w~gCuls z(7fmK{p8wpzTT&dgyip*S6Ve4S%y?Xv$6Y%?!lJR76zO_gQ( z?@LcA{YVDxu5O1u5?rGK@3bdqxEZF~n*|6nsr?VR0f41@cqHM(=Ej_~tnR5^} z8EkB0D7zBm&1$Hc(IIKI9Iv5lBijzc zxyPzGPwvpTFhFF$0@Vu`39xNSaZ(>&1MPOk3jJA*?Ks8#kx;%CfTZ}-2%UVj)7nF| zF}i8pVoKG^hT~j7Tl@=%)C#v#;RTh`-BJ-|LLaQ|o^)(EU&X#6V?#`WJxwr)I93VZ zr zcOv+6c`N)QLWEU&bwI1{HSL%GWF4+3g_tWvTH!C&Y{%YZw94k*zeCYc$8CStSUkzs zpg2U~djKapG!fuh6_P_iLrLD3(23OObGt(hKGGfRh5X@vtNWa~0_nW=g?+c^us5Q= zi+_N>Z(rGr4_c)+6r9GGG#2)r=44G()t360<}l8tx6TPz@fP84yH&c3daN@u7>pJ|m0hnmP|o zU5Ic}bwA{^lHP$xo56PcZ{ZugI&~%L*otrbwF4l2V{)L`0FK-_&EpM6Z9T1-eE+=B z{#ReT#bA2<+CxqOS2_=WZM0+Y&mI~^-qiAMqLpL%u@x_RdryV z7+4b-zt6x$D&Q{b?Jy%6sV}yOFSqhuu*-~*(XzU}v}Xr)K8N7HBpj-a^G)|B{|=$+l|WK1K8m223(--%kVI?R51H}MygU$R z{P(JZg20Avx$f6$ZaI7zi{ohB`uJRKI4}DZZuO7$nk+N)@tq zIU4NdJ%70w9#sBnDBh?78b`^+q;Ge|=kLBx5iSA_7udK(_m?=Jqla0eydU-jXZBuY z1rSH>3=ra%QO_9xYcVrWPV2{jY;b`i`OlPCa;&HVpECC3z^D8|S~~y4XYyGKhB~fN zc`I^I9t`J8`Aj3vjy*M=*aOb^G_5Bjwm6dzO7r7uJc=UwPeZGZFUL1_9o#Ns`MtKP zPt*RwEqEG}D%5B!SY6i4my`Y-kSpAJ;NnpG;B?8HM+31RE<%gi3{+9B`RNH_@A2cbz5y8P5{Ego9sqB%x?gK|5;~~B_nOg~Ow%3|Bnil0VX8P>XnOqm0Hs^HhO z`E=d+JKPXH5#Gp)?|F8?lf-Lp{QB^mg}J9MAx*=+2vnk6^`;G`6Ewux)<%~V5$f) z@4=ui_sc2x=hTWJ?|{L;bg{q>Q&9dujS1 zES&?!6n0vlw_V?mX)*bEmJ>eA3SpgJ-{C6%{Q;D(!~kbFyRECICOJgm982&CuP%Fd zlKorLvHGE?Adoy(<{^Djre!;id?!t4s%2w~%HRWnM3{7Q9qJ~TFR!0$jo-=Fz(+ll z5{ec%5Z>E0uAu9$Z_B7k2KmHThP$`vDSPwNC*& zN#EMYXvW4T3U!Gf#3z@tJu<8;>ypy^jEy4eUxQ7RH!46H-M~Cj_)qUa5?vSWDnMw? zLk_k3%t_+Gr))Woe|4>Mo+wcBRBoU%&Tp6Hm(d^1F_{l;&gkdbBZWKPK%yxb#%)$PNc2@!z@)nrenM7i6q1OkvoVb!Ny>b$gw$H=MW&}ki+!r6{AP?G z3@Q2wuyUE^`DL3%^U(#31P^m>q=Re5&=8qtN`;bT{jiVR&>Cn5C)=L1X2CPnfQ*yD zRNWA*tMrSqlz2&pK29e6NfFf84*&NjsLTC9h8l^LFial$XhUP~dTOi)=Q>pwhsoV( z9i_deM^=B8?olIydka(JI79fjq&1+FSEvK>lqPJ8g)j|}Izk!dg^{38uJg;S!@op+-|0}Gj zoSAa)z%C$>{;R(@F73n*n*ob1YxadNk|3;&^_T4LV`gfYK~_FP=ayFn&c7^dC_9Es zJ{v8&b`G}FZmlcIjgOj%j3tLfgF!kzv^)ig-|k?;5afN)-4gSuROS{n->n4>#?WSb zso?@HRoU{OF*ALJp?9ca96!zYBr{LUG#|uloHsVQ)Ln(|?5CQT5GrH!NBGh& zVxJDmfC1^xL33!6$YcA|)o4{?z{$G*S;tW@s~CCNJ#dw=U)DZHKj?Y1@FCNoA?hF* zw2!o%pA|!#&Ia|xJh~DP8aw^z98-tN%JtezDIAc;9~nxUhl6n(IzJM4k+N zeP!q&t4}vy4d|4-ArqQqrGb%*2PuQ3MKo^vHH%eqHuLgf99L;1jD4d9W<&2a+l0qx zVqdgDRWo2_d^eV_?~hoAkpA==7jps_>a#Vgl&|v973S80u2vdci8ghqxjdLy`FaLr z>=nHcZqd<>s{ayN`^vrTo_KVr?rPj1g=yW(@J)jukQw}agX~f|Z{!N3`y?rk_prqh zx&Ag7xz1+LEmrc;MMYxy&&J_G7*F^)b**BkzztXMx{rFeFkn4#*uHRQmc>+cw_l_X z`j1x#K`@QP9@k!_D|mJN`<%;tEh-p#^TSWZ5Qe!mQ6BurUfzcx9CIpT6vdw%MS-sO zAI4g}`^~{$zNz@%v(%N8%)(D(-&Mf=KbScKYdm7_U&xe-bjAxWCH^K&oBevn`p@%^ zq5Oj-Ym>Z;N;woHQHEP?n1+^%4n!Z?oR+wEBN`emv86B%KX%uuXTJueRPXWF^u^!a=2`v3Ut2W5h@F z88gnvM9D=Bp<8{Km_T1tP|l^H@-Kmz!z$e;IwO1{ZcO!qS= zq(U1nP{OIUCF)ejNMT;qQFOY%Kaf+7uOz3*lFyV*wjp(rK>6=mMxJq?_Z%Fq4xF!! z*hGND;d~WdHO#<<SDw-o0P_h*ZwIw^mkdj z`7aKkXf4G8(^>nGU}RK*##(DD)jQ(ve}3cXj-4)iSLY6wxJHiMZ-25xe7Z56rrsS} zNGY#z+#FY6MQ1$6cQoCJrd zXJQZ0<6@3&bc%DKBe(v5AffN;;6_W7zm#u;7{y* zZtJNhZD4J{0v(3+>zwCN^cO~#=bthf)Aj4D?{E%M#9dzn7T{)MAyL8rA~F19k!|o>p_@a*DH_{mG8asFWlc}l z4Ag4?YIOiB8-Ts7K+3wXANkIa5ok8}rkX%g`)&=e!(;rz@g_KPQ`2so>9nJbY6r6b zQFBdE%7xl}Z9se)pRTllL8kda(}b ztQ44E`16CA*$h+C#Jw~ns&aRD?Uw`5@fP@RXE6?4$LA&`-*(O!)I*k!d7%e$T3OOvD z|4F{`wrT0`Zo`g#y*e*9h&;VflvNN0BZ_l{bagfyb?p9a#GaW98d05{C_8?&?EKr- zy6SgHEQW>=T|J0aG0H5U?;vX_;Mcu|wt0g>B)mTf)M5@Rqdi` z_VKwp^Q`+OCA*LNN^+eNg|!o!^(2}MR%<-tCdhu23aa2L`QEV?u10b%zWkGRL^W+i z{ia{;eVePFuH?68{7ZK6RfnQga&PLL5--=mwjPuWEEv@mjL>Z4kyw%w=N(b%^G2mC zbGpz3Ha&%eV{jOXSjye$H7)iwd~^p5&na5^MlRLjKAhLAG=%j ze^#}GDR6@x3-XJx>u08jc5ZwNooc2a)qloUKhZiNMT>|NnaCO;y60(eMP`xYFbq4N znQb|2Sh(2MTBxx<~#%YhtfOeX)O9*^HsTmQCJCC^O;Jn#v= z)yU3DY}9=EhKGAwukn^VvEiW9)x=7mP`=9gtFjpL7vRLq;H(&ZMQnnvrfZb*v9)5Y zqlnzxSN%74I*rEuQ(bcPHej>m|B4v8+px^YN@fF10(?z6(*KtyibvY)hHI@ux$Q zGWy0(CgJt>QETtj0Nj!HnX!2aZhhBl9S9v*;?Y$EyC3 zY+gg0T3i%9uU`dKTcRNqN>N{=JXRQ49Cj6cWt>%>A_`yG5c6+mm2_=49 z` zjDg#^8{bNuIED&nu&%Q+^f|ZsrvCYr2Qr?xG(P!4F*svfjwD}NC9{u}VeUT>Pc`2m zcS~5EALmmdz$Cw9x9&+;CB(PesF{{GS|IxoVxo4*1ed2=gEyPNc`YiH#SEy>GqnXUP! zuQQD&&z;$B$N?>8@ph^`UYzgcelb`|TlPcrj|SWws!$poNNDF4r(k&i_tJv(k|<-< zG17q5$9Qxh(yk&U9IQyo3Q|q(?qSj7_hUe|r9m4s%oJBjn8B4lkIxsV2JTQslYHv?jV zQU*~vO+OHIoEwHNlK)GMx9h@Z)k3QCngfE+B{XxK-n!BslE~$o6kiffmhgUfo7Lvy zmDr^N%%7a4)kI#tyTl~IUVDlCYw!{42^`+VooI=^iu#;kEI&xYp zUBh+zcHWhpFmB2C)_-&Nt$xh1(TKvy+85_SXd{FJg?yA2qdP43y zp@P_!*k`@E&lbFMxbL6_>z>yinJH7saK5zRM?y(+!&Tc@3{ODwkQacLhxboAv|rn$ zzaPsgrAtBa_lb-peAA;rH+7U1wluZZ@&FLts&5RgJi%s&h&ARcT7y5?wzUBqbeBT5 zZ&z|{=Z{6#V2sbL-e@YtUNrrjJ`w{Y63|B!V6 z*qpqdSN6$=6xNMJGh3x}LBksUHw=ipaGFQwtrQxBt+VFYLu>vP7OWN1Yw~igzGXrb zNve#D1(mKA^Q&RvM^ox|oWu`%wmI?kkQxk3ugt8(6Pj*s(naH*?ghP9aing1C#D?5 z%R|FtC44Cpv1VHCTScOFsCraT3^Zn}5XMK>Cv(idZ!?jQ)87aCKa^sa$#Ayx_jY}B zUG_BOF`rn?{B}x{`Eik>B5Uh>A@y*%`-DQ-PRd3Sg&5vLluPR30kRyjsvrhL`SmWX zAG_TYTTf=ejB{3z&auZgCIDkx73Oj~*=;jT z)AZrYP}7|m#$lR5X6z%rF%ieX7k2zP`uBfYNx`X~TNHVixE=gGHy9yTGl~PzF)9M$ zq7hA+8Z z#TnHMCT5Ht)5Iv8CkH&!?O!VDGx!+B>U*B)w(i3w^xz&N<|8vGF6^bph@RB@D%jVq zH+f|wR2E{f6~4V+B%KET1{1!|7e0ZL&tZVtuC(@bVJ~iv&#dt1T0rpCn=JR~ zEHhiV2~38u(eb*|QKOI>O;S}@A(JL)mA?0MRMU`(IO?;LR!B1Gaq4=qTyaC;!}BT@ z+h;AB-e9d_YW}p3mMCLbSPCqQYVj$kvQ+uKWd*h37i8bbm0^mPX$oOiw1C{aU~3d> zL~msd*hUd-Y&^gj^WismiY3F6w1e|y$Mf090-mdadl?SrD7=#Q#@r;wmEDN{xCCO& zhAWnm>hX@QCY&?1k77jEy&-dSbil`B>LR(}d|;O;ELJO6=*iw|J|5w2i&soz5)@4X zf9>twPx%W<E~r$cqg8XApGWrKf8AtcVw?=0NA1UQN)40#Z7oq3{QBnc>C-gn zM}xDva&Ce`uNUI&dS}YuhXXFMp1byPG!zr|l-4vg$(P^LHMRZkx4(@4l=KI8R~tMD zE44NG)Z~ihDa?3?c$PD=77rSk47nGZVnDWHNSr7%$lSZ~cUUsvGx~7C2dNQTm(QkdNJyjY ziv_%9SbAaxzDh`b4Pil1et&+KYp@gGOwVJqAe$6Ew(So7DHDAl+4k9~;{@=kd&aIe z9&jY<{UNElQy;Li{g5|@0*)<3Eyhe3cH*R6r zV{8CHu|uI-)n{KhmGC8LuTS*-PW}45mbc~-Iz6K-895_<0_XpMM*z=to*Fb|dA;|t zpcQs=)pQiS?+BctH140>{aYitpY)XizRO$?nsTG9ftdUbOXmhfGgkZJm?oo8qE zS^Kd;7o9XiQYA%gG2eV`u$Rq`m$c06CB3kDS>Cvqq))padki3A;E*{QL$i#QJ#pw) z*6mL!@~i_^+2k0F(jNAvuCLLO&0~v#jgT&Zl=+j9@KWEXUwx6Kn#Pbnz0z}`g(p@! zx_xOaqK2<}YEljl+Rj+l`#;Dup4{M9c-WRDT6@OH|8R?Qv8Xh+PnHY2$+9gUxbZ%yP?Ud z6;ROkulaA3Sx=xz+g^Cm8mZ{WE$bBd$&eyd@BkZJ8CP8l95G&)|~L)YMF4 z28s%?ERsi0_XM^Jho?J|-Kqz>hNxchgllAML$li5Y8#o;^uo{t9rSngws*43ACB*H zvVigbZU97j+=KhSX<}~QW{$SYbQdLsHj26=SlWy^xW>m$1y}hLH=jT2*NUBJ+yqWl zOhRQ4K+8^9TA9aifM%@F2(i7u$B}MQGp}Dx^A0W_^PY1YYPFL)5{Ny+-roz_uK}=w z8EQCsUWApdDGt?J_VR*7`(okIi_^zn(hX)t_Cl$0Mqp(-l3LQNhNV@5+f!lZH}K$d z_D|=(o`dqvt&3>2b5Tl(R|N3GZZ4@~Pmi~a6xB3XVi)1`kr7!6)j?MkA1AZg8P{`1 z`XFP7<*7(^m4qUNWvv`)<{?7_BA)T-FVfkhvG=la$UPTf-{EVIP&ey+;&Z&~yoHQgcjwyEF-ZND^}b?- z+Nr$94slxm$t=54d4EBwL{^$$6ymPNUKmXhI&{!EiFtqdEG^7Mm3);^I*LH*WQ+K! zMf<4c;PJW_32Y#gZTE|`a}3XymTU`Um#?|0a7~&t?CNW%Xy2!CU&9XyKP@kXej=nN zM7AAE3z@vrNOPoYA$M4_U5n7l6Rm0*xeoivss($NdOu`_9`Z~yvOrv)KGS+zm|ixk z4@bj)amM$naN<88CHk8%^RpVE1^e32-K{=4-f8)FC9j-z1J?PSW=a)lUwZVF1Q#$% z-ePVCt`c`)Ap-=GJ(g?3-fN3SVbVpO8-r3A^}CB{^`s$QhnpxZRaxwX7yl=+0e z6lRT3;iCAozUw+Zw=Z8g7fy{0h`LA9F>HSP9L$O&^(9`+Sr3A#C@6PkXa<+W-s($H z0!Y=%4b9X(s8TU%8_+Z#xbuIFRaD3i2bhQ#D%fHKei>yj#Ltkvd8FzkCXFPgI zkP%%yps7wv@lTU=v|etQli;0Ya#O8kSMhZ}krPJz{=0H=ODQj*g}zO?yjJz^N#7A4 zG|qgs&l3z8g2MWGTqzv)roMXLwXYv7+;k-tQ1Z+_?5W%=+zuEUE)?UK*-{Z3v%+9VL7I29+?& zRI+FU7sbEivn+Jj<-yYjKf}XMB%l1lFQcAvbn7WP;V3yM1nhN5aXJ&uj8@MRf(UZyh>c9XMAVL{lYQSt$hCgEh51}K^;3~|kK`}$9 zCtMn3&{YTUIN)|z+nm6Fj*x4?j+g2>Em7oJ`vpB(uPl9UbpZMR?_h99@?p)bs95nr z+H-DB0!0BghZj-Cl#o(+UG{I0{q1d;5DUz9;rdFdP77HH|I)X`A?h`vD0o-t8{k`w z7oa}8bRx+xfPhX1pEkHUyiz=QP=PE^1&My|#cK;Uo=X_-hoeA#GxM2}@UO2rcmF+W ztk0Fqi&-Ol3vK@&UBjFTyuF5bGFK1&jn{nN@fU8r{=6sSp2q{ZaFx>2!`hE9G?W+j zK7yhxtFCH_5PAqUQcr-SI|M11HrVa3{-<0FtVSja6H`pStTBa6k+2PyX@LXV zl(i}8TdqG=c}hI64P}?fCTUs%S@It!4Qm*yzN|m~mN&`0vHBDUnYfbtg{31nd2W;k z0s-X!VJjw{WJ%kR2`+JtwTowzW31X*gnIfT1tqf|vO4{wBE*x*HCjl@vD9{qK_wpwx| z_e}xCL3GFCs2WVES2W6aR5Icet;Kl=QWFa+0;dHriqO}mN#}dRZEzR~tzI!oF7E?n)d3AYW!oQ!*je5yX&eqPoW$r|f-o*NSVtSFGz{z(+b+om7H)j+6gek0st~Fb5rj}wQN)G! z`epTY*e`hwY><*#@0r+LYNR7!n4}V{5tu9^%2p*Mrd)=}%jw7~6iLqMP)m-N&w)R| zD`Fx8KM-D73eCD&D8nLYv)bV(nGuLY%etbqdf_SK`U}3W*kXAh5~sr|oyvtbf71|@ z#Bp&F;`f7G9q*z9j7z-|fmDG94HuaUl78(vSSm}D21>U)l}=o1kBq;x8gX{lk+h*mLg^$uniF)5} z-j9$ZZ31@H^TczE;)jRpL`KG5MsEfxra?iUF@EtZ>soSI zcpAW37y&gFofGN%Ts!sWQg-O<)qVL~+`Q?_DP{6+4?gtJcSM1(C>1akHLPWvYOy;MS=XmYhUy7 zKi+ojSx-k`Mu8*`x#l+Qd%r7o16gzZwUo4Tlj)ZOeUJp0@hyy zCW4}K5{$}$E6AiU)RW0lLK6aC;gipln2^v%5Op32R$3?9@dTf+b`c)o)@fhR9+@Qe?7-E8I|iS0R_Tt*6qw5!cGbI7NZC_Yz2OW$UK3T{oS+n(@1~aMkHw z{>e9e|DQ#HygT!{*I56lD({Xb!raFj`9^E3BRkkAvdW5vM;2;AhWXp0Ku&w@_rLs4w{AZB>EVIAp9;Hyuo&Stsv56s`e4xGe>B4HmwP-`&OVkgfr(Oi?Egi4pM=!hiYA-IAF5|j}W&1f#}nSBT* ztC?ov2%8i~p@ohT05dLkzpOGtO*@f`c1E)p03)CZqHDG$PTb6pfF z$%CD+)^(VyCsv9>1p>5)SA?Rd&|V{d;Cm|PL~z$M`-Yr*=>!j@{T+C zvsa%q--vT^4IouVG5MD#F)N-DzWmZK~kFx+Na5 z27z6Gqp$)CMi64ax`%wO$&2t%h(@qiqT-a`CLdAJWGuI8DGdl(Ae%rdShTTNho@CS z48h(OZslZHjTPk#j8%M*Rea%F@VNBC2pmAb61i1M6@{x{q#TLSIO}_|ilEPmFz^l<(#Y zrM-N{Vz%!w9HJztJZqo!^L0snJ&Fpp5MqNhc~s5wb(W zRUUaCDu9AYX&Y@td02-Fnm^A@EiI4x3ax08*7-K zQfruB{Qa*!?mukZe9qIc?$%bauuUSd)&?H{G*z+cgu?PSf}R3?2sVWqkv92cQ1drd zxmH?)E2Sp1s59_&>m!7i&mNbz`c?K=oQqU;2 z7EmZ*yb>dZ;2{bEX_(CO%Ze8+V&nZ0r~r2XUs9Y20*!ZzvNwURgfe(O{lW1m$3J+T zT&KLhNjY&(u0cO@JZ<9{u%s)m20^+^-xtI=LSIX9^Gw2QWn35qR`;Qg;TbwnvjsVx zS|3mU@T?UPH?7fvhevRNgnE>NWlr!qa?Q?7sU%mU1ch7k{3tDJPUT(UL3cK}k%L8| z_u4Zm)AAk+xvuwsl8*vd$r|;$sSp5xo+X0G_-9=2!P{jF;(5##VFa4$8e)upJwy6} zF$|oA$CCY=Ywa_PA$XmH@oqcU^*|PG*z}b*{@C~T8tZ2}w-4Iz2iblv>#qNH=6Tjw zKbSSve>K~)tg)`__$RCll+88P16#c|%A?m@ayHVWP$sIbhl0of>^OBrAxV*z5N zIoQEyGjSzDGdabHGa)*$vico@|Kv5V+4}?;JT;i5VGYC$tI7)8B!d?N+;(UZe zXKNc43*pGUn-73w#9~9?5NR_!n7y}dtffjjC;*5h=V~cdq?fSRAonNuq=h8PW+t~{ zPpaCgOi*yS&hFfQIYN1NEY#f*q`MA3X6?g%>X8w=adJcsv) zFxs8>;yG#K?g(p-<&(BX*m~bQTk;CVb@_}3kaZ}=?`%;nyVEb87lG$-85g^wSbaX8 zCGTwP&og*k+MD0FcgDwZ#?ErymDi5|=eK2!Nqbg=`vzAs6f@od21dQ(F5y1Pc#Lsp zwtp#Yb3VdhFy>5v%z05DUav!T^)m6Si)_bp*_mJNwVd zhAcQeTV%wsr{s7)v;X8*o^b5DPdwq6cjWuqvc&aU4?AqW#`=G+;C`W;_v~w!XT`CX zAAi(u{Pq8S*7n=4x#)|xUU~i(Z@J=vFW!84wohH~#4Vr9_VM$dxaCt9K5@&H7k}}V zPrvVpTduq0iCZ^c`geS0t zurmT{9GCm1HkQ|pVA`2nmL2@fZ^_u+d0*O)w(N{z+8N>P7Qwgko^1RcfwY5toEyt| z=S`=r?~M1iGkwMHJEBayhv($FSz~=?LUY}hHjQUKFXx`I{@_ig=iEF$*Wx+ca{NuF zu0Octv}~uZKSU_B*@_=*t*<|yh?d^@&Z6!onVKT5xxYk!+eQ~nnC~* zumFEy7Cd9BLSZ{mRMI<}6_W{N?hs(cKgVW+heHA3t*|wZVvbP8&ukeO6$@htVR*rtD;adu2C#yOi8HQuB>dBa_&)ZYrF2e zX!VY3&V72z73Y8HmTNA2@|I6u{H0s3Wqx1yceh@7-j{Cv#5sR=%jM_&-OX2>|HRFa z7ulZJa>aR1-2BONp1Ao_=S5CLhFqS{Pn`3`JFdLoiBJFKMUVdY8(#O0gaxxW)$AJU zcp(QH*fan40`GzNj1{u`%r(qY@Be#Wb=>dYbM<*o?YsT_wS5sL`zqQ9HyKNP*Ntbz z`pH1fVB3dP#~R9+K&*G}RuGYEE4$`-EI^{K?oITS5l9Gfh*yL?(LohuV#sb`xQ%I} z9Ei{7yB1xnK1*-pI!3z`=h163$a@q)IKeLEjTj#fJOSjw1SUF#aN%Lm!2@`16+3it z;q@3EjFO7t>WRpHUi=bb; zGv{aj;%zyH>qamy+@9a>`B09@Z|S$i^uZ$cr%in3+(oXqR_^uuBj;1<&ti-8>% z^E?YVXCY%?A#GdCGcLxm_L#eJj|jJgj1}6n7|3SvhEqlxGAQ9o6z6jHxsX!&ykRnleu55&f*MMFBp;$I^1dP5P2$YoE^bB0Zxm3n z(=83(=XSQdQEXfv;=ZB+t*w@GvnI)uIgb&={eUI8j?gQ|!+{W3LG)oh5%isR)FI1( zV}YqB;A<6e2MD_b_L@4M}swTCvJ z_m#K&%#Ut5wP&5y~i# z{OvUm_<@cVQ6v!}*g3*(iy zrcDJ;~tNeal&^%ZbL=y)}d4mNVD(#QIse zY2*51*PjuKV(y9FpP6~}i$J}sl-FuHz_ z5jBKMl4w^R3vPEWEaY;y4NoD|naD-%c6}`-$1DeeK*uWpJC=JW>kLRClgVcT>oyxX zWM?NWI{6{CbB`veeQux+j;+7|$?Sq1fat9I#N;exAvA?&69tIE;CO^dJ%>2F#S_Q& zP=w%iyn=WOi}zd>i#@_pfu1d1p_YEGr;@n$(o!rDyb%Ie{wf0gZo!Q(#$(Af7Lw_& zcYtulBWNX{^2vE9EffgKAaIj{9%0SCSiuVjbnbyiLOU`>yxzSZ$#$8Zik=DA#e-tw z8o53K-tSQ+dO~?`Ud!v{9DZlRLs6Nbye?Q@y6*INVNn+J3H$r`)7B-F2p$UO5 zMav0G#oOm|`f6g~45@V~3kIvt)q5?q|;d>aPc+CV@V1N|yKWbTZ zq*sL!bA9I)-U&uep#bgmcg2L++z~ty2z8_NSYv%AsD(LF{NGrcJ&}w_VB8&KB8p{v z$E(L{$`~PvvGw<_%FG zznH|o3+}r5?56_jtnI$_tkpnQYeq2<&9p5FB$nUjuivPU9i&|bW><7ASZG9hVA&C6 z1vy@kC58`Tq4PP&al;jH-BAb(@XkxH97)bcarDY`auS5f=KPM8Co+qPZ^-8euN?O+ zSKW+hV&JPCSYfmoD~?GpDLLGI5)7+NC=)mGAISJ7i?}ACmK{+~D60qxCoEAq5eQg+ z1z#DfZ@4eYil{HVCt$MR%~YnE-#p0)8kw!}b=cSoR24Ec9#( zcMcB#Yh73gVcHwVDTpIbwc-l~LzoM3#j`<}Cy-$ArU+hyIZ7qRYWX+pgr^aOg96dh zK_MW_bM6B7#zWE*Nt;k&csBWa0R_T+vMoi?EnRtJTTh46%PpSioVEo^ISWk_#oCPaiS;DyhNAlw@LtG zIPaxlRmtlSY=O5i2=q!uL}<&Yb>?|RTj^Qzek%%%C@bJE3_j z0CFthDU860;i02I%0pK<&1&AL*Jf<(V*l&0=TX7q4g{YVMb@WiX04QIPsWflzW~_YE7@ z@J#mIcJ|uCH=h61pZmu@^1&#OERnn6O~r$}e7-={i${Yz>k5KN`g>zS^nU5JuQ~q0 zyDmTTspLrn|2%Uw#p>4fgs5DJwP)sb1}I+09!R_n0|l0005@se9!6JNmE^<4#_|D9 zDonNr?orBtu**^!Cc+&qFzc7(VSj_VPon87aR z!USZ{SJ)}m5lW|$#6|*M!5Jp6{He=I62-(CI4A!I|QtyO#apSL%Gj(g>nS)y&oO|vV|lbfWkY% zJ;!0`%VFgH1KNo~DGo$y9q5R2PzZP}cpB`3J4jpQJZ2S9^9=2Qpb+#lhV`%FVvCSk z!23bqv#HQ>eL0yAL~#U8y6%+qrP~5AA?#5ie5&AbJRVJ+iF?~NAu-^$aoq5DP-M9# z`%#7{9qysWf#S=#1*xeVBlwo0e2K^sCPEoNio04OoEA`Kyu-H4g^h~S@|+^f@f6@g z8jfTf$(2;%VFz(kl-*Rm#4$J^+o>u5ib1Zfpd{d>^yyShxRY7C6bS;k3q)4%h8{2D zmt)&dGV2_eizq7QNS+ttOpl}jRLthb8yP}>)bwJ!5-y+UHpVKRIrFT&AFhix!iE=b z8-T-5I+c@yLd&_k42LhzgD6G4`LotPzd4DCH=d~n^5C`SeB~|w_=i7u$YCszyMZNg z3F)1$aQNcUAESIp)x0`f_YpTT1rVb^e(_bWJm#!BEjYF%1qW?=zME}NjVAIHP$b#EUx7q< z+*2M1f)eW;fvWPr(vJW}*dkQZ*9(c#QMh8sqcq?>5c+j4LU<{^v%wh%A0fE$2oUOA zqd60lQxV?&&N(P3?#ti8NI*~s_52Mlf`?EFZb`B`#CJR~6&u_IZH+ReeM>-S!ecp? zHh8TlJg<$HRJ;k#3_OLBvW*w7FL6(ZdttJ3)|blbL7^<&_mPA$$KtO#RV$DD`>9_w zLJ)!-J*5FakOS6yB_~$t_fcyMg)pG5Dc7X`MkrhHnDJYD7QdN2KD=YgpmcR!Noc&H zD#OFE%%Q0&0!pd^Km3irkBmPv&Wjf@nkv_yAlV3TJXppx*YES4Ye06DEpI>xykDNR z_&_}f#w$S}7&sktVxCBphb4jXTPqMt0G*wcD`QNmJkA(0qRJ4VIOJ*a{sL`9mTXFG zt@G9%yzbnuzU9rY|Ii_a9@YwEzQW;)NO?^4uMSWk6hV9w9>@u=IQq2PKM@ZE1rqW+ z-p3l&#pgB;-a{9;YeN}j1i@D!stR9lW^mvlDL`VTX8Rx2V4bE7hcb-RoU3EUJVct*}@g^!nG%Bko(0t>{$g zLs~+CaSe{sgCP)r`<3D|0u3d@J%HX&lw7Nxr`wK_q}@@X3*kMMfUxi$dPPS(T0P{- z38_r;iFob^DBekj?sg3`y@G-vg`V>6F^VbzPi16vUIIRb*E81XD5J;90`MU@x5C1E zHAxL80yDUt$%YkdA@R-Mz)+>0zD3lKOC1Q}$`YMpYm8y(Tl34=?vOV7V z+R`!?s#LRl5+L_Q5-Tap^cD(_9M z1OX07j&i|rkI-i`3|2xuUIYpW;f*)KIr1lXID@QKaECsu&E<73h<( zQe&TL1JfGz@Op$353X!1T$Xl8kk>r10s-(+L2P&dw86QC(FQ-!{9W$b)s0bLv>W4t zq+2*TA*zD#P>N>X&*U^s;p})68S7-DS8>geD2oCZoQ9iF*?{m2LSbJQ;*>)PgvC6r zARADHL}INi-<*ieM0VnV{OmIoNJCf@SscX`=eZy+Xm#?<708K4pRw%|XFmDZ4QH-> zcJt}0D}k`|I>7MnEDIyA(#jeCi+z0h&cRMgC-W{8Bh?d z*c#?4_`yY*+T%d@pfIW?)&5l!2edFEb0S0#I0&cmM5d5n@>g8tE|xLg5bbs0C_+B- zjFRzr?g)Iy^qnXW1S%vp0-Ib8axlV&ED$0~NH1Oq0vrL#G0ji3qDbHBJ)mgd8j8nI zfyjvzUxDyNi1+abX-RoVYJ_->Pb8Rv-18#b%ezqFaDH<#+>dZtj=le*17fl9IEK>quUSqetYN6PS zht5|*X~4OZj!*53yLVQ_1NFMBH#=)5{XWop$gtAt5J;9?3r3T)7JP5iG47KgG+VYzhj~ z>SID@@Vl--a9G$ zA>qn+Lnur=k@7fDUbG3ap65cz;C%>%jlPlpq0Pmakd02s7Yzr35-N0hL_ndyGY*=& z@LdpCLCAPPPzv9SO_T>DG{RP6sgw@oK{~XT{T+Udw_9UT1!TDGm?ay`AuPu^)|wD$Dpl}4u-H|k#{tW1?vS#f2Jigi;tw!)Fco2POlSaWHQYmgKq zU>TFN)l6l=F7r3u5ACZON~3hjnB?N*Id&zA@WEVrJCF>*vH6Wy{&E3ASA(=RF9T=` z0iB6!-bdwijEwRKeFU{hd^wiig}ula$NC4(8o3ukVQ@S=$w)9HYg{M`Zv_uvD;`AJ zAbC%&24TW*9psJRK>#ZyoHs=F0tye0gM`S+O_7A>-f7cP!cv!v1WTANibxKp`I;j2 z3s&=4Ram7g3?~i`WD+F_h`ATfk!=Sx!^HoIY^!=!RxpThfdZ*0q|Qbkf;Y$ZqEJRM z5f)1|f*P~!9aO06Sb8|)jirUHkifCo4A98??xL2A0gNk3mzV%s9uDKLy$r4Vg2nh` zOfr^Qfi$OBkx(OVs>pluI11u2DlqqW_)n*h-d^Wr1P=ha;)Miu+R7Y^f@LgPRFPmA z=KRK?9Pp%t&`@rrK+5yqU&5y%wNPG+XZVneCqn)|8wIj!OQNvuI5%OuA<^d^$ctKo zd~*eI;xQZVxbp0$q9B4>#sk^1am_GPN+^&>DA}DsWFEz^c*e?RSW`uoH*BTV7Gc`i zttt=%F+#FPLZUeo#y~#c&m2?MU6+X9IwaazvH?7~yok=SZ3qIvYgJl8aNEiwu`%cH z-P%CIJCbu@!u5I`UEZOU$rMdi7N+s@kl-k&!mKS9k!#|)bnJfP-d*ihBC#w@E!FaP z=nK~eFQSvSt6)kY*59m-_mHG1Kc077;^o-j}5NDkXK5Ez$sMz2Nt@- zbu9fv%ZySXgwm3&UYXu`hm`$T;+*9C=+&TnD#36>SwWZ+#nmNB@Ggi7t0cxL{1?KX zJe8s36zJqlM(KW8H9SmcnMUHZ-Qg$Dgs?X#IZ!a!-xpfdlix_Zxdnd(g4GAnP8-X zAonYf4w4|Mi=Yk8C!@Utd)2-Y{sQW1qP!IX9uvxod1kqrg1Lm+${WFG={Y8EgW*!J zn5!XX%$o?Adw0YY&up|{o(~0rC!P1Fch2?76PF7yDl3VA~%dKZ!nvuwG>9=`#9&$2{N1HYnshU{56Fios%-q7b;I=_ z+G1}mMdEP~mqQrfVdOg#-%RodX`)z4(F~%TsFw;~thF^*Lj$ zvCBFotXBnMgcGn(;2_}|tZkqii0P3fz8HZg57B%<6W);KY0pHOH>8D7M+oPA>H(0+ zZFcww>D7w>)-nrza3>?w76kyDR03V=KlkMmg=R?=2>!}h0m|ZDCBf;R)4 zg;FC*OV4J68v7i2J&@uBs{w5px{GowW!4@QeWYR`e`N44JE-DoACHJWlLAp7cnXl+ z3S_t{c#$U4D|e&34ol`sre{AM0q0b$su9swVdV($t`_ZTgc06`=GGXu0BBvyh(v^a z#!ne1BPbpu3}udD;hJ?_y%FH3D3HfubZA8Ky)x9N025bly8>@#y4Vm(5a-{n0jCj)+=gsWvrjEF*kq)21>WKtmJc>srz z?G2PvkygTJQCvc2*(CQ2BdqisqTndB2w~4}o$xm)9Y}jPlaZ8Y8I{Tjp{SzD z1BFvcaDi}NmCt1f%`KvzXY`ypj(ZbeAn89Mw06X!gaa7~ta*o&Sg(AcQLVYSIwIxEB!`OAz#CVSwJdRB`HQrae2CE04oXF>a(;`rWe5I-!Z3a6K zQVIGlZ^OICvw&Yfz!RCsId~uv>C79(&>-T6v6W92Dr0`43^dj-H*8O?(aSbZA;7>^o7R`ZkM6p$ zl8tkZaHfgq+_?JL>rPv{_fs3c`m=AIdmt}j{qd}cgi{{KtAMbsI47Cto7O0TmhuE^ zdx5No1Mf8lR3I5hUB28b^HLNN=fip#OTCuzFu|?}Lylo$bu@}~tui5j4Vs*8lDo*d zfiY(iM|il>o8gz`i6GP&^qu9awUx;-g-h~1lRFTMLPI4}^@>n7ooP#g7J|OBZY_I4 zR9Pl!uMX(C4rz<^l!l<676D>X;m!-S<(|DBHPI|4W{`3mS#23#>(KuhO!@uM?=SAm~bC(ZtN=$#Kp=+#Frk8 z$$xkOc;hj81l|I8Du44EX4^cf`&WhJ8|v^1}3pet|qNQWYjO3mTgsmV2xJHf3ICF zmyzdYk{fN4&B&VSJA?(ofyvxuFw6tV{ZWXnwD|8v6c78U_!?mZUcYnu2;*Hyfx=N= z3ag&*R(J+J$rA5qD-!QUg>U7sgjZ|JEBB(;~nT3;1Oh;VHB{=j4)@$ z3#CfP36c|uAk`y8IpovzXtK{7jd5;QGVs%C&7%Usv=%$>Q}}2=NYnZr6$CP%*ot~G zR5*gaxfo%r2y#M-iL$~oZV%Ur)uk99zcFHjff;kaq8Y#DXbkUTT79zTLi22$Y>QWe z@(CQNk}xrF?o2FiwzUHH*_kFpq9>3B5Rk1Rof z0AbyCIUdLy!g?`lkmrQ3?zrOYBoc;15Aj77sS1LD)2=HDz+|I*iirZ#-Al}M`c2#Cn49Eq{!N0bQRkGlUT5QxYj2%0Au$4B6@&b6gM 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 JPDHLkV1lS{mV*EQ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/hair1.png b/misc/avatar-sprites/male/hair1.png new file mode 100755 index 0000000000000000000000000000000000000000..c56b4ad55e59a627967611dcd2aac9f56a2ef722 GIT binary patch literal 4909 zcmeHKiBl6<6Q3CqNI)Ti9LhCFyokyQD7TC#5ER7^6kJ4r}m(*F8Pm@AdEfdZwfI@3UMc zu}T5}fMr(nUA6!KV&4Wy4A-E{Z7=W}c-q#|49MwF{(uVvj~#n=0Kl{Bk_#?GTqgU` ze?AQWQgz=3*yQ{4H~`4hTJ73#AjElmpvI@)QbpV^mt7ltDwiGohi*%6oa{Pvs`@^; z1Nyrz+V*nx%c)B}*YO)hLkOy?q*}3CnoI$8kn?lNBorj-`i+YdFQw_+R6lkcUKS#B~o=WWIM4_ z+uyCSXSKfOZDoveYHi-7ASRUc^wiC5ecZE5W`K+Lp{n}_ay^nNc@xIjO+^(0Ow+rX zNO^M4z?4wPoywkPxm7pb;5shV;{O)rY^wEyZL^S;n(eDe7$vTffu(K5njcRIZHQNf zjYp-WA!_xD_YV$$;6qIH8CEQ~Kt*+0 z7f-BM{SOl($^!$76B5{0?MIhwiG(Y^7+P!zf;JRUZYxAmKyWoeXr`rr>oBbL;a(#G z;R>)EhSF5JIyNRqk|^IE(N9uNPQH#sV8O1D6%f^Y82TE7@eK6^jloK9`%}Efx%VdFUmE-^kN_fA#r^ z$S9!4Nw`Nc=eQi6)_Nc-;>jdG3NWbp()P+|(1=7`L4o~m3;2wF@%WEkw`C+3(zsM) zv^cMO3j|RueBCWj()A4yduiWwHmG%3$iBHJ^J~9o{ZmWAGE$xs=>78Dh874~|DOB} zz0qK-`;X>EcKzia+CAnmsdg_mm?IMiDVBkR3gvRw%TdhC7K zE3(aRmK;F8YrY*hs*kwmz=_DYwPq0=CJb`e_nr^XzKBffvv)J7K>F`{p#ElhsXG6(kf7S zAvn^?f8)?2f#qGq@i^WK+J=d01f@n%gK9hz75|dCnyQbv$;SR3q5fl^J~bqVSJ5ue z4|zA|A7l>k`>V@L@WK#37n0m3SD3-&TA1m{q=%;m@U(hF!p6q}4<%vJh&X?!!a<=1 zuU#9x9_%2JzMQS<7%ZxZ(nRhz4m@J`Nl(>;z0ewX#%h1d;U!{oU^4YYo#I6%JK?P zs0utYI4?R3QQH(rYBvG$c6A(y&PGJ>Ob0}*H0BQ3;#57)bXP8U8yYdECPAQ!wota4 z{RQ)99oWx8JPsghv1UtFz%>nZ4u>AaT!z}{C`WC{h{g&SswY#wuB2d(me`^fZgCe5 zOJKvJBLwa8ko9@7-(B59&ZmH&fgwz!hlF-89|Ppgs{7#oM^{=Y$R}1uu;B*#it5hd za+we&(E*}WKZ@}sTR>EEm*%4DWCA@u>nEkjgo(WBCEMLlC&QtLH(1%N{lhOtx^~D{ zq!8&j4W7!#swM}eCjeAFT7 z?mECo&|*p%r3+P(?6vow;5*DA8>Y%&R(WWQZXj-|m!qny`=c_Mv} z!eAk}(hNaEjN_;<5?9aJOK@BRBaTJ=BMEZwNU)>K`hy61vpheVy9SYo;>95#1f`+o z#&H`+*t`AHD+zaS^E*Y(c1qbm(yA)ywOBR^v;=!juDT7hc$vgrLZtBMmk*wJu1KIS zk#C`pl?zb7!2NT2_&var*SbL9FYm`%@YOxa* z$D`M2>KUW#f zUS>yZF5NmaXVabNacSmL^;Ff|yRosc(p#(Z^7A`qr%Q4e2QD^0I?UFaadke&7L)cF z>Q|NO_`**dbyX$wu78;=!)au*gtOh(+F8>%zT0CnBz+mD=WBfAsQjw=>AOX4C4Jr+ zo@J+VcBY9mY10R1>{3q1%geVmXzM_mmeY?YjB&Y#S9{#~@z4CP?-zbFO+PxvA6@eg i7W`nre_7yn4_X8b^;{CDR%Uhpep#9C+m&N>?EIfz8R3io literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/hair10.png b/misc/avatar-sprites/male/hair10.png new file mode 100755 index 0000000000000000000000000000000000000000..3a133e86b192d135340084a15ab1a229e03361ff GIT binary patch literal 5123 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 MVrrOo`0SN`0yislg8%>k literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/hair11.png b/misc/avatar-sprites/male/hair11.png new file mode 100755 index 0000000000000000000000000000000000000000..655fd7fc2cd771c6ef6cf25febec06853cdb28aa GIT binary patch literal 5311 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/hair12.png b/misc/avatar-sprites/male/hair12.png new file mode 100755 index 0000000000000000000000000000000000000000..72684a18e92eab5d0991bed662e41c565af912e5 GIT binary patch literal 10242 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/hair13.png b/misc/avatar-sprites/male/hair13.png new file mode 100755 index 0000000000000000000000000000000000000000..3c7d91dc6ac668d39825217bbb3f1df0de8695b2 GIT binary patch literal 6128 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/hair15.png b/misc/avatar-sprites/male/hair15.png new file mode 100755 index 0000000000000000000000000000000000000000..6ecfbb677d3e55a479f3815355869cbe89c59a06 GIT binary patch literal 7233 zcmeHL_g7O{*A4-sNf)VsNKjM+1O(|s5fT+}q<2KRQlv%*m>@$NfdqZgp^LPkcaW}9 z1py6B2t|kzAyNXNlki@Aoj>6Fewd%;u65Vlcb{|5e(pNYe)c&h{x=f@H>VgU2n6E3 zj=W|H0x{u_ZuVn<2ivap0eCP4nj)@($_FJDffp8!E5=tqpeh{Kfio-c&hY?g69@wF zbR6AGJ$`?=fMH1~RvYcx3CK8lah0-T4rEo>{&mVT=SJ^&k-X|)9RoTNebr~wU zNf52AzIZ`d6QQ~!DZNKaU*A6~bPT6Apz6LD`rJj5X1rXBOUy*lpW4 z@tJAa9eG}6S5iJ;SD!H%u-ZC7wjXWyGV-o**umu*Z*OzVIh#|Z>Xta8eu%4CbuW>W+?aOwLg)hZzgD0SDBt}4^na!RtSeT`tyD*bicjrsw z2`HJA+Y3wXgHp;GOk#mpT`;=KsjRww@8^ec0(%7>0=osMW*-V{m^A0-Tn`GIJUac1;5DL(Ah^JRWL9=l9F3$+EB@c}yHE6uyc_ibQ@d zV>dd(#3T(r5ToD@#roM@l{ekT>gK@UYgl$ZCc;`$kMK!-_>nCQ|Kn5o#2+zSKW!Fd zhnA$1_3@)`S>izF4E@~Y#1x=MHb0bm^1-u_^17Zo7oGAr`HJKKnMV(LlivYrep2gAPVnE3XpNWqT96Wu7h^E2<~# z51-8|GK5+g2|}Y6x6;u1wv)i+F_fiKSWgJ~CgwETE?gSAUke zt@2Dvud4q&Vvwese2)_~!vAjZ{jsgzQ|N*3*5~4j%EJ!hQ_oO>pU?3lJwgY6)WggQ z>t{qL#baa7Sb50^ww{(lAL4n5DJZI9$U_ z7-e9X6rQ(zT+gHjryjU6)%cbc>ZL|>e|=1#u#Ve*y^F76cf@>AMcQU(!0%D|z&-Un zb4%4LrnCILgWhL4F3C9;pO7ZbfB2nPL#`qOWT?^@IW_|0^ohR8(q^4>m)5_S1S*76 zNN44YneA6r7bWaxR47K;`N5hBvk7y%?qRymi(Ay>_g@Sij25f+>}8ZMqDgHT6N4O%td5>Fx#7aZ7lBzAg677tfY?czqcF}9LklC-}4o>8>PJ7Fu$gIc3pd~Iny z!6UC{qQ)ao9W2U;zX*kz6xXs{wAoZTRp zmX$zV`I3s%d`4Dkl-zzbXg4;9{>fn15S24Pk63)Q{g|AEUdcAYw$QhTIzmQGGXI!6DSpHGHm6@#|Pc*P4brinfy)U z_cDMcAg2|RaGQ6VpL|!%E>Hod8nyZ`jawXvigM`Tx&!t^rCF9yy3GH?<5|&Ab-9KB z-;r9d<0XQxTe>N8{7-XwU6*P~?6Paz#pR$6AZmu}4_j<;3@jFhPj6|>{daNvPj*1fA0 z<9=9@e?IfkX`}NSQRW+|6CTS`Lb9(WA-Y@17CETvh>XdQ5H(q3T59EF@rSY*mQ(Y* z9O;D>gWsNW9*r_$b2tja{f>}AmllM5{eu&o<$CxT8$!viJ&TsJuIkJ*q-@&|Jrim_6R?})jI z_Cxv_UFzWFQgMr({P4M|zPN%(K2eQmAp{gP8+`NiZb9%|V0NQ!_|^iY#!Yo|B3)0? zm;OVxBi2&UCx(w7IxuWS4!FsRjAVADWk^@FhG^%7ZH|styQ!wkpbzQ{j|Z|U)Gt)R8-lG}>my7Ww8z0fUKl{P~Y zWkzpBi|d6NTc1?y^9U^Md9rTeta_`^{ie7q6wWCD^-y-QpU4!3juyWU-dq;Y$d{$20t$EiNi{J+@zF33|Yuj&_L z37;K%8iWjg6<5yToC*A|Xe`M8bFlZ$*bE)CTF8>HZ>!^w*3#Izjc>u{)CS_abl$uw zdcGg}#hcUA*(W>@P1;or-I+)G%Nt&)xw>^lmibpPfU+ltY8(3IIFjvZtOR9*DIqJH ze>z2w%X4-|5x!(eGV^u88xBGU;eNEcd*EYpvwk#TKW0YnQX#T@;iRY#)JL&1qEX9I z^DGVekuP%ObCV19-~wyUmoHy-Q8S^k{d}Vjqdc=&-NhpF1~rYR%yIEA@1WIUB=xa3j&Q$d%=3l+qATVLRfV$#zglvelaY^R5c_ zXieI?BW4rFvCVA9?iD-u>(XeVDeqt2Qbq7&Yv>QQln5<^;tmWfFE2lAS!zuk zP`y7UVciRx2Pdq zadQ&)tB3^#Es}X+q||GWYQ7jMSzN8)wfjY%H+sK)J!LJ0P4cfs0$F?gd+w>|>tc!K z!qUR-GE=IRTG|I6nVtJztZ;1mPK(t0PT=KBifA)zE3;y{!5y*H7i~YKmz)bQ!~W-P zWeU1U5#zG*qdxn?^1Xd(#^53wIjBwtLV2Tp9!>u-xOl5;NFyk;Cto}!3Tc_3|1x-K zq-bMh_nk1qkJ7sR{IcJKK)v_0?dM|e*-X^51!GFS;Xl51?YdK8M4wagqn#q=2dl3) z2Kf%10&KjdSK7!~eA~~G-NGD=^M`g1rctpK7?St|GH(x5^r1rXmRncyr#D%xRP!-L zrN?TUw~fzoeD=ojsei2slR(JX$mOy;?sG~bE-`MHkZew-A zP*fT`%9z@0mVX%Ar_6gO+d&c7POS7N6;wJ8cjI*`a_**c`5$u5?krrU2tf4;_w-i?fPMFR%>{WKJT128;P2V0}%$TdasnGaUpW@d}9~jB$j&Zng#k8O2>GpO36RhAu3 z>R(U%@b6%W_DiDB(M+(o*xQz7)14pagZN5DefqixbdzD@e-i00W9F#cPMVET?Ax~( z7g14S?WKu8$EShB_DDMoUzdC^R#6W-c>l#}l|K$tw6|)Zz|#9zv>mBeNi8W?D(G3O zIBAM4eFDP|gY$ME8Jg~#>?}L)(nA&geuhl#Zs-+rhVE%8IUm%UV)1@?dqSquy(=4|H6px z+?{Hee{@ok*ap*PbT-uNe%M~dNMBAl^D1m<@lwu+$NcZ6jp@8cumb%$`>R3mf;Y0i0WpX>S4Rr6~TgibK~ykz)%5gd0C_ubi1of{jP7FlT`4Rt^$euJ8n7IWL| zWSl$|;zpO?h| z$Cmh@Ce9klfkEZmms|jf1heCVI4K!s))tVrmq;ca>CwiwC$XR+Gi;}mGdDd?UYTrOmG z@vNPAuhkKYuVK~qMvm1+76ZWep%$tVh{wB{0<^=qLl^0vE^z0kLI9%q=rI-~1T4ci z-9&68GL=j+$w&ZP691%_KaKOrCu1R=0Srh1yLvA$<7L2(RXR$lqPGZq)pG#%&L&% zio<~b#XcVUW9-=Zh$&bVjwnKjs?v0+Q}dTeKo1L!(X2OI5$~i#RVby-C zRr_s`WZ9#u;Gmrik#m6KdPXHl{K!)QUQI70OLQz_|7K50n}YoCl^{)Vn0EIwiPbQl zcV<5^iW1@64uuT@|I8uYKY3vIZ>)dk^dCE&{+De3lI>rz{hI~<&n&pe6M4w?v?#zq Uy3g-42)M2rm|QErdgt+f0l44b-T(jq literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/hair16.png b/misc/avatar-sprites/male/hair16.png new file mode 100755 index 0000000000000000000000000000000000000000..99bff4176e35560454cf16076e912c3b3138bd51 GIT binary patch literal 6563 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 T`4ujJ_qll9NH_oNoyY$H$+ek+ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/hair17.png b/misc/avatar-sprites/male/hair17.png new file mode 100755 index 0000000000000000000000000000000000000000..1ffca20cf65000994c8f5cb25f1e0daf0bf65aa8 GIT binary patch literal 8322 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­7+HFAwBD?}rJ5Z1e~T!2apQPaU%y=u&`S|LIj5 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

    %F$CvCA~D zdRRuKw3X|+*ShRk;F{9Vv=2AFyvd-+YFBYnX*q9m~ zO&iTk-A+wxb$yzDy56?IP>Jp7=wWH;_Z1bszkBy&v)yObhj}Y+fyw~)6cWsH?sW8S z&-i2ENg_jH;yEEf+RjfqQ332lzX`F^G|~eAf6j{zG!y`i&M(%rKl{&hYXFc=0|0ur z1gma!03e>%QdKhXo%uc|=gH^*^!z}$E(yv~LK7IYZ{QU(KH;u2A(M)8-as7m+f4hU zc)sQ2K%_@X3wi$rL;DSZ}=bbYkO*Tp_bh`dXh8T`^^{M6haOTM-2 z=tM^PHhgV!v;1(M@+PWmcOShUclV^Tv95Jy$ERuLd_l7E{?9ZVe?OKZct~xTt-re_ zwUR!%uTmjcp$X>8cqVhdQZc0EX);c%-{$DJmMPEoOAjNbbx$k@V_~s!2 zB?wgC-ft;OxwCfD4crIR#}FP@Tg5he1Q&E;&j#Mg2GNB+5x38DDL z?{7C7vd^2|T$TunnjHXxt9W&Bq~JDGT3>n0puDwlS|2SnKu8FHKo>(%5upCxD7-g< z7up{#HM1gZTybwzaQg*>{s0OtWmEfvPBf=@mo%!( zmwTL6s2RA`@zJJ)#3*R8v!?+G%tpO@a-lvA{~hy-|9?m+$^>h_CSQ{(v$BijfjvNzJ7d28A5a_r>*Omq|caeQaN3y*QzPlX2&SAQXKS=C?U zXIccwK9Bs6MO^sUs!|RzaZX8yls-BI{q7upSjpc$@~@-6%<4~u{{qtgfAyQc&HX~J zzmxKZ&;RS__agWwQ~Y<%{`JDT2>4sf|3YE?o{Ed`e=^XX_yE?oe6?LLV9ATF0MJs? KSFKRCe)b>iK&y%X literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/hair21.png b/misc/avatar-sprites/male/hair21.png new file mode 100755 index 0000000000000000000000000000000000000000..08013ac72fd43e065e845ca9c92553c6af1bef4d GIT binary patch literal 5261 zcmcImXH-+$y4@7%RVmUmNRwWL6AU#-k=~^D5)`Eigc?MO%Au+>gJ7W-0SSiQK}sUM zgd&815P>5_kd}-0ymNmsEwp~RHh}R> z*OfQDhF~bsyu|uBwzsQiaal?|hEC8AV4(JS1xiO8ZTp2EhiXhb3zk0_xgi2xOM9Ign2YI1jkF;sFy$z*!`E zWfVXl53<9_0K2FB>}2_A0O*28q88wF9Vo}%dVB-0mI2s2^}E2plq4XdXXU92ysHP= zFf8;n01X2mW11Kz3Q&dv&V2#`p}@mzfK7Yb3i3_7l4VuwjH&Dz2wD()BgT$K(x2MO zO6t;8j2@>ro1zQ3OOCo!2RxfgE=Ga*^Um3S$WLQG^LFPX6vI@B!6+u9n4BcnTd7D_ zTwU>}1ZBu2UiIoxT#iYMG+}vp>SmXwolCz}%7f1xgS!TAd9mrV z4_#+hQgn{%=}E_YqgT50T+!BIYfT7Njq|HuRPLB7wr}rA-OLtNE}h9E?fiN z-BBeAPm?TmaHIIHFT!FS)V8z_0Nahe?PFJIC=gz;i`Wp-mfDF}s=Y9%!&#jWASg`u3%!_#@MHSjB)Ar>ewS3oI8L6I5 z&FbGIXfxafs;`tYl=X1GyH!rn_-M}!TOC4qKITRnts-TJCdlQIhOV`Nwb7JrF^E@C zfpvyfiI(D_X@|&_jAH%w!VRoHx-PoP$tGCqN(fAxPq`q?5}pX{QW8A>2r4InP9@i? zeq%9menfl3$4p>Nq9j*Ams=p? zzI4^B|ISS=0t-QbK;@Aor(yXz$84^+z=HK!imhfv0m`h(G@$D6uTh|jPdNTy@{}^T)7viFT%J&E>>k3 z6mpF|;p(-JQIaKQt!6W4`&wFyp~NEC)B5S2-Fznej7Ln`qNKF2biS0{a>sJOBBjL9 zJhD>TQr;Y2LOb@n%(4_|LNwgm3Br z(YtZghDz{zGnU2QkGa+*Ts<@$5iHi2b;8&9M5VN(01TDCDQ{J4w)50ejT)cjfAAv6 zh<5dAQRYt6<9W6%(IruyLIne~tcSgK>GRCz)@8b7re!+BX2r^lB4lCnjYgZJ7$%M0 zn9l-xtCs-HZEX3U%mIhrV@r=90PiFbzEnc|ETE zyEb#u?H+r)ApTy@y`I;?RKoni`iARl8N=t9xL>ju{idWQywUJXrTU&~dIos?V6 zUCo`$U8r}q4Yid(6{9|Q=+!LS7TRp0ntbAH!8UKLEo~iYwJVSnLKBS@jYX_QXrm0H zvb+gc=euvHkEoJ*u6KkfDqJP%9xBoW=E@1H@2>3J%xKPtY>52*M1`6$VVbFo&z3JL z@O=QA@-5~09L$SNwaD(>=WEh1Yb*8)=?9ssrPMp#x)g5}!QMe=s1G zsVbGr(=*rCynHig&);D&Y-A6aTbtXlQH-nFRNTD1nK1iuP~oL$o{fCqr_Mg;XH&wk z8vV;>GTsa2QN~c?7+Bq^fV7)*npMT*yZW~wrTZ>hoT}ed176})@erkXxp^C>L8Z3( zzWM>(4f{MI&8%=c%a-PuI9Ac=SjWvrDxP1y=zm;&)G=Qp)?D> zSlC{j6r-+zd02V24n67zKQGG@AKDnK?Z>4mz1Vt5+Bn~FelZ>OHeTOKlFxdjx%>{e z2I3FL(c#(8iO1ifDu;Y{j1s#yZd|rum020pEF5O&9pl*E|De5&%$rDWNk@o_B+gE5 zI2c= z&5^k}m&pU4;Z2_Krtb=0$8mN|`zNX&TX2?SmWJb=;~qzPN45KEm5)l-4xS&~bEq)7 z=fBZQF+y=dEx?4DM30U0ji^|drA&wub(nfDx11ukLL?a#87+T*(X%Arrv+bL+oxUF zzr?6K6Py%YzDPZKIhYT|Cw)gVXFEqb*F5LQ&eg8Lcu;kCVtqdBSO<5R`Go?+27YtL z;^Xa^wFjdaux)G-@)lpj(4?){C zIKl<14^}x<%1-yzgVrIZ8KcI%jV~H=D$(}d=*_U^x^U0^HJ&^r%-n7>{2K>pVmuG5 zGS|El=DXj$zqi0K7Zo6Kf*EL>4iVX`Xfkec+Ew4sn1;?JjH}t5&Q5L3M&D@*$=?~C z)!C8sO$N=^>xsDp9h zBxX2kxFB;oGo$rh#M_hgHX>IQuBW5tQp?9sd0EHZTSpu1A+sTTTdxbXOb&^(U;AZ%PNt+^W3_4u)tT#kYNXRzUHm?S3*G) z!-jmIWE0vNuE$He4`3i}qoh>sFl`8yf+3NH#xNscl`mb6R7h+9+FCHP=KvZSfSeqG z06?Ih<8Mdrs%#{qhYN2DM_(B5M+NSx#kvvutEa(-FAZH(m?Mu`Hj%jdB4{tqJf)0B zy-I}8>cGL^ya+#ullUg1fYw0B)7L!kp9fh|GZ=L3lDE>2ML)vfOSCk-Ons5*mg&rT zJ{b}N)o@Mqcv~!VL6vg(&5LIuw{n;7rz;V*UmXwPyJRZ{JR>rf8_Mg6NcrQTJ|g@J zE&;*dMz>|CXc+i>x!ZNVrB;w@fH1y&B&fD=ccx6Rth;G$KP(xQCtdZN6tTWRJoy9P z%b(Xs-r?>T)0VYD*hcXxfxm8yx>c^WGWi`{^uxPG{GKIG=35)txON4H754;xtuIVQ z=OuiIr0M&3uFI``%8~Fb@bPKqrl%_ro_O{Jp%Tu{8<^}9^XSN9Ya+ZDmtaT_kddjY z11u~*2PNgNh-#Jom}%^8YcISw4Jkc9=4R`0-3~8-t77<}_;FyMjPP_~r+gNLA_X#i zh}0XoX1Ft*IJ;>9!_xIFFUcRx+nRV|;`crShv(Z-b~4#HD+(b)C`!RwBV zQ3767{e&Y5rLkJU+U};4{V@{e3H&G}W~&pcy?lD&tD4M~TD3z**|S^l0=&-(&)mqG zj9eH2W4}vIasM>tgk*hh&|ccK6za6}ZQ=aWNHvR7#gv!uu@yt~LQ)@lY85vNOe|?b zHD!yi@HF%|LS6k%6t*YPo{TFFA%i-#GPM#CyqpnXKZs*Kve)|&!q$2#>@s(n_XWy7 z**~NH7xw=`&h~YYoD;CX!4S{ftxkr(!q4DAnP{f)&n)s285@F~*p>3tha$WaY^nUK zS-CD4Hb?^3in&r((%v$C;KYD`I%|n62s$XM)cHa*lu3TD$S0AD7^z;GTkB}99{RYEmE<%5o9~6&BY9&?lejqlCi=IY$ zN1P*flkGg-9UAap51jBmV(6mO?s1R*u@-K32`{!%KFPsC+KiLUc8NN4eESMatV5>J z)40i&w6AO_}@T&}Rd(>`$K(2Aj~#?xnKZ55Q@ zxKLBxdLND1ff%*p_v@yOn6%WjuZ<;n8>xX#6grNOc>aWFs%;bUZIg*bL$T}!N{CDX zJI~JuJu`LK06G0`5gqgd-Wa0Jv4d)CvQ>Rb{6aB;o%fj?kG=|`=@Z0AyoBJnnI7pL zD{pD^8^A^26n~g;{&#l%CtLqt=Kk9r*O=#LqMfjfkWD6W-rCHB;Ald~Gci|h5P)PU z>23DELQ79Bz;FH|G4uoU}B7Y7&@i-K|kv}N9u391R9 zjkaA@lPHS4e{Og+R3=|oDZK5eHzUZY=O_XS#fuH1B5!+ltRM7i(*2(T_)9|m4SWBI z@qZWGe*pdSz4e!V{bvLJt9$>$=s$wt-|zeT(O+)->EAz$ej)Mf^6y0Edn7VI7>o#B U@NKzuruP878%A1{n$8dY1@=s!rT_o{ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/hair22.png b/misc/avatar-sprites/male/hair22.png new file mode 100755 index 0000000000000000000000000000000000000000..31a259ed47a6cae730e95f373c59d74dedd27240 GIT binary patch literal 4784 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 ZJ4Y5J9gE+T&sqXNOHE(3LdEXU-vAmvlu7^q literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/hair23.png b/misc/avatar-sprites/male/hair23.png new file mode 100755 index 0000000000000000000000000000000000000000..513448cc07523ecfca88850ffe520bc6c81ffeab GIT binary patch literal 8350 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 V1@{822?j9mNKH?*T-oOJe*tRuLTvy5 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/hair24.png b/misc/avatar-sprites/male/hair24.png new file mode 100755 index 0000000000000000000000000000000000000000..a3b7fca612bdd73e29588d7721727672ac322852 GIT binary patch literal 4371 zcmd^CXHb*P7JdT=q4y@j7kZIi1*r+WN|P>~fQVELMKFLg;iF172r7hLB^Zi?A|NFQ zNDW1rhzMROf>LtvbG*Oq&+D%{b9T-=yF2IX^X$&<*`#ZxdbCs*sQ>_=HPF|#002<> z&juzx??HAd4xc;90DZe)0JtOlvw;@mf<^#<%FG7_yLQdnKg2)S+dlwe0E0mSg8aRF zZg~Pg=p4!tZe_X2rgpfv4>d|eJ~HyRUQx42Bmijx8!vsJz6HSH8K@fp zFbyDWo){+zkVOD41N{7#6E(GFmVKnfchNgffr z0sCbZMOPBn0!_*8uzXJ0XnFegd*}O5oWXj|cJDM4Pgje_E2d)ToFzVWk`wvd+*Z%l zN2>xf0bn^KYV1s0s_7!~Dml{c?5W@mnfDFq;yZ`QUXApc%|P+yoXuXqPi=Hc(y_C% z>uYN>hP_Y+*Fl@eGkCW%&gS&i_bAnq!-My)Rs^DDouc)~j^1|FRp)DY3HQ1!l z4+a43;%KpYEw2484sjg$rLGI}UDPKoiVvUyz1>g-D3u5DQjm*ibqrJ_ex#mT%th** zCbvA!+&exifKIa8`X!xO0R0bFa8Z{?do(4P)&Q8usje12rPB4ROk(~xtW zVO@Tm+%r#B%lcV?#X@U8hc@*-=6)pIN6^s5v&Qx(!bLa>IVd>boCuD(JmWIXiDb@xD`_Q} zt-OtV`h0(DTQQ8-J=Tmts%*n-p=>TODXWUgvdYCuYU@4gA*-~C8* za;mH=QP;LCxh&xoSIZMB;pP5T8qcHbPLs&(dW?I_V9(8q8=P0$`ykZroK2zPyuP$m z@pqyXdW9NBX7Ak6Ew5{PcCtFMB3mQ>K2@WjO_-&t;k*g zMw~f^oX~@_!?D4!dx^XScOdim_U(T4^ygG3#A5yxs$! z(`$GSH}dcqcptjBYf&Gk-cq=Ja82%sq7jZuh_i{;NDWA|y*MV5tAH4rhXpTb|Ip6S zUMz&mm?_su7%GUVS4!Sgol|O+Z`J6N^s*bCv_;t(+%mePEGbs2c>C6?rIYQwgcZ~Z z^=brrp45O-Kv)UBdp{1%Rw2nGu9Bl^oM?LG(Z949#LC%H1b3Mcf~izt-Q3-9KB+Oq zvBVjeqZp6ruD+N_c;@Gfc7-s3*K(!e>(~dv73uB9w8jgCDn)DscOibVYAPKvv6&g^ zfzV1`lPnDU6a0hM-JxpFxW=>Bx073>c(N(p_%@|iU$B#)!a&PDTG@+Ci%~SfJ#D-? zN0J7WbE=9ik8BS&4HD9o9)Ed4+-B-#TF%6j#v9p4aNB<9sJ^M(s2UhXpju_Ua5?@u zd9~`xhZr%xNwcbLo7~!{4xw-p-{>1%gE3vrAm1%&YpV6Q$gTP5Z6`BZDZ8a+*B|jH zE_K$VhqWvO_FUHcGa~b$>s$%`gPr;Fk6u(%^D+~aCi7HLzLxAf@x|9W+X`ht+4Riw54`*Gh2e}Hz_+U6nU(jgD6%G}+Qi0WmE ziNEf0!?~qyLJM{abPFvDjvd?_TFr*l$EH3lhM(vW{-S>@uWA=&xM%goXKpiQA`8Ad znu5wkMMg<}pLZcV#YAklRHx=S%2H(wt`x$qc3(RyrVh7>u{5+ND05N-x2nejW{(~q^!2ku@~-t`1#)HaI{-l=IfYj@t)+}4_fEhJ28IGoMTe3`$06Nf0?8=KcVB#(<7JM+P*%H0k+C9j95u*3^h6BsD=;JKT ztSllKY2Mz6yPO2!yxxSk>sy!rK)B#}1sV$g--+jb^H=@($prvZ@&JI{KhycOE&!0L z8)$1;h0cAR8#QHiWl30G(xfJ5mXVQke7WbC6j5XO!U;BzfGc=*jQW(>_NO#|J=&r&u+XRyB&y<=&6uo@=zymW! zEGm*3nU2EP%43sAdnfLCm*KlV$w)?~fhM^fpkXjmIXUMD}5hf0X+r+ixBJC&$Wr7wP&6F=HKCGzBg zKSp9zr_LvQcM6`3G`sze?mLtoDD+>S7X)VCafRQI`L}1-cdWHh(!1u?$BRs znB^Hw*;WOCTwHkSK!4)Q{r8x^j`{DgKY#+s05BLJAwePm2;`^zN%Skp?+kw!{fE>) v`TqClH;rGK{bBU~yfM=4o#)RCkw^*{)Si;+41PcVkph5$j;VGn)FtNMu6?MN literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/hair25.png b/misc/avatar-sprites/male/hair25.png new file mode 100755 index 0000000000000000000000000000000000000000..8344c3f5cf39c7f986654b139d358c52946d5d66 GIT binary patch literal 6867 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 F`4{S&(|`Z~ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/hair26.png b/misc/avatar-sprites/male/hair26.png new file mode 100755 index 0000000000000000000000000000000000000000..dd0a9bfd5468b74d7a88d925d5d558b16c54d924 GIT binary patch literal 7177 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/hair27.png b/misc/avatar-sprites/male/hair27.png new file mode 100755 index 0000000000000000000000000000000000000000..8c68c8292691139d0dd7c5a068bf21487fc43fa2 GIT binary patch literal 5389 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 a0OvGYzCGMXf|BY@KwsNf3#sY!@IL_3P~>j_ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/hair28.png b/misc/avatar-sprites/male/hair28.png new file mode 100755 index 0000000000000000000000000000000000000000..1dd090cdfe684fc745b6b7903b5a92b64b0e575e GIT binary patch literal 8958 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 r@NXyl_p1G=40P8#GObYnMkrV$|z(lTgH%G zvPFo{$A@Szc3(@<_xAYy{QV2+hx54ioX0)O`<&7C=`bt0dIyv zp~=4zc0W=AHz;-?4|JfJt|qFaN0@0goS5Xgt(c*?3b9_7@%Sz#rZo)sr1EAp@W zT<+1xk+N7Wl!_CuiwCh{`i%`ao5V?NNK;OqJ3dYz?;%d|f;&w}bJWXiR=M}HGUaVE zMx{5bXM49NeM#*sBkPTF6cz_UFbWM|e%lvPGs~k#k7i<A9E$S-j7x!(vOA! ziR>|9hn;;yyXGSsG`?)*1i?@yCN_FvN7_nBE;V+&3lVXO1oZZeMF-U@r1c6@e&X=PuxOnE=`x*?mAcI=4JajnQKsG&N@ZMMn5 zOnB2-_}VNn<&vuV9&XWV_gEkGZBOfl{h_tfopqd^E^CZE-PPQ8@wFlI7)zt0s)3A= zNSw+N}2N@g#- zg0#`Aj%kML>Ky1$(BtC=sjD(3rf|(Z5C85!#^~Z}Aq_53$JJ&FZ5r|X zx9dDmk58J)=L3@X@+F{)%c^ho`Lq#Y?Oq_~XIFfJ#;@c{JZv z$_kB6_WU{^T8+|cXw&&r2BSP`P;&O^Fsk65W%C<$;RR0E{~Rke`iD)jkIZ&+DgaZ*{=up$=EMvhjt z3wb~5do?svAVP8|wjkM9v`O{Rzm_}3lOm?&!)vpxE82I(vqb-szkr;jm$ z#ge`By>kZGuw;)swNs(U?0-KfzgNnN#iiVO8w3C@Du4BM5+K;c!b?l`I0)&lC@X6t zUpZY)EMP+#xm~EJDhom?wimKXO_4t1m}cWR95|kzVyActgfdD=M=J~T+S{b20}b1sE#eXIB-R#@?jN>(xcVuC`H4l zbaeL#Yh;Wv?|u62ur4eeShdoa^?8CjZ`umrv7YJL9w_Fvd_gU{%D@|~%o%RCG&1X$$EIHV! z)xG&x^gTxHy13T^p-hXo7Jlyg(LhU#)mKRg$Q>#?aC3l<|bzsM7VM?D@_6 z*^3mlDm!80?i)pv1=(x{#l}uAKPI-{l(hG5>c`$hgpAUQ=Gw#SNgBLEdNE*pef!QD zZGKZpCoo0y$MQ_KNnu`I-hE4h>IO-9VNNZ0tN?_ZSo*0oFW)ey%u~|dPO&uYVCN+? zVf+{8ADvt4QCe_a_|%S&BPJmsK|ehn(gmiCx=yW`6=eJ4&f~E2;t>(T#~>&AO87GO zdg{uKz%j_DevMv@AvgtANuzn{|1rKd;fKZZV&}DB{M5(33IwRDCwj&E><|4oEOo z1#Kh|4WwvRdp`!K-h3ZK0bKzcsH+sHgF&Nt(5Ac?K}0hg0^sm_cCwAM@7M{%nI0C7 zJT1qPIr%PGv8w4n@MFP5L^(R2Y#%}vNUc z_B%;JOQ>i^YhE*2gc@h(Ac@->5`XR9QNk}twJcB3(>8DlGIgnoI0z1o` z-*!h*DSY7yz9pQGDAz=UMFrXy725s$BHX=eBD}pfT3${rP41fK@_sqOkybitR7ejb z^kxVkYgm+0Irug0jhN01&VF1(1g z?}T-NCB@DZ-pv_|9#RG{oP2RxrL`DBXP_ZWwXt;;m(N5*-YrXejUj{_S8@Q158*&# ziPabogu3tgI}5Fx>3m?~2bw%-2nlWI(Q{i7UXWRMX99N}F+&e6 zK9#-$=zfwILyVMx1k?SGEj7V zF5!pJ8emawKsg1Sk*#y&J NK5C9kP{CuhyO1TKjF$nu7p|bs(6Z06Qcr@AS+Uo& zKP$N-CqtYJBZiz47kuy{{PF36Af^`C4r(u#wh^Tv!Q4HB$rp{dIAr3U$v^+n zF*i52n_$&*^Hp$3Xw+;|PS@!ZJq=dEDFeA*H~Z7hY61+l7}UsxhE=_H!!gUmGhsgA zL80ERJ^^dvOAR6|$dR%C_Iq!a=thUVjbXW)HZdJ9N^QpL%x7+F-(IV(-{>Ej9vk^E zflsIO8V=lGr5-D*srjG73zQznvlp3K*2rSq3tpIZue&<8_pV)u%zqCI9`~l#%y`uO7|Nn#k4EL7C4qI~4 Uiu_tAa;=8a(>B7FXgb{bFHK4=F8}}l literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/hair30.png b/misc/avatar-sprites/male/hair30.png new file mode 100755 index 0000000000000000000000000000000000000000..e432e45d2dc9d1c9184e83fac5c51c8f09f627f2 GIT binary patch literal 4902 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 EANif16951J literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/hair33.png b/misc/avatar-sprites/male/hair33.png new file mode 100755 index 0000000000000000000000000000000000000000..812265e9ec6ef8cf66b140a48eb2b75eb8eb0a70 GIT binary patch literal 5295 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 Qh#euIt7)K7p=SH&U&c_k^Z)<= literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/hair34.png b/misc/avatar-sprites/male/hair34.png new file mode 100755 index 0000000000000000000000000000000000000000..616db3ba1f03a37fb5c894408f5ad605103c2afc GIT binary patch literal 5258 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 L2AZ|%_R;?V1LnQ& literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/hair35.png b/misc/avatar-sprites/male/hair35.png new file mode 100755 index 0000000000000000000000000000000000000000..2bbb09295c4f4c4f052ad46bee0fd89e7e4e93f7 GIT binary patch literal 5187 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/hair4.png b/misc/avatar-sprites/male/hair4.png new file mode 100755 index 0000000000000000000000000000000000000000..99efa27a87e921aebd72c7edbffc2535d9cf587c GIT binary patch literal 4660 zcmeHL`9D?ZA3x_fZueSpNvr!yuN?K_w|~7cwXmu&gXqTug~*5@Av096o^kjBShop!SO3Cr^HSObVsB zFaTiZp$eu`6*DPMuw?t{Es7CLw1zo+VVj(#?hyAOgVOYp zzU8jp9!f{uCvX_cjxmO7jTQ+fLf*v_$z&vvlYB`p2*qZv!5#<3g`aRQH>C|!f#B^p zG2D3EPRo@KGTo9#P-*Qedh{^el6TdQ;FL8>6eE&DkhFdb=rJS_S>`VubIpcADB<%e zXoD>TnPO3V0S$zIkXnIq;f6o!mAq>b|Hm)%M21$Vjr@%)vR_$>uwUbv<$V+&FJxeV zC^CvlSN4YZ7ExMOU(@P&xhd@V41-27bgCV40vVG>YmAqurIm)SBy*Zz+AD> z%r+%~?fx*zWb*+&E&Lk~#hTc#4GVA|3e)m{o)bh^!kK=oHq1AOH&a3#h)OD-4ixj@-)aO zM{8?XWND%*2%oJh-=Rw840t{+WToRy=Ok}FN^6tKdoWb1zpZpE#I5komgpAi$d28E zdn!jQ1s6Y#Zqx@FC)}9WI8&Fk@WHr4*1BpYxcH(rYm2XcVwFQB8M|Hev=GPPBU^f? zPJWcvQsa2=-f3ytSD$wBdAF`jro=tVP7)xpvV~0woth{E7(jZB6^giF{-%$Vwx!8P zkAB$8WkJ@)3lpI9=l>ZEq5oTB&9ZHzdbv(P^gur2${2bPZ37EPwe=W&4W`66WPWB&*SvCYAkMGp$f;SC>S(VGLMNZ7wOdsK6_Vx7@GyIar z#-uCnN8aRhmbZ0|l}m8f)$_O;Bl5Zqj80LcInq_dbNwizCiVC7e)QUmk2KQ9;CTk> z^Mtl4*2`173NAIj*~i~L8MZjG_+IXt5vezUR?1oqQQj>cu3Z7utG~5BXNP)Cl_fE? zmpIacHgwsN;37@K$YkRW)1w=`K`oQXY3rx+-*w!N449ncQq>J5g$T#JuL>KjwZ+uZ^`DY&*3BH{!!@ zP9=TYN8kB=bU5BXIt`{Nr>ei$&rfq4a57r>uD&Vh6V1WliwItvAhlab&G zs~zp~sGgno*Qy>UCQko7;-nqcP_J%oHm(FgZ~H)gA=V89&hXReM7$Z7mRQiNG3NMse}Zl(!AkUZb*6J+Na3~&hr@5RJ|oWAF| zk(RihqCi4UDnL4=YI0yn00hqjsG6df>ctTolJ{;h;&Rlzq6)>A?;M)3wix9gOZOfu znD4w$`N6NOoQL+$vpb^UdkUeF$n~dJde0R|-D-L4*L3f6Ga(3fX2%1g`sVH5 zni~5P++`nBq|>zxIE&lA-0M%q6G`WSxYj`^l`?y1J*JQGM|_M&`es+L-zvq=_Q5hY zP-QM*MnE2{+tAj?5Pc)Wnv0*EoS5foN>!waA&05VAUsa^+3;PjQ6)dDXp!C<^r7E> zA)Yfk#M7O=eR!TNSVYY^h_3O|X0AVa3;K#8xrKLP2T9}=R z;0H?W{GFN}0h}%^N0|LMy#LxS?tHtDg|g%xvVRf=1eolGel*5lrJweSW!GcC4b7-m zToS7^OY^VIwbAmH2#m6Ul9L9Hs!PDhhiT?OhE1po*- zprSKJ_(2U3pLK+M0>z$`4LmYeK_$!=+hJD~1a)=Gi4eBN8p`F&O$vnZ{StO09wvZd z1+>ewZ`ly!%^tT8QABT_X5S@sokX!Nc4Mi^74yQ;N*RjWqK9)rM7SSoQdd&M={@C= zw+5`Iz=FINIqj3y$0l6x4CIh+$@|4C)5kXQu;hpM(9e}S9K($6$1-9+>psoP<%*0o zx2pVAjFsS1$$7Mdf@dMe6r{xkG-rNdMQ1h%c4YmvZt;Dg8wS|Ed6WgSYuek!|$% UO7x%bKRtk@*-6u?#Z*oP+bsc^{@N;_3wNA zF5B5+B*k}#0{|dtjkUr70F1V7$nT&Y3RAxYdceYP7z?1NRcQ=rAbib_nFBy+y2Ogd zCa5hIj3tBtfK>gu!5V||yZ}H>!rIE*A+&%xf*KIO-KYG8uzR(h- zjy_U>QzL<3D8X^uF&pDYpRaYCjP5dMI@V?IX?uR2{YACweR=t6a)kDdgJ}x45G8RV zS}puVl(NU&!-Kclf?8wSwlyEr8{PtgBaqT4kOF+QmEaPvs_(3pwsy_7n<8zuL^zA1 zbJ3}Idc;)y&{o7a`mL)=z(+w(gQ#;Bo>@!wUcH+_HJaipMaBCM&dw^@)SFZVv623k z$9-abLbKxNcj-)A>w(s6jItoovI*)l!iPJKYyPA?uBjCfW4Jb)t4!N z3<_>VIVC1`T~>O%hNR(AE@dPCbiYCSzqmJX;9lM}gWwY!{Ythv-dzW*t@s%!8}_Lt z47Fms5EO4{mme2*S^+LXPX|wZ(X2@>H}ds;&rFGws!PeKKQA$i14H(G`=3+vgc<6?lN|Cuy?2^FVX76q2^1 zsIPf5f#Su88k)&0$Q@jsz7JUY=oNZkAdga!fAWbcSMAS^+xIIReXFY?Nf`>&ODQzZ z2nCX=12qnM!7}CsuD*6IJD(Qx7!76+j`@F(fnv)C%YG4oKS<({4_L~h2s$cke&d2q zZc5>QnCTBReS5`dUii)(WQYgSCbR-B1$e@Fn$tqtgngfK$zXY!(ZfBh`5$JgdA^&+ z6_9`W6L1Kk@b4C7Zy8wSoI3EXRN#4re)s}eXl}%LaXUEiME8%xti|QV1(Q4Dqd{f& zpE}s5AJ7YLD{p&|&JE{(=8tXXHC(Nhx}NMr@DC1y&Sh*##L{mg&4~`_ca*!WFWyho zou|_KRtNJjETu+0_J^fIEUFx)mn~uAUT*09!;06=5t4jr%bPb{?nerHq+=LvgX6=M z7~kU&xh{sR;!qss_z*+6F?i5xK~*BB$5UdqyfMY!dvbDW?rQO3Ys<_G&Yx~LGi!nw z%3QLyL9%m(-FQwVS|>ynl;YU6Ed`ywj1_J+j+`F}`@W48sMrua^`<6uO@XVwyv4If z!uPve=Kh;I*w12kuL4ne*?P|28d23YHa4mLC*P|k0oHuqZqBhYkyp(YM+PS8TIT*m zJyO0H30f#jb{w~joL_MH*8zk)*S9}!5BMVw43JLk-Ci4Z-kTd0PZCV8n)G>GKX~w9 zNJ2!UF?_FR(;3mS`H_KKx}1NNk9^9JsZwCCDyqSG5_dzd9dAS(U@Aun!xcu}Yf91b z-S%9{YArluDgz&4Ph^u(!{fL4uD1|Px%mh!xR*KQx_Ej?9{=;^6krTb*m|}>Ob%A2 z4i0Q)xmtjf>uy+jwB_qUWf*S2NO3_M?)9;*H@;|HR4^+{9azRECpA!3>nG)>=#3K~ zv{pbZcI&>D*^rmA*znx33ZR*pL`VZ6!of0z?`wiHI?ijmHl%1ssMJRtBGzkRP#dFX z+ABqxnE{LGe>e-n0z@<7CCinl>l%iBjp>#`3(JPh;Op{+U27{<#;)nLgd#RXO-t3) zgtqcJQ;3AlnG9;ttdabWNGAT}#C9GOzFB>&#>&$#Q~u0d#VpI*c^&-=9|4$%ZNkNPYUVYoSKpX0}Wa3)Ty75?;FiNJBneMR80JrO%b zY*R^-JHO0#=e~0;#*enlx zQr)W_7nukvi@}p`zI=>-7C)&|$rj`KD0FuXL>CW5M7;GU5?yY(7RrV^GCHi>Q_PsI z=%0*mR!COvP{oL9A3<~m%c(>L2?vUq&lfq*`V7oIMlaWm;3Mx6VwvPCo&=!+D^hRU zAJk}hW7{SlHk2SfGFLgpuPr?w%ua?kOQDM@{Q6zJDOYS4O`twr1;+L4c|%hU-A(OnsBee z*fE51aZ~uIfcW_A_j?-qvOQl$u2yE8%nqTmNHVha}cB^ zi+ELtEV8KmQ5Q^6pnBfTq%uuAKA0vZeT@UcV4cfy2?|7Z^pK#c5IJ zV6s7Zi4_P0)@cs=s{tHc`vV-!wv+G^L((e7uLcAmu(5s!?DM)O@BM$!Zw zNLrMo_JiFhup=K+#*jfxKZGpF32OsV9yq3Z#q0tHY#@`Yq-9b7Yr0DF{Ew8ES&%7` zc51_58Ti8)6RE&u9movcSvWy}3Zv0|iZEH?j{g;)9t9K!d=i`%{)BG0G~2iJd`?WP zd4;q#3cM%AYo`EviQHH0!UQ+o`<@dljnb2bTjS1!kOa-ECRG-lkU|ZcaBbl-5HfhN zZIw7}rb{JlNS98UP%ox9k@=pI0;>X^# zQPSuQk%zx`zsd=LUea2uA1Of-;4bA@JY)Srs&sl5uR7l=T%3xiHqL2%$L9ycKCS>! zkWN{B>KentaF0ofn$&tI3iU=^YbW3j=1%|sH5dBUxi(-2hY#5uHMP2fhr=J>hxeJC zg5lV$IS6$}kaCpdt*Md)JlWCP57Izeqrje1fG1-k8zD(bhT3^^ICs_UAf$Xd1AS=qz^Qoz{7xtSFP4*3>rE@S`XPu%xH46gVIr!fLj)t-x z%Z8q=k2fjBlu4!Ra%Jiiai-0eJ5RPp_9p<;X=Hfs!N$6BrI@2(XYL#3pVLt4T3OF7 zcdOD!D#zcr+0a>mRnxOP1y#A7Gjo-iJSe#>>?;;>6ADvv=B_0W8JWKc9wCqpYHwWw z7E&rd(QnSVhfgj$E9T~EUKnDtoDD3vN?k72mplB>7qJ3+JYSEbp)@uQT{srSFS=Ur zqjjH}6-aP2lsQd4@n88Bs#yl2j1V_{;=16?!E5yTzj~$z3=P3|EHaegqV^T z2n3Qijj?h7fxwiX4Yo%xLZX{=2s&_(gN-Gqn6ZCWU_iZ3*q#7^N|VI5-Gv3Vs6WOf z2n3RB`q{v(_&3)RtEbsN`UORVE z$#CAHR`t?-SWuQ>&~)miPheU705^lZxt+C1V0ZY0^%ZfgNgyx;3X?_v|Lq^UGQaH~ zxx7zFDfnoK2z*#*thCm5_)pKPR{^v}H!-#|-SnazI%r|to1KTt&rGeJyn0oNS}vks zXHQ>BFE`|+dPIfBFZT5J_wx^qKd9IB=k+S<1a&dFEAbynJw=3~5JgCTKjP#khmb;) zNgV+{b8UW0r+&DjuxA=fPuY}H)6bw8Wb3;7xo_76iL;9`aUPxR5o`rU z`?O+%XF)_GeEQOa;QJ*{8G8xBEgb5${G2ao?q(43Sz6hl+o;);?GxcHcPWxC?N2yuV z)y?h3o~iEDCLuE~e$K~)07j=;Q9^*n^s~(LPFjznQ=_35vEW46(2PfG1b5Q~)ckN* zjIMsGd(Oa;+>|96rM-6F61Mth;%ggJO~Fh<_XF&O)&1oDIKZh}#gtVw)i$OasxlPw zr87Zlq)LMm;Lox_$(vw({Z=^!b=dUu?Ri=4Qyk*t*jN{Gt!-&>r1fiY{r|X9%b0a1aG&ta_HHy>s2vc>}1)bkQFoeqn zf1y=sdop%nop`ViO>@&>#~a_RxNDrClz^0zT_T&OJ>$}OWF(6|pQzR_dp5zZMhlOI zvE#E=a!;x?_-?I9`HB^tzGu|)(tO8eYirB-?+qT!mLt{mm>A@zGw1oJqBH+um!pUB zH;0gSsI8H&*$)ak+m;%V9PQO^SO{fA>Uj~zJPSU25t+}KRXj$|H2()LF~R?_Q2GWW zs_zy*y;9Fv*l|hb4%dXd#Ph$loh=1_)}gES54|mI%n~)0++zTKTyK>crbgea>%L%# zkNC#dsJvT2!_gZqLR)+*0jCbxB=UEc45TBPesuX(_@2kRFj_)__fgqu<%{Q)*Nd>~ z)g@-w?48~ju4^T>er3oFhYKg0vP#{XZh?{{IYX()t#UXjH~LHsoFwCx_!>iBg5 z6D`j~t}r#C{wj%DXWYIWl<+zWahj(+vnLK(-$!sRq694OEp5v z1bDF4KF?%u8&ySd?p<;9vU|rN*Lhl>mae<=c8XpQk1h{w#(#{7WBw7c@IDWUsWp#I zq@@VAIjgDB4dsscG}K9yeCcu>&agufy1346y=ptt_TjIOMyrg(G(AeJ@F0U!lWK%q zd`Ss&IjYtc17#`VsNHH6&ZGLKE6NCa!g?`IVY6>As(5sS?tg1?>Ka6IgDgMZKc0X) z(6mcy^*=|F+c9e>316rv$;-==WL{~`Is)xPe1NT9BgL6Mwnq{;+;p+MlqM0sA(0EWEzdsQSR|;7M2YO6M zYSxJ!0akq0orE#rH~-&78yJ7^q&`lbIBZ3ltdv7+eurX+=H90SFN7HYhO<*L^?(&~ zG0Ju*VY4?ym=l!0|WYG6XM&c80lh7$U$muSDSB z{&deRCxB$6yT(FuBsCdbDww)#(0x-QOFJ<5u`EO7o;jte=)%AtgnIOhkg+ZTNRt=* zir+Lj$7)0WZ9I5bP`cpG19eYI(M}9!q!ROSMxH{n_r(qW$XRW zDvZBiv#Zd;n6K*N6lk|Nq3pGWSrI!9X8OY#V_cw-DH?UC#bCobX>?(EKbJkWgQm!Z zo@X3W*oVMJU-#K4pT0nrN>1gskB_Y84yC3tj!plKv!MI4aM}FLHcoMk4hkqc7qLfe&U&*siEpjn%zh|e zr~jC&Tti;`=8Bjvt`9xCo9}&)FGx?Or!K!f6(M0rPiP1X?xiL0mGA?G?i}cyIwCDw z@zzn((T%var7;KD^VtqMK%fa*&QA9@(CC$KjFSJZE2UbkQMj9SyEuQZghc3wfmxOD zk3|n(LQ`I2e8}AZkG|SS{?C-^W%qa4tXxS+1!MZZpQbyV6_3-UgG)p48;Ts~nQN{_ zmwsY4o83ji_nYFGb&Ep%bUHoM>qoA?&Es`Lzs3j%)moSn=bk7yztrL07WN-3LVxl6 zad*NrKmt&)danOCHjcgoePs8`ddsUI$SI|Kd6e=t1F1$wfxI{}tI)r#;WO&7{@QTt zXE?&m@$0J;hhUNs(*j@T6Vuplr<6nQsjS5OjGA87 z`?NQ#fGrWHMF4tF0)wyxhaqnE6&02HS(D;eEpUXd-s?n}LstNjoZS#XNQ|;rkS{ND z$WmbE3`}{zC`a^5rexXIeXS z*fI5s9Kv(1)+Cl8FOA4_O@EY{3YvZ4@B$Y52ri9Kx%h~Y@enlIQS(ARwoE|$L3zx# z9}vx0^;Gp(I24Kzoym7|AW@wRxLVz+VDM*EHkGChJU){BQT9fv0C}J9`rhAxn!M*u zmM<}2umjaA<&hRp^RDE%HNpWPSwYqsXCYL@w?1TOnxZtKGo3fG4?<<1@%tCbOcrdA z&AIxWlMrgeL$bS-2wX`iJO^oMgA0 zWoK`1>>Gg~dAju?ofwcG$zu7@d3X9nDMtnn&%4VZcka0AmUj_0*DDM!&?Xl}$k;M7 zQ!YD*tC7;$x<+s$1GZx^prwfgF}}M_)$< zhK>E)e-c@Ne9i)o$YKTtzQZ8Qcszea3IhXAo2QFoNJZS+yZ5~&C(0c7ST4=8ZS%VY z32fFMc6@Nyrs62G<7|2Tu4aXf4V(CO^-MbCbu@RG3orn zUwb|n_|Idu|8wuY_{W66CyEXY42(=H90Cd>j`1g*X{L|bskF@(kEZ|HeE0xQ%s%0l zyB|VA#F0r!=*Y86d${lH-CVI)bp4dq(o=&L$Hf*%%xFBxbH#ks(jAey`cv|rUbac+o5!dx zg~i1Ih?=IgdqbHyPE3wWOiBtsqBC@8=vIAOulhe8mh!0ZVQ6Bf!YOpdeOY-4O}JeBL-KKLFVA zX6uAC5wouVfS8hzzMe&(J*OW}{MB;Tc5jEZ<1w7K*MmfG^|a25{$k?U7A1}_yo1~H zrO=-UO4Oiyuaol4Kh%@4a0E&i4Uz%aPuBoX!_$miFT1(9UH10&o(&O;JzSOr1rtWosOm+Utlt42ddUPy9ZNm z@;ER2u&SKEvD_8O!O-D_uBI44!xxfjx=RV>=Ciy-hF4or^veo&PwMwjMlEVhZaTsH z7yh_$f*V;JaeLd+U_7>!v^m|_`I*x;Qly2~X>7Wase5YtdR2&8-O>!>bHh?bZ$-h} znM_Zwx!|wrWv@&aHRjVP;=yDo)cnE2%lW{=w4l`$6EE97o?8H~$VOUHhsfr(L`PsB zO5q zt!>&H3{IOsuLf&OM`%#D!pAYo$S}EUa$zD@$wU5OEg}L6bZ*4kggYPz%b@ zdsxh_{V6Az(x!(f=3tilJL$B3`Lh=pE zsy3592^4)u<+1{Wyf8FE`soH4^Z%@2rjuR~gZuqr)5l(0;3u+owPoIGQmNxjCg}3R z=D6%W-3`qp?G(Cq=z68(n(TB!ly$V3xtIcDI7cSbZ*q$E+2c_T**qS#c*rCy? z0+ltZn1<0y+C%Lu~c~~c{C#6vzqSsRL`Prp1z$g=2_KY7g+3Xs^OrXN@D)KHQ17($6h-H{*SMdvfYjQi5bgyCP*qobJ)c7rgK0QT^TfmH zYPlNG6n==UXA!=@3l@Lc!OKo!s34h_8bW+On$KPB`iAGrOcZ)H8x!RpQWck$m{dPL z&JE8$apd^?TPF84g%bBVVZY≫|R=`$SpM+U0pA$qbSedH(w5R>9r}tTwzy2g>RK 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/mouth1.png b/misc/avatar-sprites/male/mouth1.png new file mode 100755 index 0000000000000000000000000000000000000000..7447e1b96afba94d59ad575acc5dabfa7a3e287e GIT binary patch literal 4223 zcmeHL`%hEZ8a?M&;Is@<9s=_6;4pG$1d%%7Vjb)O!NPR}LQr`OAP?z)Vkw2<<=GA* zkcynhctr>jFCapBD-;9^f`F(z${-D30TD#RR^(NnU~gxVnSWqna)025FMEGG+3VX` z*=v7UJJZ9BszER$005xj>f+=H03h~zz^cj>cB}0Rr#M3e3EYDY^*l9kM*IeR>W{PX?B1S zkY@{jidK1y=Uje5o!k*M^Fsgi*HP2$yEt}iJ2uhrlvX;ytjgFU?Yq!JZ^-v_hc0*K z-}0y2IPOr-kxleuzeG@Rj{psZ54cR6<|4S8yg!X zr+FndjRS|H$RCG?hogOWb~*mphCIs9L>b?I`F27)ZS8$Muk*RPBH2PzR$BHowF3Nj^H^N&*|33B?^r(cDk{G#k4bU<; zrPfu{t=Nw?km*NZ>{)5^PMGL@7j1;_;Ghmt_3*%E`ER?PlFrnHXt^K@lLROBPs`2p zt*kIb3&g-*pZo^BiF>9F6Zuu1X}5rHTQ5pn5p@vUi{f1LP6!cr$Q@!<|hsruBXkgzdN2<5LGZCi~<&rfbEAPOd6 zY&q>91ZC;E>_QYXdZ#aG=^`^>fi#jHGV|_(GrR2;R0d5~@Up2FgYej){p-~f1bx;t z!UZ@>FpMqzHi?Ts5H!N0c=4DLLGr?_QZ7p@OIaaxTYo4z zg|`$I>h0&pJKZ6~6TPe0fKL@IjLJQOOc1aa<-vBiyuApT=h>5DpWQbd&!8%4>Qd4~ z=H%g?#yQ-(=~mWY-<)=8Y;d<7#}KxJrqk2MOWc@E?t(@-MS~x7Q62Nlab^D+d|wBI zX0>6EWDqzn?)?ExCL*)n%@$F-vfYDL$n+tTH8K;Q<#QfZk zKBTK->bV*Zk(vt}R`W~EGYJ2_02;BHI)wF}E0hzAtM`FZAuan4>K6p-s7zT^hzol6 zbSzy_K6nesiBilVKRd+c_T0F1@|vG_NmyVU$@EoHal^>a+Rya0vC0nNgNgZ;8A7pF zlEewAL}4sAP&9wGE{q@zS+SADedq zomi1*>sY&QA1O7!pL3cQyS_NHBI9$V-DA$POTrqt&(Dnfx=x!!y)NA`s^6n5nPVE6 z=T|aF8y|gNKVhOL)-0O&@7<;$*;0^j-R^;=t*tM$q<`QV4ldS#3llTx@{Kzt>HUve zbVs?|$jzj37WqoeqZk9<#LurK;Z5P%sj^#bGRG?`_V^H^E^c;oX_z&Hiza4R_c65i zqzjCn+KV?tTwei{I-&TdXs Ij%R=QACdxRcmMzZ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/mouth10.png b/misc/avatar-sprites/male/mouth10.png new file mode 100755 index 0000000000000000000000000000000000000000..dd14da8a95dc5e1d33e81c224fefaf30dced4ca5 GIT binary patch literal 3221 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgF}}M_)$< zhK>E)e-c@Ne9i)o$YKTtzQZ8Qcszea3IhX=mZytjNJZS+yL-Kq14YbNLSp?mnG!f9HqyX;HfT zj7%&X0tyZd45N(EKp0I4qq$%-7mVftI_H8}iUtxqw-#SqVJpM;fB)-%`Foe#o3(I- zH?V4A5q|Og_uI?!H=n+m^k;|Nt)IK&-u+qa8oGB4pSr*L>*nr7FW7E(6>Ew-FJ0mkpI(~ns^acW|gfT4GfJ5OqvdTr{A_~S;RfR-1~f0TvpKe zmCLU_yw=OWS*F?R-QZx%64X$mzrDVe#e=I~L?u5yW@Y>IeukZ*3TJnC?^1D4n9;z% zxvk)_kb;B4^ah5LsxM{0P83i$D3%ukWIhoRP}r$5*BNXZlgf=lKvNkSW0;s!rY|W5 zCMy9ShX$7D9U$jU@OEf;GO2_Q7}QOi91{|_&GmrHA|Nwn(m6$k1_uL1MxmUC$5eq# zJx0b!-j^(a6*Y&NfZKY#k>cCM&OcxdePCF@Sze0I0W)b_LY?X)|pu|f(00Shj_+_LL#p04)S sXF$70+XABvqS032aL5G#!Hwl@j}2S@w6FdE>`E|ry85}Sb4q9e0KAn7kN^Mx literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/mouth11.png b/misc/avatar-sprites/male/mouth11.png new file mode 100755 index 0000000000000000000000000000000000000000..116225767e745eaebca16d2eb84ccb8777a2c89b GIT binary patch literal 3250 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgF}}M_)$< zhK>E)e-c@Ne9i)o$YKTtzQZ8Qcszea3IhX=yQhm|NJZS+yY|_^ff8&VQcnGEn5?o* zEGldAwv`(@!pC$1QV&!`*ZeJ?2kHAx7NRG{k7%0?R~kMk7aG0^S|!zs}FY*3|9P`X9IF` zA=6XwFE5k+CFk4iu&uD$Y5bPA>*mReZ%!9j^i;1GQ*vl^cOgYc+`04dNepJYhVggn0a!GC?nHHCN7u8Bkfn3SU6I+ zGz3^D&Gd;Dq^aTu7T?3%xBq|LQGI;p@#VLH7Ke!5h|$2v0>P?9{ zv(Nh6-Yl2Dg-k3#tf%bvf8N~O{rK>5`Ps8M^=JP~h?0yE+x#`_|61+b;LExCOf0Lo zzf|q@+kfA@-$0|xZnU8=+FBZIDGrZZP|y00A=)F&J8(&G1hAjM;OXk;vd$@?2>@Iq B8^8bn literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/mouth12.png b/misc/avatar-sprites/male/mouth12.png new file mode 100755 index 0000000000000000000000000000000000000000..ab881c707185a037c71a2a9f5e5047f3f979a28d GIT binary patch literal 3881 zcmeHKi#L>M82{#*shKg+NQfrBq=;NAV|3D|9gNd9Boet~*BYUO$t4rtRFn!Mv|9{I z<-SU5l6#wSDVJE6a@$1iGviWX#%jOXzhd{yd(L~__xZig?|I(yJnwVP^TsVC(3OJV4VJiSAO(Ly$uR&$vS%zyU z04UUdotVa;d>?dEYe%4mCdGWnpc_eh41!Cb?R-6^eYBGxbu4)JZ{ zw251&>9Mrfi>eq9M<7Em0?0P9Ajn>VtO{gR@c*s?Zp#{pRC*nY#lEPkjT5IlcKhwv z%;aP<=Y|5~T{U=Qqw>w3Pm=<2t){xV-Z8zj1%*GvN)v(Hv-L6FQOm=UmuZ^RGcBC* zQnQ5%*A~AsxAAgHv^de)EvSM^kMG)L@O|_{fu+>Eq&cYFh(~8 zq>bO}wXWAgFRkzI`Gh1m0Jj#8zfN_@)9~V7ODt*ce&ly0Eu^4s@7-_}@QVR?+}2xi zyH@Jj^>O~$Y)2EEz1lNK^(3*Tg~At11SS(Ok1EWhN2^~?>G#@XJ{KBW7a1Adm~qyx z0qKz*g>VGkl^JbGPJ8$YjMg!d#Doza5eRECZmfyc~n?(GT#!F$5o z=ZGnp45>jDIIb@W+~#GCAAyn4;GP?_a1hiEKkECGg(|S%d3{_bN-eu6DZh&Vry5;N zaub!v&=%@_LtPaz^b&zdI2?n-9>a zK!E0qE(~$y1dQZgV{RlveDk7`0wK!pKOB$w34&l#m`wm%QDFDh1MR54=8Mxrts(!*>%iW%ILzhPgE*v5*+ zq#yoTAEl!mC><_+J2$qkt`TGUI{CPv9u?d_7Y+S>RIq-tlsmJ%cydHQ7USn_3B0O( z(&d`W@}O4X6@Gu`3^t@NX#Y_1!}A>@VI1_9CCpySS2?*syAm{G zfk^34Tl#QDn0DX}@wmq}2g9F9N20r$=NS`2Oc|?J&8FN#o1H2o2F7jHBqTi zDi7bg)}WZ1a%XdbC_&!E>r5B>W@U6Ai*4RFQKaH|htC(0sByDm6C)63$T%78J8Pv9 zvrMz89Nbzp@W8VmHK+KHdxVd{R0NJmynLYTeNDcYy85}gf60A2=W&jSpS3(CW~g+} zft5o}!Yvk&jl9+k${KIYE#$agl+6`*lYMz=GuHfWmT6*2NR~9CCWW?6P+n%da)JU~ zx}}E!X&cDUs*v5x-3EuS>x`Yi7&P-B9eJ{o4DlE+LLg&q`b|#I5d=_#z~>hbfJ+C_ za{`Zk$W{l$;jW^%2#X_VqlQpi+s(p45lteB2Wvtwl>CjS-O&AXIS4|314qI~DCCX^I3fT+(h|9TRX) zGW{v7z^ErH{d~TOpSL_mEo-_+kfy(0k~2T2G3JRQj52<8H&iX`E^K(`81Pi3j8=JS p6B;I2FDmQ9WuKA%dKEO4Kh07!jP=^@|B3{l!_JyXFFAPf;y+!9cpLx# literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/mouth13.png b/misc/avatar-sprites/male/mouth13.png new file mode 100755 index 0000000000000000000000000000000000000000..86fccb9142521d1c2a649be874ed7a3470c52e07 GIT binary patch literal 3966 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/mouth16.png b/misc/avatar-sprites/male/mouth16.png new file mode 100755 index 0000000000000000000000000000000000000000..375ffdcb6815714af7d082ce57ae18603ed59337 GIT binary patch literal 3983 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 J<#7A^e*Qc literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/mouth17.png b/misc/avatar-sprites/male/mouth17.png new file mode 100755 index 0000000000000000000000000000000000000000..2cfcaf5a700ba9399e4850a825c4abe85897b790 GIT binary patch literal 3963 zcmdUxXHXO97KXn7(t8yUH}u|{bV%q`AehjUA_PUMC`~YcG-0XI4T4H9B1kY4r3nZU z1f+%{O#}q56hUbh*SkA=f8Lq($DKK6&OG0rcg}mxd~@Q@n;Xzkb5R2T=!^_?tpI?e z{76djlNZcOr8g&q%Gc2LIsi9hek5dC-oGCJYKtpy`1$i5J^?=0J$!tjMsPUP*Wbte z$~89tf+n%nXoU3&yT5*~w z6vUAxC1DcTEG1~~Qjb$C@;*$8dK7oJcYiMQk>_ah?uY)P`Z3Mr$}Mc&07WY$ZKk2T zr6Pv540e|3eN=a6*W99%b_BJ6FJPpsyUct2kRJl}!qwHq`C2Jn07%d<4JBwb%WIW6 z6MM|C3d?bTVD3O#15(eKP-0ktc1RMe7-;K5FxYG%YfwN2ocdf{7QlH);3Rze!!W>L z_i{oZ!2TXD8>Ao=Kv~@4bb*H&s2sR(R}Y|M0IR!6rwSOC1TscQcSBIq09px*G_`<| z7RXq}MT-KmP~gr!~3n1ITWO_opif(7(}42CJ>a8aP*fXS6`AJ^SQVz94!r0 z_-X?%7Z5&pBq3eLg;68NcpW_y+#vI~NK|TAMEbDe=#o*A?FxjK(_b3{mr&%(V2lXsyi-IACe6Y z8fcCWc!v2pja=|3G1di3X1^re+{7)pBEEQ7n&>ORq2tT*vl9EHnzM?a=Bg$nG*z1MW)k3$>PjA83%E>i{ekBZx=r^XS^#HlZgP3Lm*?SSSmKyJ9>*4rPWv)B= z4{6?B4v@`FW-rKl>;H^PBT=bv`E7*C76^knpVcu$nWD_c4NIYC1QeJisg$Wm?^w1A z^QD)XJQHeU`qp{cMNT#rWhlWv%ACw1%@`U7?^G6Gj)%($<5NhCo<2qlF%Rhvd0X+X zNR;I%7;^Eazn;A8SxcdEPXa356TOIC>{ygvb+{rxx~1n zute^bEvIAiDA#Jbv=G6hm~02DD#Temv5YNcQMi$-(jUccWKvZ1Fk_g@gTrI@%9D=) zjZD)SXU((TB8U1`3_fOkB;5|ArHf&U>W)K;aORz+IF05EJpClww3u@^fwLPSqb$3Y zy`004<70yo!-?HuOYNo3FwPLl;1-icl$95k&y>^HY}xc7lFKeyhgIv_$XhRzQN7Eo zuqnr$U$f@6Mwh9T#+IW?eGpoY!)*`a$!$AKJ1pRjEeoDrT4?Tq(ztTg1xfIF(pALV zh*0bldfGp6>!w&!_90JGf<}2+p$c5ySRPqtwRO*3i((<$Z|{D9In}aAN!C{Q-5J); zqVuBM#R{f)SvLpI^31GERE1%MWre|7i&FJ^3AVUJugP{lf?lWFSlB_>0G&)YgJ=FzG|Yq1X449Rpev zc^$0)IgyrdTK$!xpN~3^bT{#fCET$?8(!p`;hZ&hClx=a{%A!1cYTJ$D_sr?0t;SU zUR{rb$c1=?Ow3lzHgc`Z@WrCVYNl$Y-TiO+ANG&tDCTL%j>#?OE$5Bp%{DmM1=&g9 zN^#HKjA|F{ifuP=&EC;=Dz-%^8#~83{VHsg;Am4-QwdWE-aOsBB7YR!QS$}&8dui9 zS+g`wPOQdx;liBJE*$8FSJfRG=`HDDjbXnZYEaO{PS98I*zts4f9B7sdO>w2mvDbW zE9}*F=87~LHNZG9F28_d=@ad|g0;>YHb8Tr@z(hIX)db$RXUrNk#2N*h-;Vy7OwQFtJlZ!3TOZATCMz2(xN7R`eU8PD0ua0|Fa z1iF5iU)ohV6}DRifM1+KF|Y!~(nyn@)0MRpe4z6|YCn zr<5w*-Q{dTD&Y!!^!f0Qqi-pkKR73JgwqN~$3`P#w32+|P+WtuS&D&!Q}FAvy5Ds( zb!YO>vKA^&B#jltG|Q!~s!u96Dl}?!Nx9p;89`xDM%PTvs7Q%bD|uggF?+DS6+4fe zr&$Q)$d>ML^bIZ~v~Ne3u$M_OOQ>dQo5q=+yZ0|0MzK=%M8Qp#K*1#H;C7yNG@taK z(qP;;+(GQD`KF9ZLWuRZHhDo@!;QsZF79}#vUV`3DwXg8$$ z%l`OYmCTBK@&5HUb-lzC<@=u>9IrFCGtZ^riegNVl02vnEtOYQYSsOMiPQ^hr^I6} zkXNcdzl#&|8nLKYM`l%rw+Mxpc}84p>y2!yhj^~h*ibJ;hpkPGtvgzvq-|&GoxjIm zxi#71?^d%CIkMPpkBdwNEpf;C^uElQy7#QCq7#34zR`gzv5`}QvOjTUb-2S->-a@>-GPx2toQ~cc zNW^Af!@{M$O*s)C;zE~Q3A0xjd_Ffa2FwlV9VaZSHLDREHlGJ<))JRkkk661PgE~? ztp=>BAEgglbT{2^%B{vbc;YugTIxgHcUQRcl?l_^Ex}*dk4H!HRWznswnBV%U+wP9 zvQLNm3m+2tnkE8;H>#Q~nlEi@uj@>}r(;L7?2o3#KTqAh+8S7}H8^FkOCB9HaFn`} z%m6=?oRi!aLl?7_e@;_HWnRnwaOI!`K5%(JD4*l#;Za{T2fK9m-pJY*VK95JFl#d_ z{iWBfqQlkJHO?o*uJ*38FJ1@9%U;~Ru)p3GI2FkA`Oz$c#o{gKZINS-Z%=ou-M_;sH>rs82}-ICl_cG0N;*J>dMdibJYm|)ocJbe9|tx(g%R7 z*hp6g5j6Q}Y>)~A1$u*tzT{{x2>J%O);9)L2(mPCIRy^>*wtS&RtV(3Rz(&9NJuak0EGfd${+D7>8Hq_3cr~CYU&TYf1Lhq k6bZ@SNxbRgJ3Brm1v_m_+yaz{FDD3$^vrduVNQ|%2JGggssI20 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/mouth18.png b/misc/avatar-sprites/male/mouth18.png new file mode 100755 index 0000000000000000000000000000000000000000..205c25d1a5373bb9adac78c41931e1fe1253d20e GIT binary patch literal 5830 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/mouth19.png b/misc/avatar-sprites/male/mouth19.png new file mode 100755 index 0000000000000000000000000000000000000000..d8f44c117d9a94836ba5429be93510396f59e645 GIT binary patch literal 3993 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 Q^#}r8O(Ts8xb6La0O54sb^rhX literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/mouth2.png b/misc/avatar-sprites/male/mouth2.png new file mode 100755 index 0000000000000000000000000000000000000000..eb4e05c8590ba7cb860534f858a934e16635c79d GIT binary patch literal 4966 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/mouth20.png b/misc/avatar-sprites/male/mouth20.png new file mode 100755 index 0000000000000000000000000000000000000000..decf3adaf81eaab93974f1ed38ad85b1d070babd GIT binary patch literal 7524 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

    P175FvZCv?n13rR! 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 BI!gcm literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/mouth21.png b/misc/avatar-sprites/male/mouth21.png new file mode 100755 index 0000000000000000000000000000000000000000..39052a431891d3cd5217707a0cf1248721afcf80 GIT binary patch literal 3955 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 T*r`}gel?({Wvp2aw-5U}H9g8R literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/mouth22.png b/misc/avatar-sprites/male/mouth22.png new file mode 100755 index 0000000000000000000000000000000000000000..73646b19b9526b3301beb0d2ca8ce0b657684c28 GIT binary patch literal 5409 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 AX8-^I literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/mouth23.png b/misc/avatar-sprites/male/mouth23.png new file mode 100755 index 0000000000000000000000000000000000000000..29b16bb27796ab264b9209dc6acdec7da0222d21 GIT binary patch literal 5648 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 O0i9b08s%zsPyPWrqsgoQ literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/mouth3.png b/misc/avatar-sprites/male/mouth3.png new file mode 100755 index 0000000000000000000000000000000000000000..0745fde1af63d8cb9e6ea0c7ec4a988dcb7695ee GIT binary patch literal 5019 zcmeHL`BxHZ8V1Bf$vv-YN~2|_sBKEAh+Ru@>uN4#CN6jKj+)A7nC1d?TbxShs!?t= zQ>JEGk{fQ=H3!qgNli1w4Tuz3M1)L`p>t;bh5N&dKfLGrp6|Tpd(U~#^L)>D-h!Wk ze6+R9v;Y8rHrm%a1ONb%z6WHR>I6@7d8b-{=^;MH01XU_MHK)icm;X^0F6YbJXT$W zHPd|0qyqptz25^!Pp$bG05Eh$dwYdmismzilcr>*8fpH8@QykhL8#dN{sot;VaeRD25n1c4!XFcf}kv(21N-xrgwlI!P z$&B>C(!h}Nr#%u$FPF^-;FV3ZWGnd1Rr&msjMP5rx`>jwF-o(NPZk}$YSuDA-psw2 zz8-V_se-e&8GNndX~ei5Nt$Pn=i9D0>f zZzunn<9G@8D7V{cGI%C#a0iUTk*^CzmOJ!eeZm>jBX^_;5}x=Ub6#LyPY{~|K!3Ya z;{ZCWbsOBDWDWdnDJ&xkWC8A&x9&j^GmIN{-}=Mk;# zGM4qcMzn7JJvy7P@@3dsAGS`@4fB2EM<~)E%^OBj9c(K@%gVo+h{dna**8|uuWziT zb18ZE7yNR}gu;~N`r=59!*n}xk%ts=`}KvwD=eGeSzk2#))BIOG&iF_7_|qj(J#`h zONMbuB%hZ?UXPaum_rC`R&|cYJoOc|{Ze{D?&A1z^2X&xg1ga^$-GCQnb=q<*NxZJ zv2rPOr$;y1iZ}PItZx2Q%b|~P*F6JYE}ld*5p0xuLM;iA>OuCXfjW`>u;cW0vS;6_ zLU^{mcD5<9UbZ05es{1<5K0{iX7Hw!Zlw@!oimfDm%F`p$5ZO6J?&EPG z4a&UfP2JJade77snS&=?EIPIKq7oH?5LbdSoiM6JQZPB2OMTUwra7tftlbQMY_$95 zEM!Wnezjal6u+pXC`t>i++!uv*9Z1n#W${>D37pqn4OG1+is7dG@tPRLvsA)4ym!l z*H-h1v}F#0lYk}LD#dAdjah!!y*6{8LJ59BTs^M7d)U@f_#qa0ip z!o0DdQ{TLQCvc&x1V9)ARhz=dj*fD;rMwxjiXEVp?>pHP7?e18omk&i%un3!LLytE zQlO+|ez+CEsja7WTmQ9dG_de|x%dYnhG@KZ*8yXocmXGW3S9{hBKggW*+p|Y24KQS z#fdFO{cq^PnL_Bq#b;L0S|{DwTDo#RvZI(w9v^4V2{7$#qF6}kn+Ll*Dp7SG3}CEa z>JLCr0^E5!i5j%Arl{a-3QoviphuWvG3@Dlw(N1f)Dt6A*&t?iaqVH3C{&Xa2t1HS z_S7Ub_mx%Y_Wd>H_h@n?Euq!$)8Y1>&M5SZak)2AJV~J*U#y1 z{3i;N>4s_greI(`<8opc{`M?%!Ui?BAJhw2eAk4TWPVw54LA0jX&>?U7|EO2U`H*^ z+)?6egQ)V(gKZ3zOY$q41+U5BpOq&0iYf&6P+T%$a(rwoJ)+V>NqpJ4^WKj#`ueP? zq)sA;ePJn0`xmjVY%0mWHBODX7xhoUReJ-NGXb@(+`)ktruNy-wX);~7?-WN5kz^O zWcWHpx4}@hk`mQzM0V;s<0vc*_=#>Te^zhM!YSCCiv3!27wOK(mki&)&D;7Y21CP0%5!mb!)X5;bgg5JQaOs_1*j2dmGXucY;BS%8x#`SaEsu zWv@kM1Z(+?-L4d<#qex1L=W*4l_f4Mkj-;h4i*)w*dqeFR=Wu}Ii1tJ03p6D3;yQp zHgW^2xG{0LNq4uqBvy=UQwM_RdV5d0*kTJ;B0ApQ>_JOVX(o36zoQ#e96<@Nhk~u# U8(dGQ25JEG@gVPpV=-6$4Uv!@fdBvi literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/mouth4.png b/misc/avatar-sprites/male/mouth4.png new file mode 100755 index 0000000000000000000000000000000000000000..94bc2774f3263dcde630111a9ccce6f2cfdea829 GIT binary patch literal 6033 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 Ku7uzE=f41EEme~M literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/mouth5.png b/misc/avatar-sprites/male/mouth5.png new file mode 100755 index 0000000000000000000000000000000000000000..f39a6d304982c62689b9e279339519265d14750d GIT binary patch literal 6283 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 CVEixu literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/mouth6.png b/misc/avatar-sprites/male/mouth6.png new file mode 100755 index 0000000000000000000000000000000000000000..bd059c0c018ceba997915f901f65d04f53fa2648 GIT binary patch literal 6133 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 literal 0 HcmV?d00001 diff --git a/misc/avatar-sprites/male/mouth9.png b/misc/avatar-sprites/male/mouth9.png new file mode 100755 index 0000000000000000000000000000000000000000..af797e5186e771d2d7440541b3dc27c121935723 GIT binary patch literal 3567 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgF}}M_)$< zhK>E)e-c@Ne9i)o$YKTtzQZ8Qcszea3ecn$PZ!6KinzCT&t^-zORztf+Ok&Z^rc&& zcLHt~$<~Y9_I%Z{Wx3hbwHA|#y{k`X{?GB(T)1S4kk`T|7o78LIWIR)+$=puz)Rt5 zigWpv{)7n!*8iuNxztn0oQZ`)K*6DbfpL^E8VI8)VKf(v=7P~&K(}1*AfD-K zm2IYpRBO+ljdzf1q7P|}X`5%t@bl%()dX{k!J4m&HheHF)#+fdl?8fB64@z?m6B-yelZ-n- zbumka9H>@qRA6KjI+7*?GMGca7Nnoak*Ss4WB>2T`Hy*Tae-_WnC|e9@zLu$kFyxA z3IR&yXTL6e{Z<&wQkLq2bWL3 zy!hr#j>{r1UPi&q0RQ}nsXDl8rwo5~pShSQt>RwB}%K!aaym1Qq ziLZB`%Cma7&bnyCDbV5V&~RjH{3?)@nJg?GncJKcf#HNxc)=IOO`HFmnEj&g>y#`` zffXGGTpRvOi~l$!{^yk5KmT&WJ!@aw-(Mzr?Nl;j(8RPYK1?i+gkF?bZT-9V>iyGF z3h{5&{dv>e0@Lllqo24nYHin>wp37fDK%bV@8B15yW$HBg9SlMOiO}p=WYbLN5jvd zK_va#VbB zMmBc8UZs>gFEEk0V<*YCPxo*|pm*5iyN?g+f0nunN@JkZ0IV6B)nW>gEq%Cyl|=)z4*}Q$iB}j Date: Sat, 21 Jan 2023 21:23:30 -0700 Subject: [PATCH 074/233] Just some basic info so far --- WHATSNEW.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/WHATSNEW.md b/WHATSNEW.md index 8fc41101a..543dae828 100644 --- a/WHATSNEW.md +++ b/WHATSNEW.md @@ -7,6 +7,8 @@ This document attempts to track **major** changes and additions in ENiGMA½. For * Some internal routes such as those used for password resets live within `/_enig/`. * Routes for the file base now default to `/_f/` prefixed instead of just `/f/`. If `/f/` is in your `config.hjson` you are encouraged to update it! * Finally, the system will search for `index.html` and `index.htm` in that order, if another suitable route cannot be established. +* [WebFinger](/docs/_docs/servers/contentservers/webfinger-handler.md) support. +* New users now have randomly generated avatars assigned to them that can be served up via, for example, the ActivityPub [Web Handler](/docs/_docs/servers/contentservers/web-handlers.md). * CombatNet has shut down, so the module (`combatnet.js`) has been removed. ## 0.0.13-beta From d03718d55e496296c000751a8dad8ce55468aadf Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 22 Jan 2023 10:18:52 -0700 Subject: [PATCH 075/233] Move avatar handler to generic system general handler --- WHATSNEW.md | 2 +- core/config_default.js | 6 ++ .../content/web_handlers/activitypub.js | 41 ---------- .../content/web_handlers/system_general.js | 76 +++++++++++++++++++ .../servers/content/web_handlers/webfinger.js | 6 +- core/user.js | 2 +- 6 files changed, 86 insertions(+), 47 deletions(-) create mode 100644 core/servers/content/web_handlers/system_general.js diff --git a/WHATSNEW.md b/WHATSNEW.md index 543dae828..53bf08fe9 100644 --- a/WHATSNEW.md +++ b/WHATSNEW.md @@ -8,7 +8,7 @@ This document attempts to track **major** changes and additions in ENiGMA½. For * Routes for the file base now default to `/_f/` prefixed instead of just `/f/`. If `/f/` is in your `config.hjson` you are encouraged to update it! * Finally, the system will search for `index.html` and `index.htm` in that order, if another suitable route cannot be established. * [WebFinger](/docs/_docs/servers/contentservers/webfinger-handler.md) support. -* New users now have randomly generated avatars assigned to them that can be served up via, for example, the ActivityPub [Web Handler](/docs/_docs/servers/contentservers/web-handlers.md). +* New users now have randomly generated avatars assigned to them that can be served up via the new System General [Web Handler](/docs/_docs/servers/contentservers/web-handlers.md). * CombatNet has shut down, so the module (`combatnet.js`) has been removed. ## 0.0.13-beta diff --git a/core/config_default.js b/core/config_default.js index 86852f225..a5a644267 100644 --- a/core/config_default.js +++ b/core/config_default.js @@ -294,6 +294,12 @@ module.exports = () => { staticRoot: paths.join(__dirname, './../www'), + handlers: { + systemGeneral: { + enabled: true, + }, + }, + resetPassword: { // // The following templates have these variables available to them: diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 7530ce76e..771b6874b 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -17,9 +17,6 @@ const _ = require('lodash'); const enigma_assert = require('../../../enigma_assert'); const httpSignature = require('http-signature'); const async = require('async'); -const paths = require('path'); -const fs = require('fs'); -const mimeTypes = require('mime-types'); exports.moduleInfo = { name: 'ActivityPub', @@ -95,13 +92,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }, }); - // default avatar routing - this.webServer.addRoute({ - method: 'GET', - path: /^\/_enig\/ap\/users\/.+\/avatar\/.+$/, - handler: this._avatarGetHandler.bind(this), - }); - // :TODO: NYI // this.webServer.addRoute({ // method: 'GET', @@ -267,37 +257,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this._getCollectionHandler('outbox', req, resp, signature); } - _avatarGetHandler(req, resp) { - const url = new URL(req.url, `https://${req.headers.host}`); - const filename = paths.basename(url.pathname); - if (!filename) { - return this.webServer.fileNotFound(resp); - } - - const storagePath = _.get(Config(), 'users.avatars.storagePath'); - if (!storagePath) { - return this.webServer.fileNotFound(resp); - } - - const localPath = paths.join(storagePath, filename); - fs.stat(localPath, (err, stats) => { - if (err || !stats.isFile()) { - return this.webServer.accessDenied(resp); - } - - const headers = { - 'Content-Type': - mimeTypes.contentType(paths.basename(localPath)) || - mimeTypes.contentType('.png'), - 'Content-Length': stats.size, - }; - - const readStream = fs.createReadStream(localPath); - resp.writeHead(200, headers); - readStream.pipe(resp); - }); - } - _accountNameFromUserPath(url, suffix) { const re = new RegExp(`^/_enig/ap/users/(.+)/${suffix}(\\?page=[0-9]+)?$`); const m = url.pathname.match(re); diff --git a/core/servers/content/web_handlers/system_general.js b/core/servers/content/web_handlers/system_general.js new file mode 100644 index 000000000..7b156f6bc --- /dev/null +++ b/core/servers/content/web_handlers/system_general.js @@ -0,0 +1,76 @@ +const WebHandlerModule = require('../../../web_handler_module'); +const { Errors } = require('../../../enig_error'); +const EngiAssert = require('../../../enigma_assert'); +const Config = require('../../../config').get; + +// deps +const paths = require('path'); +const fs = require('fs'); +const mimeTypes = require('mime-types'); +const get = require('lodash/get'); + +exports.moduleInfo = { + name: 'SystemGeneral', + desc: 'A general handler for system routes', + author: 'NuSkooler', + packageName: 'codes.l33t.enigma.web.handler.general_system', +}; + +exports.getModule = class SystemGeneralWebHandler extends WebHandlerModule { + constructor() { + super(); + } + + init(webServer, cb) { + // we rely on the web server + this.webServer = webServer; + EngiAssert(webServer, 'System General Web Handler init without webServer'); + + this.log = webServer.logger().child({ webHandler: 'SysGeneral' }); + + const domain = this.webServer.getDomain(); + if (!domain) { + return cb(Errors.UnexpectedState('Web server does not have "domain" set')); + } + + // default avatar routing + this.webServer.addRoute({ + method: 'GET', + path: /^\/_enig\/users\/.+\/avatar\/.+\.(png|jpg|jpeg|gif|webp)$/, + handler: this._avatarGetHandler.bind(this), + }); + + return cb(null); + } + + _avatarGetHandler(req, resp) { + const url = new URL(req.url, `https://${req.headers.host}`); + const filename = paths.basename(url.pathname); + if (!filename) { + return this.webServer.fileNotFound(resp); + } + + const storagePath = get(Config(), 'users.avatars.storagePath'); + if (!storagePath) { + return this.webServer.fileNotFound(resp); + } + + const localPath = paths.join(storagePath, filename); + fs.stat(localPath, (err, stats) => { + if (err || !stats.isFile()) { + return this.webServer.accessDenied(resp); + } + + const headers = { + 'Content-Type': + mimeTypes.contentType(paths.basename(localPath)) || + mimeTypes.contentType('.png'), + 'Content-Length': stats.size, + }; + + const readStream = fs.createReadStream(localPath); + resp.writeHead(200, headers); + readStream.pipe(resp); + }); + } +}; diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index 32d1af88d..4d735d27d 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -11,7 +11,7 @@ const { } = require('../../../activitypub/util'); const _ = require('lodash'); -const enigma_assert = require('../../../enigma_assert'); +const EngiAssert = require('../../../enigma_assert'); exports.moduleInfo = { name: 'WebFinger', @@ -29,11 +29,9 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { } init(webServer, cb) { - const config = Config(); - // we rely on the web server this.webServer = webServer; - enigma_assert(webServer, 'WebFinger Web Handler init without webServer'); + EngiAssert(webServer, 'WebFinger Web Handler init without webServer'); this.log = webServer.logger().child({ webHandler: 'WebFinger' }); diff --git a/core/user.js b/core/user.js index 705aa45ff..b2b39e3ff 100644 --- a/core/user.js +++ b/core/user.js @@ -533,7 +533,7 @@ module.exports = class User { const { makeUserUrl } = require('./activitypub/util'); const filename = paths.basename(outPath); const url = - makeUserUrl(webServer.instance, self, '/ap/users/') + + makeUserUrl(webServer.instance, self, '/users/') + `/avatar/${filename}`; apSettings.image = url; From 8f131630ff95d0e16f3d113059c0d5adf4bf9b1f Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 22 Jan 2023 11:02:45 -0700 Subject: [PATCH 076/233] Update on recording to outbox --- core/activitypub/collection.js | 4 +-- core/scanner_tossers/activitypub.js | 38 ++++++++++++++++------------- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index 9a40c08f0..f9c926340 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -57,13 +57,13 @@ module.exports = class Collection extends ActivityPubObject { ); } - static addOutboxItem(owningUser, outboxItem, cb) { + static addOutboxItem(owningUser, outboxItem, isPrivate, cb) { return Collection.addToCollection( 'outbox', owningUser, outboxItem.id, outboxItem, - false, + isPrivate, cb ); } diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index f150db72a..029cda363 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -58,10 +58,11 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule this._webServer(), (err, respBody, res) => { if (err) { - return callback(err); - } - - if (res.statusCode !== 202 && res.statusCode !== 200) { + this.log.warn( + { error: err.message, inbox: remoteActor.inbox }, + 'Failed to send "Note" Activity to Inbox' + ); + } else if (res.statusCode !== 202 && res.statusCode !== 200) { this.log.warn( { inbox: remoteActor.inbox, @@ -72,25 +73,28 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule ); } - // - // We sent successfully; update some properties - // in the original message to indicate export - // and updated mapping of message -> Activity record - // + // carry on regardless if we sent and record + // the item in the user's Outbox collection return callback(null, activity, fromUser); } ); }, (activity, fromUser, callback) => { - Collection.addOutboxItem(fromUser, activity, (err, localId) => { - if (!err) { - this.log.debug( - { localId, activityId: activity.id }, - 'Note Activity persisted to database' - ); + // If we failed to send above, + Collection.addOutboxItem( + fromUser, + activity, + message.isPrivate(), + (err, localId) => { + if (!err) { + this.log.debug( + { localId, activityId: activity.id }, + 'Note Activity persisted to "outbox" collection"' + ); + } + return callback(err, activity); } - return callback(err, activity); - }); + ); }, (activity, callback) => { // mark exported From 0fc8ae0e187f3c21e344121789c5c2a02440a839 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 22 Jan 2023 13:51:32 -0700 Subject: [PATCH 077/233] WIP on shared inbox functionality --- core/activitypub/activity.js | 10 ++ core/activitypub/actor.js | 7 +- core/activitypub/collection.js | 31 ++++- core/activitypub/settings.js | 2 +- core/activitypub/util.js | 5 + core/database.js | 2 +- .../content/web_handlers/activitypub.js | 116 ++++++++++++++++-- 7 files changed, 157 insertions(+), 16 deletions(-) diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index 46e46d4f0..f6c9db5d7 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -23,6 +23,16 @@ module.exports = class Activity extends ActivityPubObject { return WellKnownActivityTypes; } + static makeFollow(webServer, localActor, remoteActor, id = null) { + id = id || Activity._makeFullId(webServer, 'follow'); + return new Activity({ + id, + type: 'Follow', + actor: localActor, + object: remoteActor.id, + }); + } + // https://www.w3.org/TR/activitypub/#accept-activity-inbox static makeAccept(webServer, localActor, followRequest, id = null) { id = id || Activity._makeFullId(webServer, 'accept'); diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 1caacd064..b88ce0600 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -9,6 +9,7 @@ const { makeUserUrl, selfUrl, isValidLink, + makeSharedInboxUrl, } = require('../activitypub/util'); const { ActivityStreamsContext } = require('./const'); const Log = require('../logger').log; @@ -86,9 +87,11 @@ module.exports = class Actor extends ActivityPubObject { id: userSelfUrl, type: 'Person', preferredUsername: user.username, - name: user.getSanitizedName('real'), + name: userSettings.showRealName + ? user.getSanitizedName('real') + : user.username, endpoints: { - sharedInbox: 'TODO', + sharedInbox: makeSharedInboxUrl(webServer), }, inbox: makeUserUrl(webServer, user, '/ap/users/') + '/inbox', outbox: makeUserUrl(webServer, user, '/ap/users/') + '/outbox', diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index f9c926340..b40b8573d 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -3,13 +3,20 @@ const ActivityPubObject = require('./object'); const apDb = require('../database').dbs.activitypub; const { getISOTimestampString } = require('../database'); -const { isString, get } = require('lodash'); +const { isString, get, isObject } = require('lodash'); + +const APPublicCollectionId = 'https://www.w3.org/ns/activitystreams#Public'; +const APPublicOwningUserId = 0; module.exports = class Collection extends ActivityPubObject { constructor(obj) { super(obj); } + static get PublicCollectionId() { + return APPublicCollectionId; + } + static followers(owningUser, page, webServer, cb) { return Collection.getOrdered( 'followers', @@ -68,17 +75,29 @@ module.exports = class Collection extends ActivityPubObject { ); } + static addPublicInboxItem(inboxItem, cb) { + return Collection.addToCollection( + 'publicInbox', + APPublicOwningUserId, + inboxItem.id, + inboxItem, + false, + cb + ); + } + static getOrdered(name, owningUser, includePrivate, page, mapper, webServer, cb) { const privateQuery = includePrivate ? '' : ' AND is_private = FALSE'; const followersUrl = makeUserUrl(webServer, owningUser, '/ap/users/') + `/${name}`; + const owningUserId = isObject(owningUser) ? owningUser.userId : owningUser; if (!page) { return apDb.get( `SELECT COUNT(id) AS count FROM collection WHERE user_id = ? AND name = ?${privateQuery};`, - [owningUser.userId, name], + [owningUserId, name], (err, row) => { if (err) { return cb(err); @@ -118,7 +137,7 @@ module.exports = class Collection extends ActivityPubObject { FROM collection WHERE user_id = ? AND name = ?${privateQuery} ORDER BY timestamp;`, - [owningUser.userId, name], + [owningUserId, name], (err, entries) => { if (err) { return cb(err); @@ -147,11 +166,12 @@ module.exports = class Collection extends ActivityPubObject { obj = JSON.stringify(obj); } + const owningUserId = isObject(owningUser) ? owningUser.userId : owningUser; isPrivate = isPrivate ? 1 : 0; apDb.run( `INSERT OR IGNORE INTO collection (name, timestamp, user_id, obj_id, obj_json, is_private) VALUES (?, ?, ?, ?, ?, ?);`, - [name, getISOTimestampString(), owningUser.userId, objectId, obj, isPrivate], + [name, getISOTimestampString(), owningUserId, objectId, obj, isPrivate], function res(err) { // non-arrow for 'this' scope if (err) { @@ -163,10 +183,11 @@ module.exports = class Collection extends ActivityPubObject { } static removeFromCollectionById(name, owningUser, objectId, cb) { + const owningUserId = isObject(owningUser) ? owningUser.userId : owningUser; apDb.run( `DELETE FROM collection WHERE user_id = ? AND name = ? AND obj_id = ?;`, - [owningUser.userId, name, objectId], + [owningUserId, name, objectId], err => { return cb(err); } diff --git a/core/activitypub/settings.js b/core/activitypub/settings.js index 7b09e6ef2..3b848a28e 100644 --- a/core/activitypub/settings.js +++ b/core/activitypub/settings.js @@ -5,7 +5,7 @@ module.exports = class ActivityPubSettings { this.enabled = true; // :TODO: fetch from +op config default this.manuallyApproveFollowers = false; this.hideSocialGraph = false; // followers, following - this.showRealName = false; + this.showRealName = true; this.image = ''; this.icon = ''; diff --git a/core/activitypub/util.js b/core/activitypub/util.js index 1461c940c..a155f1b7a 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -14,6 +14,7 @@ const moment = require('moment'); exports.ActivityStreamsContext = 'https://www.w3.org/ns/activitystreams'; exports.isValidLink = isValidLink; +exports.makeSharedInboxUrl = makeSharedInboxUrl; exports.makeUserUrl = makeUserUrl; exports.webFingerProfileUrl = webFingerProfileUrl; exports.selfUrl = selfUrl; @@ -39,6 +40,10 @@ function isValidLink(l) { return /^https?:\/\/.+$/.test(l); } +function makeSharedInboxUrl(webServer) { + return webServer.buildUrl(WellKnownLocations.Internal + '/ap/shared-inbox'); +} + function makeUserUrl(webServer, user, relPrefix) { return webServer.buildUrl( WellKnownLocations.Internal + `${relPrefix}${user.username}` diff --git a/core/database.js b/core/database.js index 0ed3fab46..8427b592c 100644 --- a/core/database.js +++ b/core/database.js @@ -529,7 +529,7 @@ dbs.message.run( id INTEGER PRIMARY KEY, -- Auto-generated key name VARCHAR NOT NULL, -- examples: followers, follows, ... timestamp DATETIME NOT NULL, -- Timestamp in which this entry was created - user_id INTEGER NOT NULL, -- Local, owning user ID + user_id INTEGER NOT NULL, -- Local, owning user ID, 0 means "all" for sharedInbox obj_id VARCHAR NOT NULL, -- Object ID from obj_json.id obj_json VARCHAR NOT NULL, -- Object varies by collection (obj_json.type) is_private INTEGER NOT NULL, -- Is this object private to |user_id|? diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 771b6874b..81be485aa 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -56,6 +56,12 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }, }); + this.webServer.addRoute({ + method: 'POST', + path: /^\/_enig\/ap\/shared-inbox$/, + handler: this._sharedInboxPostHandler.bind(this), + }); + this.webServer.addRoute({ method: 'GET', path: /^\/_enig\/ap\/users\/.+\/outbox(\?page=[0-9]+)?$/, @@ -162,20 +168,20 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); req.on('end', () => { - let activity; - try { - activity = JSON.parse(Buffer.concat(body).toString()); - activity = new Activity(activity); - } catch (e) { + const activity = Activity.fromJsonString(Buffer.concat(body).toString()); + if (!activity) { this.log.error( - { error: e.message, url: req.url, method: req.method }, + { url: req.url, method: req.method, endpoint: 'inbox' }, 'Failed to parse Activity' ); return this.webServer.resourceNotFound(resp); } if (!activity.isValid()) { - this.log.warn({ activity }, 'Invalid or unsupported Activity'); + this.log.warn( + { activity, endpoint: 'inbox' }, + 'Invalid or unsupported Activity' + ); return this.webServer.badRequest(resp); } @@ -192,6 +198,8 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { case 'Undo': return this._inboxUndoRequestHandler(activity, req, resp); + // :TODO: Create, etc. + default: this.log.warn( { type: activity.type }, @@ -204,6 +212,100 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } + _sharedInboxPostHandler(req, resp) { + const body = []; + req.on('data', d => { + body.push(d); + }); + + req.on('end', () => { + const activity = Activity.fromJsonString(Buffer.concat(body).toString()); + if (!activity) { + this.log.error( + { url: req.url, method: req.method, endpoint: 'sharedInbox' }, + 'Failed to parse Activity' + ); + return this.webServer.resourceNotFound(resp); + } + + if (!activity.isValid()) { + this.log.warn( + { activity, endpoint: 'sharedInbox' }, + 'Invalid or unsupported Activity' + ); + return this.webServer.badRequest(resp); + } + + switch (activity.type) { + case 'Create': + return this._sharedInboxCreateActivity(req, resp, activity); + + default: + this.log.warn( + { type: activity.type }, + 'Invalid or unknown Activity type' + ); + return this.resourceNotFound(resp); + } + }); + } + + _sharedInboxCreateActivity(req, resp, activity) { + // When an object is being delivered to the originating actor's followers, + // a server MAY reduce the number of receiving actors delivered to by + // identifying all followers which share the same sharedInbox who would + // otherwise be individual recipients and instead deliver objects to said + // sharedInbox. Thus in this scenario, the remote/receiving server participates + // in determining targeting and performing delivery to specific inboxes. + let toActors = activity.to; + if (!Array.isArray(toActors)) { + toActors = [toActors]; + } + + const createWhat = _.get(activity, 'object.type'); + switch (createWhat) { + case 'Note': + return this._deliverSharedInboxNote(req, resp, toActors, activity); + + default: + this.log.warn( + { type: createWhat }, + 'Invalid or unsupported "Create" type' + ); + return this.resourceNotFound(resp); + } + } + + _deliverSharedInboxNote(req, resp, toActors, activity) { + async.forEach( + toActors, + (actor, nextActor) => { + if (Collection.PublicCollectionId === actor) { + // Deliver to inbox for "everyone": + // - Add to 'sharedInbox' collection + // + Collection.addPublicInboxItem(activity.object, err => { + if (err) { + return nextActor(err); + } + + return nextActor(null); + }); + } else { + nextActor(null); + } + }, + err => { + if (err) { + return this.webServer.internalServerError(resp, err); + } + + resp.writeHead(202); + return resp.end(''); + } + ); + } + _getCollectionHandler(name, req, resp, signature) { EnigAssert(signature, 'Missing signature!'); From d7df066ab01d73dcdc55e780d4614c73947438a0 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 23 Jan 2023 14:45:56 -0700 Subject: [PATCH 078/233] Object and Note, load of public notes, etc. --- core/activitypub/activity.js | 110 ++----------- core/activitypub/actor.js | 88 ++++++++-- core/activitypub/collection.js | 81 ++++++++-- core/activitypub/note.js | 152 ++++++++++++++++++ core/activitypub/object.js | 45 ++++++ core/database.js | 12 +- core/message.js | 20 ++- core/scanner_tossers/activitypub.js | 24 ++- .../content/web_handlers/activitypub.js | 26 ++- 9 files changed, 430 insertions(+), 128 deletions(-) create mode 100644 core/activitypub/note.js create mode 100644 core/activitypub/object.js diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index f6c9db5d7..83dc3e28d 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -1,17 +1,11 @@ -const { messageBodyToHtml, selfUrl } = require('./util'); -const { ActivityStreamsContext, WellKnownActivityTypes } = require('./const'); +const { selfUrl } = require('./util'); +const { WellKnownActivityTypes } = require('./const'); const ActivityPubObject = require('./object'); -const User = require('../user'); -const Actor = require('./actor'); const { Errors } = require('../enig_error'); -const { getISOTimestampString } = require('../database'); const UserProps = require('../user_property'); const { postJson } = require('../http_util'); -const { WellKnownLocations } = require('../servers/content/web'); // deps -const { v4: UUIDv4 } = require('uuid'); -const async = require('async'); const _ = require('lodash'); module.exports = class Activity extends ActivityPubObject { @@ -23,10 +17,9 @@ module.exports = class Activity extends ActivityPubObject { return WellKnownActivityTypes; } - static makeFollow(webServer, localActor, remoteActor, id = null) { - id = id || Activity._makeFullId(webServer, 'follow'); + static makeFollow(webServer, localActor, remoteActor) { return new Activity({ - id, + id: Activity.activityObjectId(webServer), type: 'Follow', actor: localActor, object: remoteActor.id, @@ -34,92 +27,22 @@ module.exports = class Activity extends ActivityPubObject { } // https://www.w3.org/TR/activitypub/#accept-activity-inbox - static makeAccept(webServer, localActor, followRequest, id = null) { - id = id || Activity._makeFullId(webServer, 'accept'); - + static makeAccept(webServer, localActor, followRequest) { return new Activity({ - id, + id: Activity.activityObjectId(webServer), type: 'Accept', actor: localActor, object: followRequest, // previous request Activity }); } - static noteFromLocalMessage(webServer, message, cb) { - const localUserId = message.getLocalFromUserId(); - if (!localUserId) { - return cb(Errors.UnexpectedState('Invalid user ID for local user!')); - } - - async.waterfall( - [ - callback => { - return User.getUser(localUserId, callback); - }, - (localUser, callback) => { - const remoteActorAccount = message.getRemoteToUser(); - if (!remoteActorAccount) { - return callback( - Errors.UnexpectedState( - 'Message does not contain a remote address' - ) - ); - } - - const opts = {}; - Actor.fromAccountName( - remoteActorAccount, - opts, - (err, remoteActor) => { - return callback(err, localUser, remoteActor); - } - ); - }, - (localUser, remoteActor, callback) => { - Actor.fromLocalUser(localUser, webServer, (err, localActor) => { - return callback(err, localUser, localActor, remoteActor); - }); - }, - (localUser, localActor, remoteActor, callback) => { - // we'll need the entire |activityId| as a linked reference later - const activityId = Activity._makeFullId(webServer, 'create'); - - const obj = { - '@context': ActivityStreamsContext, - id: activityId, - type: 'Create', - actor: localActor.id, - object: { - id: Activity._makeFullId(webServer, 'note'), - type: 'Note', - published: getISOTimestampString(message.modTimestamp), - attributedTo: localActor.id, - audience: [message.isPrivate() ? 'as:Private' : 'as:Public'], - // :TODO: inReplyto if this is a reply; we need this store in message meta. - - content: messageBodyToHtml(message.message.trim()), - }, - }; - - // :TODO: this probably needs to change quite a bit based on "groups" - // :TODO: verify we need both 'to' fields: https://socialhub.activitypub.rocks/t/problems-posting-to-mastodon-inbox/801/4 - if (message.isPrivate()) { - //obj.to = remoteActor.id; - obj.object.to = remoteActor.id; - } else { - const publicInbox = `${ActivityStreamsContext}#Public`; - //obj.to = publicInbox; - obj.object.to = publicInbox; - } - - const activity = new Activity(obj); - return callback(null, activity, localUser, remoteActor); - }, - ], - (err, activity, fromUser, remoteActor) => { - return cb(err, { activity, fromUser, remoteActor }); - } - ); + static makeCreate(webServer, actor, obj) { + return new Activity({ + id: Activity.activityObjectId(webServer), + type: 'Create', + actor, + object: obj, + }); } sendTo(actorUrl, fromUser, webServer, cb) { @@ -149,10 +72,7 @@ module.exports = class Activity extends ActivityPubObject { return postJson(actorUrl, activityJson, reqOpts, cb); } - static _makeFullId(webServer, prefix) { - // e.g. http://some.host/_enig/ap/note/bf81a22e-cb3e-41c8-b114-21f375b61124 - return webServer.buildUrl( - WellKnownLocations.Internal + `/ap/${prefix}/${UUIDv4()}` - ); + static activityObjectId(webServer) { + return ActivityPubObject.makeObjectId(webServer, 'activity'); } }; diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index b88ce0600..5466107f4 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -17,11 +17,13 @@ const { queryWebFinger } = require('../webfinger'); const EnigAssert = require('../enigma_assert'); const ActivityPubSettings = require('./settings'); const ActivityPubObject = require('./object'); +const apDb = require('../database').dbs.activitypub; // deps const _ = require('lodash'); const mimeTypes = require('mime-types'); const { getJson } = require('../http_util.js'); +const { getISOTimestampString } = require('../database.js'); // https://www.w3.org/TR/activitypub/#actor-objects module.exports = class Actor extends ActivityPubObject { @@ -136,13 +138,48 @@ module.exports = class Actor extends ActivityPubObject { return cb(null, new Actor(obj)); } - static fromRemoteUrl(url, cb) { - // :TODO: cache first + static fromId(id, forceRefresh, cb) { + if (_.isFunction(forceRefresh) && !cb) { + cb = forceRefresh; + forceRefresh = false; + } + + Actor.fromCache(id, (err, actor) => { + if (err) { + if (forceRefresh) { + return cb(err); + } + + Actor.fromRemoteQuery(id, (err, actor) => { + // deliver result to caller + cb(err, actor); + + // cache our entry + if (actor) { + apDb.run( + `INSERT INTO actor_cache (actor_id, actor_json, timestamp) + VALUES (?, ?, ?);`, + [id, JSON.stringify(actor), getISOTimestampString()], + err => { + if (err) { + // :TODO: log me + } + } + ); + } + }); + } else { + return cb(null, actor); + } + }); + } + + static fromRemoteQuery(id, cb) { const headers = { Accept: 'application/activity+json', }; - getJson(url, { headers }, (err, actor) => { + getJson(id, { headers }, (err, actor) => { if (err) { return cb(err); } @@ -157,9 +194,45 @@ module.exports = class Actor extends ActivityPubObject { }); } - static fromAccountName(actorName, options, cb) { + static fromCache(id, cb) { + apDb.get( + `SELECT actor_json + FROM actor_cache + WHERE actor_id = ? + LIMIT 1;`, + [id], + (err, row) => { + if (err) { + return cb(err); + } + + if (!row) { + return cb(Errors.DoesNotExist()); + } + + const obj = ActivityPubObject.fromJsonString(row.actor_json); + if (!obj || !obj.isValid()) { + return cb(Errors.Invalid('Failed to create ActivityPub object')); + } + + const actor = new Actor(obj); + if (!actor.isValid()) { + return cb(Errors.Invalid('Failed to create Actor object')); + } + + return cb(null, actor); + } + ); + } + + static fromAccountName(actorName, cb) { // :TODO: cache first -- do we have an Actor for this account already with a OK TTL? + // account names can come in multiple forms, so need a cache mapping of that as well + // actor_alias_cache + // actor_alias | actor_id + // + queryWebFinger(actorName, (err, res) => { if (err) { return cb(err); @@ -182,12 +255,7 @@ module.exports = class Actor extends ActivityPubObject { } // we can now query the href value for an Actor - return Actor.fromRemoteUrl(activityLink.href, cb); + return Actor.fromId(activityLink.href, cb); }); } - - static fromJsonString(json) { - const parsed = JSON.parse(json); - return new Actor(parsed); - } }; diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index b40b8573d..8bef5727a 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -2,7 +2,9 @@ const { makeUserUrl } = require('./util'); const ActivityPubObject = require('./object'); const apDb = require('../database').dbs.activitypub; const { getISOTimestampString } = require('../database'); +const { Errors } = require('../enig_error.js'); +// deps const { isString, get, isObject } = require('lodash'); const APPublicCollectionId = 'https://www.w3.org/ns/activitystreams#Public'; @@ -86,18 +88,62 @@ module.exports = class Collection extends ActivityPubObject { ); } - static getOrdered(name, owningUser, includePrivate, page, mapper, webServer, cb) { + static embeddedObjById(collectionName, includePrivate, objectId, cb) { + const privateQuery = includePrivate ? '' : ' AND is_private = FALSE'; + + apDb.get( + `SELECT obj_json + FROM collection + WHERE name = ? + ${privateQuery} + AND json_extract(obj_json, '$.object.id') = ?;`, + [collectionName, objectId], + (err, row) => { + if (err) { + return cb(err); + } + + if (!row) { + return cb( + Errors.DoesNotExist( + `No embedded Object with object.id of "${objectId}" found` + ) + ); + } + + const obj = ActivityPubObject.fromJsonString(row.obj_json); + if (!obj) { + return cb(Errors.Invalid('Failed to parse Object JSON')); + } + + return cb(null, obj); + } + ); + } + + static getOrdered( + collectionName, + owningUser, + includePrivate, + page, + mapper, + webServer, + cb + ) { const privateQuery = includePrivate ? '' : ' AND is_private = FALSE'; - const followersUrl = - makeUserUrl(webServer, owningUser, '/ap/users/') + `/${name}`; const owningUserId = isObject(owningUser) ? owningUser.userId : owningUser; + // e.g. http://some.host/_enig/ap/collections/1234/followers + const collectionIdBase = + makeUserUrl(webServer, owningUser, `/ap/collections/${owningUserId}`) + + `/${collectionName}`; + if (!page) { return apDb.get( `SELECT COUNT(id) AS count FROM collection WHERE user_id = ? AND name = ?${privateQuery};`, - [owningUserId, name], + [owningUserId, collectionName], (err, row) => { if (err) { return cb(err); @@ -112,14 +158,14 @@ module.exports = class Collection extends ActivityPubObject { let obj; if (row.count > 0) { obj = { - id: followersUrl, + id: collectionIdBase, type: 'OrderedCollection', - first: `${followersUrl}?page=1`, + first: `${collectionIdBase}?page=1`, totalItems: row.count, }; } else { obj = { - id: followersUrl, + id: collectionIdBase, type: 'OrderedCollection', totalItems: 0, orderedItems: [], @@ -137,7 +183,7 @@ module.exports = class Collection extends ActivityPubObject { FROM collection WHERE user_id = ? AND name = ?${privateQuery} ORDER BY timestamp;`, - [owningUserId, name], + [owningUserId, collectionName], (err, entries) => { if (err) { return cb(err); @@ -149,11 +195,11 @@ module.exports = class Collection extends ActivityPubObject { } const obj = { - id: `${followersUrl}/page=${page}`, + id: `${collectionIdBase}/page=${page}`, type: 'OrderedCollectionPage', totalItems: entries.length, orderedItems: entries, - partOf: followersUrl, + partOf: collectionIdBase, }; return cb(null, new Collection(obj)); @@ -161,7 +207,7 @@ module.exports = class Collection extends ActivityPubObject { ); } - static addToCollection(name, owningUser, objectId, obj, isPrivate, cb) { + static addToCollection(collectionName, owningUser, objectId, obj, isPrivate, cb) { if (!isString(obj)) { obj = JSON.stringify(obj); } @@ -171,7 +217,14 @@ module.exports = class Collection extends ActivityPubObject { apDb.run( `INSERT OR IGNORE INTO collection (name, timestamp, user_id, obj_id, obj_json, is_private) VALUES (?, ?, ?, ?, ?, ?);`, - [name, getISOTimestampString(), owningUserId, objectId, obj, isPrivate], + [ + collectionName, + getISOTimestampString(), + owningUserId, + objectId, + obj, + isPrivate, + ], function res(err) { // non-arrow for 'this' scope if (err) { @@ -182,12 +235,12 @@ module.exports = class Collection extends ActivityPubObject { ); } - static removeFromCollectionById(name, owningUser, objectId, cb) { + static removeFromCollectionById(collectionName, owningUser, objectId, cb) { const owningUserId = isObject(owningUser) ? owningUser.userId : owningUser; apDb.run( `DELETE FROM collection WHERE user_id = ? AND name = ? AND obj_id = ?;`, - [owningUserId, name, objectId], + [owningUserId, collectionName, objectId], err => { return cb(err); } diff --git a/core/activitypub/note.js b/core/activitypub/note.js new file mode 100644 index 000000000..29e0b96f9 --- /dev/null +++ b/core/activitypub/note.js @@ -0,0 +1,152 @@ +const Message = require('../message'); +const ActivityPubObject = require('./object'); +const { Errors } = require('../enig_error'); +const { getISOTimestampString } = require('../database'); +const User = require('../user'); +const { messageBodyToHtml } = require('./util'); + +// deps +const { v5: UUIDv5 } = require('uuid'); +const Actor = require('./actor'); +const moment = require('moment'); +const Collection = require('./collection'); +const async = require('async'); + +const APMessageIdNamespace = '307bc7b3-3735-4573-9a20-e3f9eaac29c5'; + +module.exports = class Note extends ActivityPubObject { + constructor(obj) { + super(obj); + } + + isValid() { + if (!super.isValid()) { + return false; + } + + // :TODO: validate required properties + + return true; + } + + static fromPublicNoteId(noteId, cb) { + Collection.embeddedObjById('outbox', false, noteId, (err, obj) => { + if (err) { + return cb(err); + } + + return cb(null, new Note(obj.object)); + }); + } + + // A local Message bound for ActivityPub + static fromLocalOutgoingMessage(message, webServer, cb) { + const localUserId = message.getLocalFromUserId(); + if (!localUserId) { + return cb(Errors.UnexpectedState('Invalid user ID for local user!')); + } + + if (Message.AddressFlavor.ActivityPub !== message.getAddressFlavor()) { + return cb( + Errors.Invalid('Cannot build note for non-ActivityPub addressed message') + ); + } + + const remoteActorAccount = message.getRemoteToUser(); + if (!remoteActorAccount) { + return cb( + Errors.UnexpectedState('Message does not contain a remote address') + ); + } + + async.waterfall( + [ + callback => { + return User.getUser(localUserId, callback); + }, + (fromUser, callback) => { + Actor.fromLocalUser(fromUser, webServer, (err, fromActor) => { + return callback(err, fromUser, fromActor); + }); + }, + (fromUser, fromActor, callback) => { + Actor.fromAccountName(remoteActorAccount, (err, remoteActor) => { + return callback(err, fromUser, fromActor, remoteActor); + }); + }, + (fromUser, fromActor, remoteActor, callback) => { + const to = message.isPrivate() + ? remoteActor.id + : Collection.PublicCollectionId; + + // Refs + // - https://docs.joinmastodon.org/spec/activitypub/#properties-used + const obj = { + id: ActivityPubObject.makeObjectId(webServer, 'note'), + type: 'Note', + published: getISOTimestampString(message.modTimestamp), + to, + attributedTo: fromActor.id, + audience: [message.isPrivate() ? 'as:Private' : 'as:Public'], + + // :TODO: inReplyto if this is a reply; we need this store in message meta. + + content: messageBodyToHtml(message.message.trim()), + }; + + const note = new Note(obj); + return callback(null, { note, fromUser, remoteActor }); + }, + ], + (err, noteInfo) => { + return cb(err, noteInfo); + } + ); + } + + toMessage(cb) { + // stable ID based on Note ID + const message = new Message({ + uuid: UUIDv5(this.id, APMessageIdNamespace), + }); + + // Fetch the remote actor + Actor.fromId(this.attributedTo, false, (err, attributedToActor) => { + if (err) { + // :TODO: Log me + message.toUserName = this.attributedTo; // have some sort of value =/ + } else { + message.toUserName = + attributedToActor.preferredUsername || this.attributedTo; + } + + message.subject = this.summary || '-ActivityPub-'; + message.message = this.content; // :TODO: HTML to suitable format, or even strip + + try { + message.modTimestamp = moment(this.published); + } catch (e) { + // :TODO: Log warning + message.modTimestamp = moment(); + } + + // :TODO: areaTag + // :TODO: replyToMsgId from 'inReplyTo' + // :TODO: RemoteFromUser + + message.meta[Message.WellKnownMetaCategories.ActivityPub] = + message.meta[Message.WellKnownMetaCategories.ActivityPub] || {}; + const apMeta = message.meta[Message.WellKnownAreaTags.ActivityPub]; + + apMeta[Message.ActivityPubPropertyNames.ActivityId] = this.id; + if (this.InReplyTo) { + apMeta[Message.ActivityPubPropertyNames.InReplyTo] = this.InReplyTo; + } + + message.setRemoteFromUser(this.attributedTo); + message.setExternalFlavor(Message.ExternalFlavor.ActivityPub); + + return cb(null, message); + }); + } +}; diff --git a/core/activitypub/object.js b/core/activitypub/object.js new file mode 100644 index 000000000..e81497571 --- /dev/null +++ b/core/activitypub/object.js @@ -0,0 +1,45 @@ +const { ActivityStreamsContext } = require('./const'); +const { WellKnownLocations } = require('../servers/content/web'); + +// deps +const { isString } = require('lodash'); +const { v4: UUIDv4 } = require('uuid'); + +module.exports = class ActivityPubObject { + constructor(obj) { + this['@context'] = ActivityStreamsContext; + Object.assign(this, obj); + } + + static fromJsonString(s) { + let obj; + try { + obj = JSON.parse(s); + obj = new ActivityPubObject(obj); + } catch (e) { + return null; + } + return obj; + } + + isValid() { + const nes = s => isString(s) && s.length > 1; + // :TODO: Additional validation + if ( + (this['@context'] === ActivityStreamsContext || + this['@context'][0] === ActivityStreamsContext) && + nes(this.id) && + nes(this.type) + ) { + return true; + } + return false; + } + + static makeObjectId(webServer, suffix) { + // e.g. http://some.host/_enig/ap/bf81a22e-cb3e-41c8-b114-21f375b61124/activity + return webServer.buildUrl( + WellKnownLocations.Internal + `/ap/${UUIDv4()}/${suffix}` + ); + } +}; diff --git a/core/database.js b/core/database.js index 8427b592c..dc82b705d 100644 --- a/core/database.js +++ b/core/database.js @@ -519,11 +519,19 @@ dbs.message.run( ON actor_cache (actor_id);` ); + // Mapping of known aliases for a fully qualified Actor ID + // generally obtained via WebFinger dbs.activitypub.run( - `CREATE INDEX IF NOT EXISTS outbox_activity_json_type_index0 - ON outbox (json_extract(activity_json, '$.type'));` + `CREATE TABLE IF NOT EXISTS actor_alias_cache ( + id INTEGER PRIMARY KEY, + alias VARCHAR NOT NULL, + actor_id VARCHAR NOT NULL, -- Fully qualified Actor ID/URL + + UNIQUE(alias) + );` ); + // ActivityPub Collections of various types such as followers, following, likes, ... dbs.activitypub.run( `CREATE TABLE IF NOT EXISTS collection ( id INTEGER PRIMARY KEY, -- Auto-generated key diff --git a/core/message.js b/core/message.js index 2e11e0f06..43bc75176 100644 --- a/core/message.js +++ b/core/message.js @@ -178,7 +178,25 @@ module.exports = class Message { } isFromRemoteUser() { - return null !== _.get(this, 'meta.System.remote_from_user', null); + return null !== this.getRemoteFromUser(); + } + + setRemoteFromUser(remoteFrom) { + this.meta[Message.WellKnownMetaCategories.System][ + Message.SystemMetaNames.RemoteFromUser + ] = remoteFrom; + } + + getRemoteFromUser() { + return _.get( + this, + [ + 'meta', + Message.WellKnownMetaCategories.System, + Message.SystemMetaNames.RemoteFromUser, + ], + null + ); } isCP437Encodable() { diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index 029cda363..3ffc2a493 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -8,6 +8,7 @@ const Log = require('../logger').log; const async = require('async'); const _ = require('lodash'); const Collection = require('../activitypub/collection'); +const Note = require('../activitypub/note'); exports.moduleInfo = { name: 'ActivityPub', @@ -42,18 +43,31 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule async.waterfall( [ callback => { - return Activity.noteFromLocalMessage( - this._webServer(), + Note.fromLocalOutgoingMessage( message, - callback + this._webServer(), + (err, noteInfo) => { + return callback(err, noteInfo); + } ); }, (noteInfo, callback) => { - const { activity, fromUser, remoteActor } = noteInfo; + const { note, fromUser, remoteActor } = noteInfo; + + const activity = Activity.makeCreate( + this._webServer(), + note.attributedTo, + note + ); // :TODO: Implement retry logic (connection issues, retryable HTTP status) ?? + //const inbox = remoteActor.inbox; + + const inbox = remoteActor.endpoints.sharedInbox; + activity.object.to = 'https://www.w3.org/ns/activitystreams#Public'; + activity.sendTo( - remoteActor.inbox, + inbox, fromUser, this._webServer(), (err, respBody, res) => { diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 81be485aa..65bab44f8 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -17,6 +17,7 @@ const _ = require('lodash'); const enigma_assert = require('../../../enigma_assert'); const httpSignature = require('http-signature'); const async = require('async'); +const Note = require('../../../activitypub/note'); exports.moduleInfo = { name: 'ActivityPub', @@ -98,6 +99,13 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }, }); + this.webServer.addRoute({ + method: 'GET', + // e.g. http://some.host/_enig/ap/bf81a22e-cb3e-41c8-b114-21f375b61124/note + path: /^\/_enig\/ap\/[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}\/note$/, + handler: this._singlePublicNoteGetHandler.bind(this), + }); + // :TODO: NYI // this.webServer.addRoute({ // method: 'GET', @@ -359,6 +367,22 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this._getCollectionHandler('outbox', req, resp, signature); } + _singlePublicNoteGetHandler(req, resp) { + this.log.debug({ url: req.url }, 'Request for "Note"'); + + const url = new URL(req.url, `https://${req.headers.host}`); + const noteId = url.toString(); + + Note.fromPublicNoteId(noteId, (err, note) => { + if (err) { + return this.webServer.internalServerError(resp, err); + } + + resp.writeHead(200, { 'Content-Type': 'text/html' }); + return resp.end(note.content); + }); + } + _accountNameFromUserPath(url, suffix) { const re = new RegExp(`^/_enig/ap/users/(.+)/${suffix}(\\?page=[0-9]+)?$`); const m = url.pathname.match(re); @@ -478,7 +502,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.resourceNotFound(resp); } - Actor.fromRemoteUrl(activity.actor, (err, actor) => { + Actor.fromId(activity.actor, (err, actor) => { if (err) { return this.webServer.internalServerError(resp, err); } From d5446cdb51c18e5ccfe41060615b7887dd8fd8d8 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Tue, 24 Jan 2023 18:11:28 -0700 Subject: [PATCH 079/233] Cleanup and placeholder --- core/activitypub/activity.js | 12 +++++++ core/activitypub/collection.js | 30 ++++++++++++++++++ core/activitypub/const.js | 19 ++++++++++++ .../content/web_handlers/activitypub.js | 31 ++++++++++++++++--- misc/menu_templates/private_mail.in.hjson | 2 +- 5 files changed, 89 insertions(+), 5 deletions(-) create mode 100644 core/activitypub/const.js diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index 83dc3e28d..a5af0416f 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -4,6 +4,7 @@ const ActivityPubObject = require('./object'); const { Errors } = require('../enig_error'); const UserProps = require('../user_property'); const { postJson } = require('../http_util'); +const { getISOTimestampString } = require('../database'); // deps const _ = require('lodash'); @@ -45,6 +46,17 @@ module.exports = class Activity extends ActivityPubObject { }); } + static makeTombstone(obj) { + const deleted = getISOTimestampString(); + return new Activity({ + id: obj.id, + type: 'Tombstone', + deleted, + published: deleted, + updated: deleted, + }); + } + sendTo(actorUrl, fromUser, webServer, cb) { const privateKey = fromUser.getProperty(UserProps.PrivateActivityPubSigningKey); if (_.isEmpty(privateKey)) { diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index 8bef5727a..3f7192088 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -54,6 +54,17 @@ module.exports = class Collection extends ActivityPubObject { ); } + static addFollowRequest(owningUser, requestingActor, cb) { + return Collection.addToCollection( + 'follow_requests', + owningUser, + requestingActor.id, + requestingActor, + true, + cb + ); + } + static outbox(owningUser, page, webServer, cb) { return Collection.getOrdered( 'outbox', @@ -207,6 +218,25 @@ module.exports = class Collection extends ActivityPubObject { ); } + // https://www.w3.org/TR/activitypub/#update-activity-inbox + static updateCollectionEntry(collectionName, objectId, obj, cb) { + if (!isString(obj)) { + obj = JSON.stringify(obj); + } + + // :TODO: The receiving server MUST take care to be sure that the Update is authorized to modify its object. At minimum, this may be done by ensuring that the Update and its object are of same origin. + + apDb.run( + `UPDATE collection + SET obj_json = ?, timestamp = ? + WHERE name = ? AND obj_id = ?;`, + [obj, collectionName, getISOTimestampString(), objectId], + err => { + return cb(err); + } + ); + } + static addToCollection(collectionName, owningUser, objectId, obj, isPrivate, cb) { if (!isString(obj)) { obj = JSON.stringify(obj); diff --git a/core/activitypub/const.js b/core/activitypub/const.js new file mode 100644 index 000000000..b56027708 --- /dev/null +++ b/core/activitypub/const.js @@ -0,0 +1,19 @@ +exports.ActivityStreamsContext = 'https://www.w3.org/ns/activitystreams'; + +const WellKnownActivity = { + Create: 'Create', + Update: 'Update', + Delete: 'Delete', + Follow: 'Follow', + Accept: 'Accept', + Reject: 'Reject', + Add: 'Add', + Remove: 'Remove', + Like: 'Like', + Announce: 'Announce', + Undo: 'Undo', +}; +exports.WellKnownActivity = WellKnownActivity; + +const WellKnownActivityTypes = Object.values(WellKnownActivity); +exports.WellKnownActivityTypes = WellKnownActivityTypes; diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 65bab44f8..7fb6fbdf8 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -203,6 +203,9 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { resp ); + case 'Update': + return this._inboxUpdateRequestHandler(activity, req, resp); + case 'Undo': return this._inboxUndoRequestHandler(activity, req, resp); @@ -378,6 +381,8 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.internalServerError(resp, err); } + // :TODO: support a template here + resp.writeHead(200, { 'Content-Type': 'text/html' }); return resp.end(note.content); }); @@ -431,6 +436,11 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { _inboxFollowRequestHandler(activity, remoteActor, user, resp) { this.log.info({ user_id: user.userId, actor: activity.actor }, 'Follow request'); + const ok = () => { + resp.writeHead(200, { 'Content-Type': 'text/html' }); + return resp.end(''); + }; + // // If the user blindly accepts Followers, we can persist // and send an 'Accept' now. Otherwise, we need to queue this @@ -440,16 +450,29 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { const activityPubSettings = ActivityPubSettings.fromUser(user); if (!activityPubSettings.manuallyApproveFollowers) { this._recordAcceptedFollowRequest(user, remoteActor, activity); + return ok(); } else { - // :TODO: queue the request + Collection.addFollowRequest(user, remoteActor, err => { + if (err) { + return this.internalServerError(resp, err); + } + + return ok(); + }); } + } - resp.writeHead(200, { 'Content-Type': 'text/html' }); - return resp.end(''); + _inboxUpdateRequestHandler(activity, req, resp) { + this.log.info({ actor: activity.actor }, 'Update Activity request'); + + return this.webServer.notImplemented(resp); + + // Collection.updateCollectionEntry('inbox', activity.id, activity, err => { + // }); } _inboxUndoRequestHandler(activity, req, resp) { - this.log.info({ actor: activity.actor }, 'Undo request'); + this.log.info({ actor: activity.actor }, 'Undo Activity request'); const url = new URL(req.url, `https://${req.headers.host}`); const accountName = this._accountNameFromUserPath(url, 'inbox'); diff --git a/misc/menu_templates/private_mail.in.hjson b/misc/menu_templates/private_mail.in.hjson index e27314dca..2914a11a9 100644 --- a/misc/menu_templates/private_mail.in.hjson +++ b/misc/menu_templates/private_mail.in.hjson @@ -69,7 +69,7 @@ } ] } - actionKeys: @reference: common.escToPrev + actionKeys: @reference:common.escToPrev } 1: { mci: { From f8b132310c6be9d01aea328f4c46e2c46bb71e7d Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Tue, 24 Jan 2023 19:16:14 -0600 Subject: [PATCH 080/233] Cleaned up missing ./const --- core/activitypub/activity.js | 3 +-- core/activitypub/actor.js | 4 ++-- core/activitypub/object.js | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index a5af0416f..03ea46c9c 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -1,5 +1,4 @@ -const { selfUrl } = require('./util'); -const { WellKnownActivityTypes } = require('./const'); +const { selfUrl, WellKnownActivityTypes } = require('./util'); const ActivityPubObject = require('./object'); const { Errors } = require('../enig_error'); const UserProps = require('../user_property'); diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 5466107f4..4db3f0740 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -5,13 +5,13 @@ const { Errors } = require('../enig_error.js'); const UserProps = require('../user_property'); const { + ActivityStreamsContext, webFingerProfileUrl, makeUserUrl, selfUrl, isValidLink, makeSharedInboxUrl, -} = require('../activitypub/util'); -const { ActivityStreamsContext } = require('./const'); +} = require('./util'); const Log = require('../logger').log; const { queryWebFinger } = require('../webfinger'); const EnigAssert = require('../enigma_assert'); diff --git a/core/activitypub/object.js b/core/activitypub/object.js index e81497571..d2286f45f 100644 --- a/core/activitypub/object.js +++ b/core/activitypub/object.js @@ -1,4 +1,4 @@ -const { ActivityStreamsContext } = require('./const'); +const { ActivityStreamsContext } = require('./util'); const { WellKnownLocations } = require('../servers/content/web'); // deps From 5b69cdb516dd8bcccabd273d4c4b4fb47b2a38af Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Tue, 24 Jan 2023 20:51:40 -0600 Subject: [PATCH 081/233] Changed activity.js back for WellKnownActivityTypes --- core/activitypub/activity.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index 03ea46c9c..a5af0416f 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -1,4 +1,5 @@ -const { selfUrl, WellKnownActivityTypes } = require('./util'); +const { selfUrl } = require('./util'); +const { WellKnownActivityTypes } = require('./const'); const ActivityPubObject = require('./object'); const { Errors } = require('../enig_error'); const UserProps = require('../user_property'); From 1aa56fbaa7ff4013affa7b368ff0493856afa3a1 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Tue, 24 Jan 2023 21:40:12 -0700 Subject: [PATCH 082/233] WIP: Import messages sent to local Actor inboxes to their private mail --- core/activitypub/collection.js | 13 ++- core/activitypub/const.js | 1 + core/activitypub/note.js | 48 +++++++---- core/activitypub/util.js | 6 ++ .../content/web_handlers/activitypub.js | 83 +++++++++++++++---- core/user.js | 9 ++ package.json | 1 + yarn.lock | 5 ++ 8 files changed, 132 insertions(+), 34 deletions(-) diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index 3f7192088..43da25356 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -3,11 +3,11 @@ const ActivityPubObject = require('./object'); const apDb = require('../database').dbs.activitypub; const { getISOTimestampString } = require('../database'); const { Errors } = require('../enig_error.js'); +const { PublicCollectionId: APPublicCollectionId } = require('./const'); // deps const { isString, get, isObject } = require('lodash'); -const APPublicCollectionId = 'https://www.w3.org/ns/activitystreams#Public'; const APPublicOwningUserId = 0; module.exports = class Collection extends ActivityPubObject { @@ -88,6 +88,17 @@ module.exports = class Collection extends ActivityPubObject { ); } + static addInboxItem(inboxItem, owningUser, cb) { + return Collection.addToCollection( + 'inbox', + owningUser, + inboxItem.id, + inboxItem, + true, + cb + ); + } + static addPublicInboxItem(inboxItem, cb) { return Collection.addToCollection( 'publicInbox', diff --git a/core/activitypub/const.js b/core/activitypub/const.js index b56027708..61e005f2f 100644 --- a/core/activitypub/const.js +++ b/core/activitypub/const.js @@ -1,4 +1,5 @@ exports.ActivityStreamsContext = 'https://www.w3.org/ns/activitystreams'; +exports.PublicCollectionId = 'https://www.w3.org/ns/activitystreams#Public'; const WellKnownActivity = { Create: 'Create', diff --git a/core/activitypub/note.js b/core/activitypub/note.js index 29e0b96f9..179d2e9fc 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -3,7 +3,7 @@ const ActivityPubObject = require('./object'); const { Errors } = require('../enig_error'); const { getISOTimestampString } = require('../database'); const User = require('../user'); -const { messageBodyToHtml } = require('./util'); +const { messageBodyToHtml, htmlToMessageBody } = require('./util'); // deps const { v5: UUIDv5 } = require('uuid'); @@ -11,6 +11,7 @@ const Actor = require('./actor'); const moment = require('moment'); const Collection = require('./collection'); const async = require('async'); +const { isString, isObject } = require('lodash'); const APMessageIdNamespace = '307bc7b3-3735-4573-9a20-e3f9eaac29c5'; @@ -90,7 +91,7 @@ module.exports = class Note extends ActivityPubObject { audience: [message.isPrivate() ? 'as:Private' : 'as:Public'], // :TODO: inReplyto if this is a reply; we need this store in message meta. - + summary: message.subject, content: messageBodyToHtml(message.message.trim()), }; @@ -104,24 +105,39 @@ module.exports = class Note extends ActivityPubObject { ); } - toMessage(cb) { + toMessage(options, cb) { + if (!isObject(options.toUser) || !isString(options.areaTag)) { + return cb(Errors.MissingParam('Missing one or more required options!')); + } + // stable ID based on Note ID const message = new Message({ uuid: UUIDv5(this.id, APMessageIdNamespace), }); - // Fetch the remote actor + // Fetch the remote actor info to get their user info Actor.fromId(this.attributedTo, false, (err, attributedToActor) => { if (err) { // :TODO: Log me - message.toUserName = this.attributedTo; // have some sort of value =/ + message.fromUserName = this.attributedTo; // have some sort of value =/ } else { - message.toUserName = + message.fromUserName = attributedToActor.preferredUsername || this.attributedTo; } + // + // Note's can be addressed to 1:N users, but a Message is a 1:1 + // relationship. This method requires the mapping up front via options + // + (message.toUserName = options.toUser.username), + (message.meta.System[Message.SystemMetaNames.LocalToUserID] = + options.toUser.userId); + message.areaTag = options.areaTag || Message.WellKnownAreaTags.Private; + message.subject = this.summary || '-ActivityPub-'; - message.message = this.content; // :TODO: HTML to suitable format, or even strip + + // :TODO: it would be better to do some basic HTML to ANSI or pipe codes perhaps + message.message = htmlToMessageBody(this.content); try { message.modTimestamp = moment(this.published); @@ -130,22 +146,18 @@ module.exports = class Note extends ActivityPubObject { message.modTimestamp = moment(); } - // :TODO: areaTag // :TODO: replyToMsgId from 'inReplyTo' - // :TODO: RemoteFromUser - - message.meta[Message.WellKnownMetaCategories.ActivityPub] = - message.meta[Message.WellKnownMetaCategories.ActivityPub] || {}; - const apMeta = message.meta[Message.WellKnownAreaTags.ActivityPub]; + message.setRemoteFromUser(this.attributedTo); + message.setExternalFlavor(Message.AddressFlavor.ActivityPub); - apMeta[Message.ActivityPubPropertyNames.ActivityId] = this.id; + message.meta.ActivityPub = message.meta.ActivityPub || {}; + message.meta.ActivityPub[Message.ActivityPubPropertyNames.ActivityId] = + this.id; if (this.InReplyTo) { - apMeta[Message.ActivityPubPropertyNames.InReplyTo] = this.InReplyTo; + message.meta.ActivityPub[Message.ActivityPubPropertyNames.InReplyTo] = + this.InReplyTo; } - message.setRemoteFromUser(this.attributedTo); - message.setExternalFlavor(Message.ExternalFlavor.ActivityPub); - return cb(null, message); }); } diff --git a/core/activitypub/util.js b/core/activitypub/util.js index a155f1b7a..4b8b25e39 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -11,6 +11,7 @@ const waterfall = require('async/waterfall'); const fs = require('graceful-fs'); const paths = require('path'); const moment = require('moment'); +const { striptags } = require('striptags'); exports.ActivityStreamsContext = 'https://www.w3.org/ns/activitystreams'; exports.isValidLink = isValidLink; @@ -22,6 +23,7 @@ exports.userFromAccount = userFromAccount; exports.accountFromSelfUrl = accountFromSelfUrl; exports.getUserProfileTemplatedBody = getUserProfileTemplatedBody; exports.messageBodyToHtml = messageBodyToHtml; +exports.htmlToMessageBody = htmlToMessageBody; // :TODO: more info in default // this profile template is the *default* for both WebFinger @@ -175,3 +177,7 @@ function getUserProfileTemplatedBody( function messageBodyToHtml(body) { return `

    ${body.replace(/\r?\n/g, '
    ')}

    `; } + +function htmlToMessageBody(html) { + return striptags(html); +} diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 7fb6fbdf8..05e836f3b 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -11,6 +11,7 @@ const ActivityPubSettings = require('../../../activitypub/settings'); const Actor = require('../../../activitypub/actor'); const Collection = require('../../../activitypub/collection'); const EnigAssert = require('../../../enigma_assert'); +const Message = require('../../../message'); // deps const _ = require('lodash'); @@ -18,6 +19,7 @@ const enigma_assert = require('../../../enigma_assert'); const httpSignature = require('http-signature'); const async = require('async'); const Note = require('../../../activitypub/note'); +const User = require('../../../user'); exports.moduleInfo = { name: 'ActivityPub', @@ -262,12 +264,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _sharedInboxCreateActivity(req, resp, activity) { - // When an object is being delivered to the originating actor's followers, - // a server MAY reduce the number of receiving actors delivered to by - // identifying all followers which share the same sharedInbox who would - // otherwise be individual recipients and instead deliver objects to said - // sharedInbox. Thus in this scenario, the remote/receiving server participates - // in determining targeting and performing delivery to specific inboxes. let toActors = activity.to; if (!Array.isArray(toActors)) { toActors = [toActors]; @@ -288,22 +284,36 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _deliverSharedInboxNote(req, resp, toActors, activity) { + // When an object is being delivered to the originating actor's followers, + // a server MAY reduce the number of receiving actors delivered to by + // identifying all followers which share the same sharedInbox who would + // otherwise be individual recipients and instead deliver objects to said + // sharedInbox. Thus in this scenario, the remote/receiving server participates + // in determining targeting and performing delivery to specific inboxes. + const note = new Note(activity.object); + if (!note.isValid()) { + // :TODO: Log me + return this.webServer.notImplemented(); + } + async.forEach( toActors, - (actor, nextActor) => { - if (Collection.PublicCollectionId === actor) { + (actorId, nextActor) => { + if (Collection.PublicCollectionId === actorId) { // Deliver to inbox for "everyone": // - Add to 'sharedInbox' collection // - Collection.addPublicInboxItem(activity.object, err => { - if (err) { - return nextActor(err); - } - - return nextActor(null); + Collection.addPublicInboxItem(note, err => { + return nextActor(err); }); } else { - nextActor(null); + this._deliverInboxNoteToLocalActor( + req, + resp, + actorId, + note, + nextActor + ); } }, err => { @@ -317,6 +327,49 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { ); } + _deliverInboxNoteToLocalActor(req, resp, actorId, note, cb) { + const localUserName = accountFromSelfUrl(actorId); + if (!localUserName) { + this.log.debug({ url: req.url }, 'Could not get username from URL'); + return cb(null); + } + + User.getUserByUsername(localUserName, (err, localUser) => { + if (err) { + this.log.info( + { username: localUserName }, + `No local user account for "${localUserName}"` + ); + return cb(null); + } + + Collection.addInboxItem(note, localUser, err => { + if (err) { + return cb(err); + } + + // + // Import the item to the user's private mailbox + // + const messageOpts = { + // Notes can have 1:N 'to' relationships while a Message is 1:1; + toUser: localUser, + areaTag: Message.WellKnownAreaTags.Private, + }; + + note.toMessage(messageOpts, (err, message) => { + if (err) { + return cb(err); + } + + message.persist(err => { + return cb(err); + }); + }); + }); + }); + } + _getCollectionHandler(name, req, resp, signature) { EnigAssert(signature, 'Missing signature!'); diff --git a/core/user.js b/core/user.js index b2b39e3ff..f03b9c69a 100644 --- a/core/user.js +++ b/core/user.js @@ -937,6 +937,15 @@ module.exports = class User { ); } + static getUserByUsername(username, cb) { + User.getUserIdAndName(username, (err, userId) => { + if (err) { + return cb(err); + } + return User.getUser(userId, cb); + }); + } + static getUserIdAndNameByRealName(realName, cb) { userDb.get( `SELECT id, user_name diff --git a/package.json b/package.json index 7e4bd4cc4..9eae0e511 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,7 @@ "sqlite3": "5.0.11", "sqlite3-trans": "1.3.0", "ssh2": "1.11.0", + "striptags": "^4.0.0-alpha.4", "systeminformation": "5.12.3", "telnet-socket": "0.2.4", "temptmp": "^1.1.0", diff --git a/yarn.lock b/yarn.lock index b7b82df24..14f559c97 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2675,6 +2675,11 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== +striptags@^4.0.0-alpha.4: + version "4.0.0-alpha.4" + resolved "https://registry.yarnpkg.com/striptags/-/striptags-4.0.0-alpha.4.tgz#824f1ac040f824574316ce87a3663c0c4df9900d" + integrity sha512-/0jWyVWhpg9ciRHfjKYBpMHXct/HrFRfsR2HU77nGPbc8SPcVSIHZlZR/0TG3MyPq2C+HiHuwx8BlbcdI/cNbw== + supports-color@^7.1.0: version "7.1.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz" From 82091c11c1108ff05921b01b0f1a6c9ba61ae6dd Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Tue, 24 Jan 2023 21:53:39 -0700 Subject: [PATCH 083/233] pretty --- core/servers/content/web_handlers/activitypub.js | 1 + 1 file changed, 1 insertion(+) diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 05e836f3b..7dc54d839 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -318,6 +318,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }, err => { if (err) { + // :TODO: If sqlite constraint, just return OK -- it's a dupe return this.webServer.internalServerError(resp, err); } From 4f632fd8c4e70d4b663c33983f287df9dae85574 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 25 Jan 2023 18:41:47 -0700 Subject: [PATCH 084/233] Many WebFinger improvements, can now round trip private messages --- core/activitypub/actor.js | 94 ++++++++++--------- core/activitypub/note.js | 27 +++--- core/activitypub/util.js | 5 + core/database.js | 3 +- core/enig_error.js | 1 + core/mail_util.js | 2 +- core/scanner_tossers/activitypub.js | 6 +- .../content/web_handlers/activitypub.js | 8 +- core/webfinger.js | 44 ++++++--- 9 files changed, 116 insertions(+), 74 deletions(-) diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 4db3f0740..3d298ea24 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -11,6 +11,7 @@ const { selfUrl, isValidLink, makeSharedInboxUrl, + userNameFromSubject, } = require('./util'); const Log = require('../logger').log; const { queryWebFinger } = require('../webfinger'); @@ -24,6 +25,9 @@ const _ = require('lodash'); const mimeTypes = require('mime-types'); const { getJson } = require('../http_util.js'); const { getISOTimestampString } = require('../database.js'); +const moment = require('moment'); + +const ActorCacheTTL = moment.duration(1, 'day'); // https://www.w3.org/TR/activitypub/#actor-objects module.exports = class Actor extends ActivityPubObject { @@ -138,43 +142,42 @@ module.exports = class Actor extends ActivityPubObject { return cb(null, new Actor(obj)); } - static fromId(id, forceRefresh, cb) { - if (_.isFunction(forceRefresh) && !cb) { - cb = forceRefresh; - forceRefresh = false; - } + static fromId(id, cb) { + Actor._fromCache(id, (err, actor, subject) => { + if (!err) { + // cache hit + return cb(null, actor, subject); + } - Actor.fromCache(id, (err, actor) => { - if (err) { - if (forceRefresh) { - return cb(err); + // cache miss: attempt to fetch & populate + Actor._fromWebFinger(id, (err, actor, subject) => { + if (subject) { + subject = `@${userNameFromSubject(subject)}`; // e.g. @Username@host.com + } else { + subject = actor.id; // best we can do for now } - Actor.fromRemoteQuery(id, (err, actor) => { - // deliver result to caller - cb(err, actor); - - // cache our entry - if (actor) { - apDb.run( - `INSERT INTO actor_cache (actor_id, actor_json, timestamp) - VALUES (?, ?, ?);`, - [id, JSON.stringify(actor), getISOTimestampString()], - err => { - if (err) { - // :TODO: log me - } + // deliver result to caller + cb(err, actor, subject); + + // cache our entry + if (actor) { + apDb.run( + `REPLACE INTO actor_cache (actor_id, actor_json, subject, timestamp) + VALUES (?, ?, ?, ?);`, + [id, JSON.stringify(actor), subject, getISOTimestampString()], + err => { + if (err) { + // :TODO: log me } - ); - } - }); - } else { - return cb(null, actor); - } + } + ); + } + }); }); } - static fromRemoteQuery(id, cb) { + static _fromRemoteQuery(id, cb) { const headers = { Accept: 'application/activity+json', }; @@ -194,13 +197,13 @@ module.exports = class Actor extends ActivityPubObject { }); } - static fromCache(id, cb) { + static _fromCache(id, cb) { apDb.get( - `SELECT actor_json + `SELECT actor_json, subject, timestamp FROM actor_cache - WHERE actor_id = ? + WHERE actor_id = ? OR subject = ? LIMIT 1;`, - [id], + [id, id], (err, row) => { if (err) { return cb(err); @@ -210,6 +213,11 @@ module.exports = class Actor extends ActivityPubObject { return cb(Errors.DoesNotExist()); } + const timestamp = moment(row.timestamp); + if (moment().isAfter(timestamp.add(ActorCacheTTL))) { + return cb(Errors.Expired('The cache entry is expired')); + } + const obj = ActivityPubObject.fromJsonString(row.actor_json); if (!obj || !obj.isValid()) { return cb(Errors.Invalid('Failed to create ActivityPub object')); @@ -220,20 +228,14 @@ module.exports = class Actor extends ActivityPubObject { return cb(Errors.Invalid('Failed to create Actor object')); } - return cb(null, actor); + const subject = row.subject || actor.id; + return cb(null, actor, subject); } ); } - static fromAccountName(actorName, cb) { - // :TODO: cache first -- do we have an Actor for this account already with a OK TTL? - - // account names can come in multiple forms, so need a cache mapping of that as well - // actor_alias_cache - // actor_alias | actor_id - // - - queryWebFinger(actorName, (err, res) => { + static _fromWebFinger(actorQuery, cb) { + queryWebFinger(actorQuery, (err, res) => { if (err) { return cb(err); } @@ -255,7 +257,9 @@ module.exports = class Actor extends ActivityPubObject { } // we can now query the href value for an Actor - return Actor.fromId(activityLink.href, cb); + return Actor._fromRemoteQuery(activityLink.href, (err, actor) => { + return cb(err, actor, res.subject); + }); }); } }; diff --git a/core/activitypub/note.js b/core/activitypub/note.js index 179d2e9fc..400421555 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -14,6 +14,7 @@ const async = require('async'); const { isString, isObject } = require('lodash'); const APMessageIdNamespace = '307bc7b3-3735-4573-9a20-e3f9eaac29c5'; +const APDefaultSummary = '[ActivityPub]'; module.exports = class Note extends ActivityPubObject { constructor(obj) { @@ -71,7 +72,7 @@ module.exports = class Note extends ActivityPubObject { }); }, (fromUser, fromActor, callback) => { - Actor.fromAccountName(remoteActorAccount, (err, remoteActor) => { + Actor.fromId(remoteActorAccount, (err, remoteActor) => { return callback(err, fromUser, fromActor, remoteActor); }); }, @@ -91,10 +92,14 @@ module.exports = class Note extends ActivityPubObject { audience: [message.isPrivate() ? 'as:Private' : 'as:Public'], // :TODO: inReplyto if this is a reply; we need this store in message meta. - summary: message.subject, content: messageBodyToHtml(message.message.trim()), }; + // Filter out replace replacement + if (message.subject !== APDefaultSummary) { + obj.summary = message.subject; + } + const note = new Note(obj); return callback(null, { note, fromUser, remoteActor }); }, @@ -116,25 +121,23 @@ module.exports = class Note extends ActivityPubObject { }); // Fetch the remote actor info to get their user info - Actor.fromId(this.attributedTo, false, (err, attributedToActor) => { + Actor.fromId(this.attributedTo, (err, attributedToActor, fromActorSubject) => { if (err) { - // :TODO: Log me - message.fromUserName = this.attributedTo; // have some sort of value =/ - } else { - message.fromUserName = - attributedToActor.preferredUsername || this.attributedTo; + return cb(err); } + message.fromUserName = fromActorSubject || this.attributedTo; + // // Note's can be addressed to 1:N users, but a Message is a 1:1 // relationship. This method requires the mapping up front via options // - (message.toUserName = options.toUser.username), - (message.meta.System[Message.SystemMetaNames.LocalToUserID] = - options.toUser.userId); + message.toUserName = options.toUser.username; + message.meta.System[Message.SystemMetaNames.LocalToUserID] = + options.toUser.userId; message.areaTag = options.areaTag || Message.WellKnownAreaTags.Private; - message.subject = this.summary || '-ActivityPub-'; + message.subject = this.summary || APDefaultSummary; // :TODO: it would be better to do some basic HTML to ANSI or pipe codes perhaps message.message = htmlToMessageBody(this.content); diff --git a/core/activitypub/util.js b/core/activitypub/util.js index 4b8b25e39..9ba13cc34 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -24,6 +24,7 @@ exports.accountFromSelfUrl = accountFromSelfUrl; exports.getUserProfileTemplatedBody = getUserProfileTemplatedBody; exports.messageBodyToHtml = messageBodyToHtml; exports.htmlToMessageBody = htmlToMessageBody; +exports.userNameFromSubject = userNameFromSubject; // :TODO: more info in default // this profile template is the *default* for both WebFinger @@ -181,3 +182,7 @@ function messageBodyToHtml(body) { function htmlToMessageBody(html) { return striptags(html); } + +function userNameFromSubject(subject) { + return subject.replace(/^acct:(.+)$/, '$1'); +} diff --git a/core/database.js b/core/database.js index dc82b705d..1561e960b 100644 --- a/core/database.js +++ b/core/database.js @@ -505,9 +505,10 @@ dbs.message.run( // Actors we know about and have cached dbs.activitypub.run( `CREATE TABLE IF NOT EXISTS actor_cache ( - id INTEGER PRIMARY KEY, -- Local DB ID + actor_cache_id INTEGER PRIMARY KEY, -- Local DB ID actor_id VARCHAR NOT NULL, -- Fully qualified Actor ID/URL actor_json VARCHAR NOT NULL, -- Actor document + subject VARCHAR, -- Subject obtained from WebFinger, e.g. @Username@some.domain timestamp DATETIME NOT NULL, -- Timestamp in which this Actor was cached UNIQUE(actor_id) diff --git a/core/enig_error.js b/core/enig_error.js index 40422a943..c396cbe40 100644 --- a/core/enig_error.js +++ b/core/enig_error.js @@ -56,6 +56,7 @@ exports.Errors = { Timeout: (reason, reasonCode) => new EnigError('Timeout', -32014, reason, reasonCode), MissingProperty: (reason, reasonCode) => new EnigError('Missing property', -32014, reason, reasonCode), + Expired: (reason, reasonCode) => new EnigError('Expired', -32015, reason, reasonCode), }; exports.ErrorReasons = { diff --git a/core/mail_util.js b/core/mail_util.js index 0b7aef426..8205c449c 100644 --- a/core/mail_util.js +++ b/core/mail_util.js @@ -25,7 +25,7 @@ const EMAIL_REGEX = 43:20/100.2 { flavor : 'ftn', remote : '43:20/100.2' } foo@host.com { name : 'foo', flavor : 'email', remote : 'foo@host.com' } Bar { name : 'Bar', flavor : 'email', remote : 'baz@foobar.com' } - @JoeUser@some.host.com { name : 'Joe User', flavor : 'activitypub', remote 'JoeUser@some.host.com' } + @JoeUser@some.host.com { name : 'JoeUser', flavor : 'activitypub', remote 'JoeUser@some.host.com' } */ function getAddressedToInfo(input) { input = input.trim(); diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index 3ffc2a493..1a07be50d 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -61,10 +61,10 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule ); // :TODO: Implement retry logic (connection issues, retryable HTTP status) ?? - //const inbox = remoteActor.inbox; + const inbox = remoteActor.inbox; - const inbox = remoteActor.endpoints.sharedInbox; - activity.object.to = 'https://www.w3.org/ns/activitystreams#Public'; + // const inbox = remoteActor.endpoints.sharedInbox; + // activity.object.to = 'https://www.w3.org/ns/activitystreams#Public'; activity.sendTo( inbox, diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 7dc54d839..9cb9c9eb6 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -299,6 +299,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { async.forEach( toActors, (actorId, nextActor) => { + // :TODO: verify this - if *any* audience/actor is public, then this message is public I believe. if (Collection.PublicCollectionId === actorId) { // Deliver to inbox for "everyone": // - Add to 'sharedInbox' collection @@ -318,7 +319,12 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }, err => { if (err) { - // :TODO: If sqlite constraint, just return OK -- it's a dupe + // if we get a dupe, just tell the remote everything is A-OK + if ('SQLITE_CONSTRAINT' === err.code) { + resp.writeHead(202); + return resp.end(''); + } + return this.webServer.internalServerError(resp, err); } diff --git a/core/webfinger.js b/core/webfinger.js index bb3b497b2..f8925ed68 100644 --- a/core/webfinger.js +++ b/core/webfinger.js @@ -7,23 +7,45 @@ const { getJson } = require('./http_util'); exports.queryWebFinger = queryWebFinger; -function queryWebFinger(account, cb) { +function queryWebFinger(query, cb) { + // + // Accept a variety of formats to query via WebFinger + // 1) @Username@foo.bar -> query with acct:Username resource + // 2) http/https URL -> query with resource = URL + // 3) If not one of the above and a '/' is present in the query, + // assume https:// and try #2 + // + // ex: @NuSkooler@toot.community -> https://toot.community/.well-known/webfinger with acct:NuSkooler resource - const addrInfo = getAddressedToInfo(account); + const addrInfo = getAddressedToInfo(query); + let resource; + let host; if ( - addrInfo.flavor !== Message.AddressFlavor.ActivityPub && - addrInfo.flavor !== Message.AddressFlavor.Email + addrInfo.flavor === Message.AddressFlavor.ActivityPub || + addrInfo.flavor === Message.AddressFlavor.Email ) { - return cb(Errors.Invalid(`Cannot WebFinger "${account.remote}"; Missing domain`)); - } + host = addrInfo.remote.slice(addrInfo.remote.lastIndexOf('@') + 1); + if (!host) { + return cb(Errors.Invalid(`Unsure how to WebFinger "${query}"`)); + } + resource = `acct:${addrInfo.name}@${host}`; + } else { + if (!/^https?:\/\/.+$/.test(query)) { + resource = `https://${query}`; + } else { + resource = query; + } - const domain = addrInfo.remote.slice(addrInfo.remote.lastIndexOf('@') + 1); - if (!domain) { - return cb(Errors.Invalid(`Cannot WebFinger "${account.remote}"; Missing domain`)); + try { + const url = new URL(resource); + host = url.host; + } catch (e) { + return cb(Errors.Invalid(`Cannot WebFinger "${query}": ${e.message}`)); + } } - const resource = encodeURIComponent(`acct:${account.slice(1)}`); // we need drop the initial '@' prefix - const webFingerUrl = `https://${domain}/.well-known/webfinger?resource=${resource}`; + resource = encodeURIComponent(resource); + const webFingerUrl = `https://${host}/.well-known/webfinger?resource=${resource}`; getJson(webFingerUrl, {}, (err, json, res) => { if (err) { return cb(err); From 0bd2c3db1c29bc32078a13e9b4c901b049efa673 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 25 Jan 2023 22:22:45 -0700 Subject: [PATCH 085/233] Better handling of to/from HTML and BBS message formats, Note handling esp with inReplyTo, etc. --- core/activitypub/note.js | 68 ++++++++++++++----- core/activitypub/util.js | 17 ++++- core/message.js | 1 + core/scanner_tossers/activitypub.js | 10 +++ core/servers/content/web.js | 5 ++ .../content/web_handlers/activitypub.js | 23 ++----- package.json | 1 + yarn.lock | 5 ++ 8 files changed, 95 insertions(+), 35 deletions(-) diff --git a/core/activitypub/note.js b/core/activitypub/note.js index 400421555..9c82b3afd 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -4,6 +4,7 @@ const { Errors } = require('../enig_error'); const { getISOTimestampString } = require('../database'); const User = require('../user'); const { messageBodyToHtml, htmlToMessageBody } = require('./util'); +const { isAnsi } = require('../string_util'); // deps const { v5: UUIDv5 } = require('uuid'); @@ -11,7 +12,7 @@ const Actor = require('./actor'); const moment = require('moment'); const Collection = require('./collection'); const async = require('async'); -const { isString, isObject } = require('lodash'); +const { isString, isObject, truncate } = require('lodash'); const APMessageIdNamespace = '307bc7b3-3735-4573-9a20-e3f9eaac29c5'; const APDefaultSummary = '[ActivityPub]'; @@ -77,26 +78,57 @@ module.exports = class Note extends ActivityPubObject { }); }, (fromUser, fromActor, remoteActor, callback) => { - const to = message.isPrivate() - ? remoteActor.id - : Collection.PublicCollectionId; + if (!message.replyToMsgId) { + return callback(null, null, fromUser, fromActor, remoteActor); + } - // Refs - // - https://docs.joinmastodon.org/spec/activitypub/#properties-used + Message.getMetaValuesByMessageId( + message.replyToMsgId, + Message.WellKnownMetaCategories.ActivityPub, + Message.ActivityPubPropertyNames.NoteId, + (err, replyToNoteId) => { + // (ignore error) + return callback( + null, + replyToNoteId, + fromUser, + fromActor, + remoteActor + ); + } + ); + }, + (replyToNoteId, fromUser, fromActor, remoteActor, callback) => { + const to = [ + message.isPrivate() + ? remoteActor.id + : Collection.PublicCollectionId, + ]; + + const sourceMediaType = isAnsi(message.message) + ? 'text/x-ansi' // ye ol' https://lists.freedesktop.org/archives/xdg/2006-March/006214.html + : 'text/plain'; + + // https://docs.joinmastodon.org/spec/activitypub/#properties-used const obj = { id: ActivityPubObject.makeObjectId(webServer, 'note'), type: 'Note', published: getISOTimestampString(message.modTimestamp), to, attributedTo: fromActor.id, - audience: [message.isPrivate() ? 'as:Private' : 'as:Public'], - - // :TODO: inReplyto if this is a reply; we need this store in message meta. content: messageBodyToHtml(message.message.trim()), + source: { + content: message.message, + mediaType: sourceMediaType, + }, }; - // Filter out replace replacement - if (message.subject !== APDefaultSummary) { + if (replyToNoteId) { + obj.inReplyTo = replyToNoteId; + } + + // ignore the subject if it's our default summary value for replies + if (message.subject !== `RE: ${APDefaultSummary}`) { obj.summary = message.subject; } @@ -137,10 +169,12 @@ module.exports = class Note extends ActivityPubObject { options.toUser.userId; message.areaTag = options.areaTag || Message.WellKnownAreaTags.Private; - message.subject = this.summary || APDefaultSummary; - // :TODO: it would be better to do some basic HTML to ANSI or pipe codes perhaps message.message = htmlToMessageBody(this.content); + message.subject = + this.summary || + truncate(message.message, { length: 32, omission: '...' }) || + APDefaultSummary; try { message.modTimestamp = moment(this.published); @@ -155,10 +189,12 @@ module.exports = class Note extends ActivityPubObject { message.meta.ActivityPub = message.meta.ActivityPub || {}; message.meta.ActivityPub[Message.ActivityPubPropertyNames.ActivityId] = - this.id; - if (this.InReplyTo) { + options.activityId || 0; + message.meta.ActivityPub[Message.ActivityPubPropertyNames.NoteId] = this.id; + + if (this.inReplyTo) { message.meta.ActivityPub[Message.ActivityPubPropertyNames.InReplyTo] = - this.InReplyTo; + this.inReplyTo; } return cb(null, message); diff --git a/core/activitypub/util.js b/core/activitypub/util.js index 9ba13cc34..502b08c71 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -3,6 +3,7 @@ const User = require('../user'); const { Errors, ErrorReasons } = require('../enig_error'); const UserProps = require('../user_property'); const ActivityPubSettings = require('./settings'); +const { stripAnsiControlCodes } = require('../string_util'); // deps const _ = require('lodash'); @@ -12,6 +13,7 @@ const fs = require('graceful-fs'); const paths = require('path'); const moment = require('moment'); const { striptags } = require('striptags'); +const { encode, decode } = require('html-entities'); exports.ActivityStreamsContext = 'https://www.w3.org/ns/activitystreams'; exports.isValidLink = isValidLink; @@ -173,14 +175,23 @@ function getUserProfileTemplatedBody( // // Apply very basic HTML to a message following // Mastodon's supported tags of 'p', 'br', 'a', and 'span': -// https://blog.joinmastodon.org/2018/06/how-to-implement-a-basic-activitypub-server/ +// - https://docs.joinmastodon.org/spec/activitypub/#sanitization +// - https://blog.joinmastodon.org/2018/06/how-to-implement-a-basic-activitypub-server/ // +// :TODO: https://docs.joinmastodon.org/spec/microformats/ function messageBodyToHtml(body) { - return `

    ${body.replace(/\r?\n/g, '
    ')}

    `; + body = encode(stripAnsiControlCodes(body), { mode: 'nonAsciiPrintable' }).replace( + /\r?\n/g, + '
    ' + ); + + return `

    ${body}

    `; } function htmlToMessageBody(html) { - return striptags(html); + //
    ,
    , and
    -> \r\n + html = html.replace(/<\/?br?\/?>/g, '\r\n'); + return striptags(decode(html)); } function userNameFromSubject(subject) { diff --git a/core/message.js b/core/message.js index 43bc75176..bb2b67663 100644 --- a/core/message.js +++ b/core/message.js @@ -117,6 +117,7 @@ const QWKPropertyNames = { const ActivityPubPropertyNames = { ActivityId: 'activitypub_activity_id', // Activity ID; FK to AP table entries InReplyTo: 'activitypub_in_reply_to', // Activity ID from 'inReplyTo' field + NoteId: 'activitypub_note_id', // Note ID specific to Note Activities }; // :TODO: this is a ugly hack due to bad variable names - clean it up & just _.camelCase(k)! diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index 1a07be50d..e4f0cdaad 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -132,6 +132,16 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule } ); }, + (activity, callback) => { + return message.persistMetaValue( + Message.WellKnownMetaCategories.ActivityPub, + Message.ActivityPubPropertyNames.NoteId, + activity.object.id, + err => { + return callback(err, activity); + } + ); + }, ], (err, activity) => { if (err) { diff --git a/core/servers/content/web.js b/core/servers/content/web.js index d10a93949..3c85989f3 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -313,6 +313,11 @@ exports.getModule = class WebServerModule extends ServerModule { }); } + accepted(resp, body = '', headers = { 'Content-Type:': 'text/html' }) { + resp.writeHead(202, 'Accepted', body ? headers : null); + return resp.end(body); + } + badRequest(resp) { return this.respondWithError(resp, 400, 'Bad request.', 'Bad Request'); } diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 9cb9c9eb6..7c606862b 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -299,11 +299,8 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { async.forEach( toActors, (actorId, nextActor) => { - // :TODO: verify this - if *any* audience/actor is public, then this message is public I believe. if (Collection.PublicCollectionId === actorId) { - // Deliver to inbox for "everyone": - // - Add to 'sharedInbox' collection - // + // :TODO: we should probably land this in a public areaTag as well for AP; allowing Message objects to be used/etc. Collection.addPublicInboxItem(note, err => { return nextActor(err); }); @@ -312,29 +309,23 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { req, resp, actorId, + activity, note, nextActor ); } }, err => { - if (err) { - // if we get a dupe, just tell the remote everything is A-OK - if ('SQLITE_CONSTRAINT' === err.code) { - resp.writeHead(202); - return resp.end(''); - } - + if (err && 'SQLITE_CONSTRAINT' !== err.code) { return this.webServer.internalServerError(resp, err); } - resp.writeHead(202); - return resp.end(''); + return this.webServer.accepted(resp); } ); } - _deliverInboxNoteToLocalActor(req, resp, actorId, note, cb) { + _deliverInboxNoteToLocalActor(req, resp, actorId, activity, note, cb) { const localUserName = accountFromSelfUrl(actorId); if (!localUserName) { this.log.debug({ url: req.url }, 'Could not get username from URL'); @@ -360,6 +351,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { // const messageOpts = { // Notes can have 1:N 'to' relationships while a Message is 1:1; + activityId: activity.id, toUser: localUser, areaTag: Message.WellKnownAreaTags.Private, }; @@ -564,8 +556,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { 'Undo "Follow" (un-follow) success' ); - resp.writeHead(202); - return resp.end(''); + return this.webServer.accepted(resp); } ); }); diff --git a/package.json b/package.json index 9eae0e511..490c9397a 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "graceful-fs": "^4.2.10", "hashids": "^2.2.10", "hjson": "3.2.2", + "html-entities": "^2.3.3", "http-signature": "^1.3.6", "iconv-lite": "0.6.3", "ini-config-parser": "^1.0.4", diff --git a/yarn.lock b/yarn.lock index 14f559c97..53cf5057b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1230,6 +1230,11 @@ hjson@3.2.2: resolved "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" integrity sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q== +html-entities@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" + integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== + http-cache-semantics@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" From d624871a832856765847959c6630c9f66e50f308 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 26 Jan 2023 15:42:11 -0700 Subject: [PATCH 086/233] Split message consts to their own file, fix some HTTP responses, better subjects from ActivityPub messages, fix AP reply indicators, ... --- core/activitypub/note.js | 16 ++- core/mail_util.js | 48 +++---- core/message.js | 117 +++--------------- core/message_const.js | 93 ++++++++++++++ .../content/web_handlers/activitypub.js | 4 +- 5 files changed, 150 insertions(+), 128 deletions(-) create mode 100644 core/message_const.js diff --git a/core/activitypub/note.js b/core/activitypub/note.js index 9c82b3afd..61acc5ef8 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -171,10 +171,18 @@ module.exports = class Note extends ActivityPubObject { // :TODO: it would be better to do some basic HTML to ANSI or pipe codes perhaps message.message = htmlToMessageBody(this.content); - message.subject = - this.summary || - truncate(message.message, { length: 32, omission: '...' }) || - APDefaultSummary; + + // If the summary is not present, build one using the message itself; + // finally, default to a static subject so there is *something* if + // all else fails. + if (this.summary) { + message.subject = this.summary; + } else { + let subject = message.message.replace(`@${message.toUserName} `, ''); + subject = truncate(subject, { length: 32, omission: '...' }); + subject = subject || APDefaultSummary; + message.subject = subject; + } try { message.modTimestamp = moment(this.published); diff --git a/core/mail_util.js b/core/mail_util.js index 8205c449c..3ab6bb9f6 100644 --- a/core/mail_util.js +++ b/core/mail_util.js @@ -3,12 +3,13 @@ const EnigmaAssert = require('./enigma_assert.js'); const Address = require('./ftn_address.js'); -const { AddressFlavor } = require('./message.js'); -const Message = require('./message.js'); +const MessageConst = require('./message_const'); +const { getQuotePrefix } = require('./ftn_util'); exports.getAddressedToInfo = getAddressedToInfo; exports.setExternalAddressedToInfo = setExternalAddressedToInfo; exports.copyExternalAddressedToInfo = copyExternalAddressedToInfo; +exports.getQuotePrefixFromName = getQuotePrefixFromName; const EMAIL_REGEX = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[?[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}]?)|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; @@ -35,29 +36,29 @@ function getAddressedToInfo(input) { if (firstAtPos < 0) { let addr = Address.fromString(input); if (Address.isValidAddress(addr)) { - return { flavor: AddressFlavor.FTN, remote: input }; + return { flavor: MessageConst.AddressFlavor.FTN, remote: input }; } const lessThanPos = input.indexOf('<'); if (lessThanPos < 0) { - return { name: input, flavor: AddressFlavor.Local }; + return { name: input, flavor: MessageConst.AddressFlavor.Local }; } const greaterThanPos = input.indexOf('>'); if (greaterThanPos < lessThanPos) { - return { name: input, flavor: AddressFlavor.Local }; + return { name: input, flavor: MessageConst.AddressFlavor.Local }; } addr = Address.fromString(input.slice(lessThanPos + 1, greaterThanPos)); if (Address.isValidAddress(addr)) { return { name: input.slice(0, lessThanPos).trim(), - flavor: AddressFlavor.FTN, + flavor: MessageConst.AddressFlavor.FTN, remote: addr.toString(), }; } - return { name: input, flavor: AddressFlavor.Local }; + return { name: input, flavor: MessageConst.AddressFlavor.Local }; } if (firstAtPos === 0) { @@ -67,7 +68,7 @@ function getAddressedToInfo(input) { if (m) { return { name: input.slice(1, secondAtPos), - flavor: AddressFlavor.ActivityPub, + flavor: MessageConst.AddressFlavor.ActivityPub, remote: input.slice(firstAtPos), }; } @@ -82,38 +83,38 @@ function getAddressedToInfo(input) { if (m) { return { name: input.slice(0, lessThanPos).trim(), - flavor: AddressFlavor.Email, + flavor: MessageConst.AddressFlavor.Email, remote: addr, }; } - return { name: input, flavor: AddressFlavor.Local }; + return { name: input, flavor: MessageConst.AddressFlavor.Local }; } let m = input.match(EMAIL_REGEX); if (m) { return { name: input.slice(0, firstAtPos), - flavor: AddressFlavor.Email, + flavor: MessageConst.AddressFlavor.Email, remote: input, }; } let addr = Address.fromString(input); // 5D? if (Address.isValidAddress(addr)) { - return { flavor: AddressFlavor.FTN, remote: addr.toString() }; + return { flavor: MessageConst.AddressFlavor.FTN, remote: addr.toString() }; } addr = Address.fromString(input.slice(firstAtPos + 1).trim()); if (Address.isValidAddress(addr)) { return { name: input.slice(0, firstAtPos).trim(), - flavor: AddressFlavor.FTN, + flavor: MessageConst.AddressFlavor.FTN, remote: addr.toString(), }; } - return { name: input, flavor: AddressFlavor.Local }; + return { name: input, flavor: MessageConst.AddressFlavor.Local }; } /// returns true if it's an external address @@ -123,11 +124,11 @@ function setExternalAddressedToInfo(addressInfo, message) { }; switch (addressInfo.flavor) { - case AddressFlavor.FTN: - case AddressFlavor.Email: - case AddressFlavor.QWK: - case AddressFlavor.NNTP: - case AddressFlavor.ActivityPub: + case MessageConst.AddressFlavor.FTN: + case MessageConst.AddressFlavor.Email: + case MessageConst.AddressFlavor.QWK: + case MessageConst.AddressFlavor.NNTP: + case MessageConst.AddressFlavor.ActivityPub: EnigmaAssert(isValidAddressInfo()); message.setRemoteToUser(addressInfo.remote); @@ -136,13 +137,18 @@ function setExternalAddressedToInfo(addressInfo, message) { return true; default: - case AddressFlavor.Local: + case MessageConst.AddressFlavor.Local: return false; } } function copyExternalAddressedToInfo(fromMessage, toMessage) { - const sm = Message.SystemMetaNames; + const sm = MessageConst.SystemMetaNames; toMessage.setRemoteToUser(fromMessage.meta.System[sm.RemoteFromUser]); toMessage.setExternalFlavor(fromMessage.meta.System[sm.ExternalFlavor]); } + +function getQuotePrefixFromName(name) { + const addrInfo = getAddressedToInfo(name); + return getQuotePrefix(addrInfo.name || name); +} diff --git a/core/message.js b/core/message.js index bb2b67663..31b5621be 100644 --- a/core/message.js +++ b/core/message.js @@ -3,14 +3,14 @@ const msgDb = require('./database.js').dbs.message; const wordWrapText = require('./word_wrap.js').wordWrapText; -const ftnUtil = require('./ftn_util.js'); const createNamedUUID = require('./uuid_util.js').createNamedUUID; const Errors = require('./enig_error.js').Errors; const ANSI = require('./ansi_term.js'); const { sanitizeString, getISOTimestampString } = require('./database.js'); - const { isCP437Encodable } = require('./cp437util'); const { containsNonLatinCodepoints } = require('./string_util'); +const MessageConst = require('./message_const'); +const { getQuotePrefixFromName } = require('./mail_util'); const { isAnsi, @@ -33,93 +33,6 @@ const ENIGMA_MESSAGE_UUID_NAMESPACE = uuidParse.parse( '154506df-1df8-46b9-98f8-ebb5815baaf8' ); -const WELL_KNOWN_AREA_TAGS = { - Invalid: '', - Private: 'private_mail', - Bulletin: 'local_bulletin', -}; - -const WellKnownMetaCategories = { - System: 'System', - FtnProperty: 'FtnProperty', - FtnKludge: 'FtnKludge', - QwkProperty: 'QwkProperty', - QwkKludge: 'QwkKludge', - ActivityPub: 'ActivityPub', -}; - -// Category: WellKnownMetaCategories.System ("System") -const SYSTEM_META_NAMES = { - LocalToUserID: 'local_to_user_id', - LocalFromUserID: 'local_from_user_id', - StateFlags0: 'state_flags0', // See Message.StateFlags0 - ExplicitEncoding: 'explicit_encoding', // Explicitly set encoding when exporting/etc. - ExternalFlavor: 'external_flavor', // "Flavor" of message - imported from or to be exported to. See Message.AddressFlavor - RemoteToUser: 'remote_to_user', // Opaque value depends on external system, e.g. FTN address - RemoteFromUser: 'remote_from_user', // Opaque value depends on external system, e.g. FTN address -}; - -// Types for Message.SystemMetaNames.ExternalFlavor meta -const ADDRESS_FLAVOR = { - Local: 'local', // local / non-remote addressing - FTN: 'ftn', // FTN style - Email: 'email', // From email - QWK: 'qwk', // QWK packet - NNTP: 'nntp', // NNTP article POST; often a email address - ActivityPub: 'activitypub', // ActivityPub, Mastodon, etc. -}; - -const STATE_FLAGS0 = { - None: 0x00000000, - Imported: 0x00000001, // imported from foreign system - Exported: 0x00000002, // exported to foreign system -}; - -// :TODO: these should really live elsewhere... -// Category: WellKnownMetaCategories.FtnProperty ("FtnProperty") -const FTN_PROPERTY_NAMES = { - // packet header oriented - FtnOrigNode: 'ftn_orig_node', - FtnDestNode: 'ftn_dest_node', - // :TODO: rename these to ftn_*_net vs network - ensure things won't break, may need mapping - FtnOrigNetwork: 'ftn_orig_network', - FtnDestNetwork: 'ftn_dest_network', - FtnAttrFlags: 'ftn_attr_flags', - FtnCost: 'ftn_cost', - FtnOrigZone: 'ftn_orig_zone', - FtnDestZone: 'ftn_dest_zone', - FtnOrigPoint: 'ftn_orig_point', - FtnDestPoint: 'ftn_dest_point', - - // message header oriented - FtnMsgOrigNode: 'ftn_msg_orig_node', - FtnMsgDestNode: 'ftn_msg_dest_node', - FtnMsgOrigNet: 'ftn_msg_orig_net', - FtnMsgDestNet: 'ftn_msg_dest_net', - - FtnAttribute: 'ftn_attribute', - - FtnTearLine: 'ftn_tear_line', // http://ftsc.org/docs/fts-0004.001 - FtnOrigin: 'ftn_origin', // http://ftsc.org/docs/fts-0004.001 - FtnArea: 'ftn_area', // http://ftsc.org/docs/fts-0004.001 - FtnSeenBy: 'ftn_seen_by', // http://ftsc.org/docs/fts-0004.001 -}; - -// Category: WellKnownMetaCategories.QwkProperty -const QWKPropertyNames = { - MessageNumber: 'qwk_msg_num', - MessageStatus: 'qwk_msg_status', // See http://wiki.synchro.net/ref:qwk for a decent list - ConferenceNumber: 'qwk_conf_num', - InReplyToNum: 'qwk_in_reply_to_num', // note that we prefer the 'InReplyToMsgId' kludge if available -}; - -// Category: WellKnownMetaCategories.ActivityPub -const ActivityPubPropertyNames = { - ActivityId: 'activitypub_activity_id', // Activity ID; FK to AP table entries - InReplyTo: 'activitypub_in_reply_to', // Activity ID from 'inReplyTo' field - NoteId: 'activitypub_note_id', // Note ID specific to Note Activities -}; - // :TODO: this is a ugly hack due to bad variable names - clean it up & just _.camelCase(k)! const MESSAGE_ROW_MAP = { reply_to_message_id: 'replyToMsgId', @@ -247,35 +160,35 @@ module.exports = class Message { } static get WellKnownMetaCategories() { - return WellKnownMetaCategories; + return MessageConst.WellKnownMetaCategories; } static get WellKnownAreaTags() { - return WELL_KNOWN_AREA_TAGS; + return MessageConst.WellKnownAreaTags; } static get SystemMetaNames() { - return SYSTEM_META_NAMES; + return MessageConst.SystemMetaNames; } static get AddressFlavor() { - return ADDRESS_FLAVOR; + return MessageConst.AddressFlavor; } static get StateFlags0() { - return STATE_FLAGS0; + return MessageConst.StateFlags0; } static get FtnPropertyNames() { - return FTN_PROPERTY_NAMES; + return MessageConst.FtnPropertyNames; } static get QWKPropertyNames() { - return QWKPropertyNames; + return MessageConst.QWKPropertyNames; } static get ActivityPubPropertyNames() { - return ActivityPubPropertyNames; + return MessageConst.ActivityPubPropertyNames; } setLocalToUserId(userId) { @@ -943,11 +856,13 @@ module.exports = class Message { ); } - // :TODO: FTN stuff doesn't have any business here - getFTNQuotePrefix(source) { + _getQuotePrefix(source) { source = source || 'fromUserName'; - return ftnUtil.getQuotePrefix(this[source]); + // grab out the name member, so we don't try to build + // quote prefixes such as "@N" for "@NuSkooler@some.host", etc. + const userName = this[source]; + return getQuotePrefixFromName(userName); } static getTearLinePosition(input) { @@ -982,7 +897,7 @@ module.exports = class Message { */ const quotePrefix = options.includePrefix - ? this.getFTNQuotePrefix(options.prefixSource || 'fromUserName') + ? this._getQuotePrefix(options.prefixSource || 'fromUserName') : ''; function getWrapped(text, extraPrefix) { diff --git a/core/message_const.js b/core/message_const.js new file mode 100644 index 000000000..78d83d191 --- /dev/null +++ b/core/message_const.js @@ -0,0 +1,93 @@ +const WellKnownAreaTags = { + Invalid: '', + Private: 'private_mail', + Bulletin: 'local_bulletin', +}; +exports.WellKnownAreaTags = WellKnownAreaTags; + +const WellKnownMetaCategories = { + System: 'System', + FtnProperty: 'FtnProperty', + FtnKludge: 'FtnKludge', + QwkProperty: 'QwkProperty', + QwkKludge: 'QwkKludge', + ActivityPub: 'ActivityPub', +}; +exports.WellKnownMetaCategories = WellKnownMetaCategories; + +// Category: WellKnownMetaCategories.System ("System") +const SystemMetaNames = { + LocalToUserID: 'local_to_user_id', + LocalFromUserID: 'local_from_user_id', + StateFlags0: 'state_flags0', // See Message.StateFlags0 + ExplicitEncoding: 'explicit_encoding', // Explicitly set encoding when exporting/etc. + ExternalFlavor: 'external_flavor', // "Flavor" of message - imported from or to be exported to. See Message.AddressFlavor + RemoteToUser: 'remote_to_user', // Opaque value depends on external system, e.g. FTN address + RemoteFromUser: 'remote_from_user', // Opaque value depends on external system, e.g. FTN address +}; +exports.SystemMetaNames = SystemMetaNames; + +// Types for Message.SystemMetaNames.ExternalFlavor meta +const AddressFlavor = { + Local: 'local', // local / non-remote addressing + FTN: 'ftn', // FTN style + Email: 'email', // From email + QWK: 'qwk', // QWK packet + NNTP: 'nntp', // NNTP article POST; often a email address + ActivityPub: 'activitypub', // ActivityPub, Mastodon, etc. +}; +exports.AddressFlavor = AddressFlavor; + +const StateFlags0 = { + None: 0x00000000, + Imported: 0x00000001, // imported from foreign system + Exported: 0x00000002, // exported to foreign system +}; +exports.StateFlags0 = StateFlags0; + +// Category: WellKnownMetaCategories.FtnProperty ("FtnProperty") +const FtnPropertyNames = { + // packet header oriented + FtnOrigNode: 'ftn_orig_node', + FtnDestNode: 'ftn_dest_node', + // :TODO: rename these to ftn_*_net vs network - ensure things won't break, may need mapping + FtnOrigNetwork: 'ftn_orig_network', + FtnDestNetwork: 'ftn_dest_network', + FtnAttrFlags: 'ftn_attr_flags', + FtnCost: 'ftn_cost', + FtnOrigZone: 'ftn_orig_zone', + FtnDestZone: 'ftn_dest_zone', + FtnOrigPoint: 'ftn_orig_point', + FtnDestPoint: 'ftn_dest_point', + + // message header oriented + FtnMsgOrigNode: 'ftn_msg_orig_node', + FtnMsgDestNode: 'ftn_msg_dest_node', + FtnMsgOrigNet: 'ftn_msg_orig_net', + FtnMsgDestNet: 'ftn_msg_dest_net', + + FtnAttribute: 'ftn_attribute', + + FtnTearLine: 'ftn_tear_line', // http://ftsc.org/docs/fts-0004.001 + FtnOrigin: 'ftn_origin', // http://ftsc.org/docs/fts-0004.001 + FtnArea: 'ftn_area', // http://ftsc.org/docs/fts-0004.001 + FtnSeenBy: 'ftn_seen_by', // http://ftsc.org/docs/fts-0004.001 +}; +exports.FtnPropertyNames = FtnPropertyNames; + +// Category: WellKnownMetaCategories.QwkProperty +const QWKPropertyNames = { + MessageNumber: 'qwk_msg_num', + MessageStatus: 'qwk_msg_status', // See http://wiki.synchro.net/ref:qwk for a decent list + ConferenceNumber: 'qwk_conf_num', + InReplyToNum: 'qwk_in_reply_to_num', // note that we prefer the 'InReplyToMsgId' kludge if available +}; +exports.QWKPropertyNames = QWKPropertyNames; + +// Category: WellKnownMetaCategories.ActivityPub +const ActivityPubPropertyNames = { + ActivityId: 'activitypub_activity_id', // Activity ID; FK to AP table entries + InReplyTo: 'activitypub_in_reply_to', // Activity ID from 'inReplyTo' field + NoteId: 'activitypub_note_id', // Note ID specific to Note Activities +}; +exports.ActivityPubPropertyNames = ActivityPubPropertyNames; diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 7c606862b..8dfc3f924 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -258,7 +258,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { { type: activity.type }, 'Invalid or unknown Activity type' ); - return this.resourceNotFound(resp); + return this.webServer.resourceNotFound(resp); } }); } @@ -279,7 +279,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { { type: createWhat }, 'Invalid or unsupported "Create" type' ); - return this.resourceNotFound(resp); + return this.webServer.resourceNotFound(resp); } } From 8dd28e3091e860c70b0a3ac29622fee4626cf616 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Thu, 26 Jan 2023 19:18:25 -0600 Subject: [PATCH 087/233] Fixed not-found and similar errors case --- core/activitypub/actor.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 3d298ea24..94a669300 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -151,9 +151,13 @@ module.exports = class Actor extends ActivityPubObject { // cache miss: attempt to fetch & populate Actor._fromWebFinger(id, (err, actor, subject) => { + if (err) { + return cb(err); + } + if (subject) { subject = `@${userNameFromSubject(subject)}`; // e.g. @Username@host.com - } else { + } else if (!_.isEmpty(actor)) { subject = actor.id; // best we can do for now } From 4f6891a668da4b82c960c77020ac6c7c9610bbca Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Fri, 27 Jan 2023 16:27:33 -0600 Subject: [PATCH 088/233] Fix possible BBS crash on undefined text --- core/text_view.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/text_view.js b/core/text_view.js index 74b622ba1..770a279fc 100644 --- a/core/text_view.js +++ b/core/text_view.js @@ -151,6 +151,11 @@ TextView.prototype.getData = function () { TextView.prototype.setText = function (text, redraw) { redraw = _.isBoolean(redraw) ? redraw : true; + // Don't bomb if text isn't defined, just treat as blank instead. + if (_.isUndefined(text)) { + text = ''; + } + if (!_.isString(text)) { // allow |text| to be numbers/etc. text = text.toString(); From 9b01124b2e528cccb749127aecf0355fd48a4ee5 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 28 Jan 2023 11:55:31 -0700 Subject: [PATCH 089/233] Re-work of ActivityPub DBs and various account lookups * Always look up Actors by explicit Actor IDs * Re-work DB: style, properties we track, etc. * Create AP properties via a event! * Lots of cleanup * WF may be partially broken if loooking up by 'profile' alias URL: WIP --- core/activitypub/activity.js | 26 +- core/activitypub/actor.js | 18 +- core/activitypub/collection.js | 223 ++++++++--- core/activitypub/note.js | 31 +- core/activitypub/settings.js | 6 +- core/activitypub/util.js | 31 +- core/config_default.js | 8 + core/database.js | 27 +- core/scanner_tossers/activitypub.js | 1 + core/servers/content/web.js | 35 +- .../content/web_handlers/activitypub.js | 358 ++++++++++-------- .../content/web_handlers/system_general.js | 2 +- .../servers/content/web_handlers/webfinger.js | 101 +++-- core/system_events.js | 4 +- core/user.js | 67 +--- core/user_property.js | 3 +- core/wfc.js | 1 - 17 files changed, 590 insertions(+), 352 deletions(-) diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index a5af0416f..c66c3e444 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -1,4 +1,4 @@ -const { selfUrl } = require('./util'); +const { localActorId } = require('./util'); const { WellKnownActivityTypes } = require('./const'); const ActivityPubObject = require('./object'); const { Errors } = require('../enig_error'); @@ -18,6 +18,11 @@ module.exports = class Activity extends ActivityPubObject { return WellKnownActivityTypes; } + static fromJsonString(s) { + const obj = ActivityPubObject.fromJsonString(s); + return new Activity(obj); + } + static makeFollow(webServer, localActor, remoteActor) { return new Activity({ id: Activity.activityObjectId(webServer), @@ -74,7 +79,7 @@ module.exports = class Activity extends ActivityPubObject { sign: { // :TODO: Make a helper for this key: privateKey, - keyId: selfUrl(webServer, fromUser) + '#main-key', + keyId: localActorId(webServer, fromUser) + '#main-key', authorizationHeaderName: 'Signature', headers: ['(request-target)', 'host', 'date', 'digest', 'content-type'], }, @@ -84,6 +89,23 @@ module.exports = class Activity extends ActivityPubObject { return postJson(actorUrl, activityJson, reqOpts, cb); } + recipientIds() { + const ids = []; + + // :TODO: bto, bcc? + ['to', 'cc', 'audience'].forEach(field => { + let v = this[field]; + if (v) { + if (!Array.isArray(v)) { + v = [v]; + } + ids.push(...v); + } + }); + + return ids; + } + static activityObjectId(webServer) { return ActivityPubObject.makeObjectId(webServer, 'activity'); } diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 94a669300..83fa9a7c9 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -8,7 +8,6 @@ const { ActivityStreamsContext, webFingerProfileUrl, makeUserUrl, - selfUrl, isValidLink, makeSharedInboxUrl, userNameFromSubject, @@ -68,7 +67,15 @@ module.exports = class Actor extends ActivityPubObject { } static fromLocalUser(user, webServer, cb) { - const userSelfUrl = selfUrl(webServer, user); + const userActorId = user.getProperty(UserProps.ActivityPubActorId); + if (!userActorId) { + return cb( + Errors.MissingProperty( + `User missing '${UserProps.ActivityPubActorId}' property` + ) + ); + } + const userSettings = ActivityPubSettings.fromUser(user); const addImage = (o, t) => { @@ -90,7 +97,7 @@ module.exports = class Actor extends ActivityPubObject { ActivityStreamsContext, 'https://w3id.org/security/v1', // :TODO: add support ], - id: userSelfUrl, + id: userActorId, type: 'Person', preferredUsername: user.username, name: userSettings.showRealName @@ -123,8 +130,8 @@ module.exports = class Actor extends ActivityPubObject { const publicKeyPem = user.getProperty(UserProps.PublicActivityPubSigningKey); if (!_.isEmpty(publicKeyPem)) { obj.publicKey = { - id: userSelfUrl + '#main-key', - owner: userSelfUrl, + id: userActorId + '#main-key', + owner: userActorId, publicKeyPem, }; @@ -219,6 +226,7 @@ module.exports = class Actor extends ActivityPubObject { const timestamp = moment(row.timestamp); if (moment().isAfter(timestamp.add(ActorCacheTTL))) { + // :TODO: drop from cache return cb(Errors.Expired('The cache entry is expired')); } diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index 43da25356..fb5488a65 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -4,11 +4,10 @@ const apDb = require('../database').dbs.activitypub; const { getISOTimestampString } = require('../database'); const { Errors } = require('../enig_error.js'); const { PublicCollectionId: APPublicCollectionId } = require('./const'); +const UserProps = require('../user_property'); // deps -const { isString, get, isObject } = require('lodash'); - -const APPublicOwningUserId = 0; +const { isString } = require('lodash'); module.exports = class Collection extends ActivityPubObject { constructor(obj) { @@ -19,34 +18,33 @@ module.exports = class Collection extends ActivityPubObject { return APPublicCollectionId; } - static followers(owningUser, page, webServer, cb) { - return Collection.getOrdered( + static followers(collectionId, page, cb) { + return Collection.publicOrderedById( 'followers', - owningUser, - false, + collectionId, page, e => e.id, - webServer, cb ); } - static following(owningUser, page, webServer, cb) { - return Collection.getOrdered( + static following(collectionId, page, cb) { + return Collection.publicOrderedById( 'following', - owningUser, - false, + collectionId, page, - e => get(e, 'object.id'), - webServer, + e => e.id, cb ); } - static addFollower(owningUser, followingActor, cb) { + static addFollower(owningUser, followingActor, webServer, cb) { + const collectionId = + makeUserUrl(webServer, owningUser, '/ap/collections/') + '/followers'; return Collection.addToCollection( 'followers', owningUser, + collectionId, followingActor.id, followingActor, false, @@ -54,10 +52,13 @@ module.exports = class Collection extends ActivityPubObject { ); } - static addFollowRequest(owningUser, requestingActor, cb) { + static addFollowRequest(owningUser, requestingActor, webServer, cb) { + const collectionId = + makeUserUrl(webServer, owningUser, '/ap/collections/') + '/follow-requests'; return Collection.addToCollection( - 'follow_requests', + 'follow-requests', owningUser, + collectionId, requestingActor.id, requestingActor, true, @@ -65,22 +66,17 @@ module.exports = class Collection extends ActivityPubObject { ); } - static outbox(owningUser, page, webServer, cb) { - return Collection.getOrdered( - 'outbox', - owningUser, - false, - page, - null, - webServer, - cb - ); + static outbox(collectionId, page, cb) { + return Collection.publicOrderedById('outbox', collectionId, page, null, cb); } - static addOutboxItem(owningUser, outboxItem, isPrivate, cb) { + static addOutboxItem(owningUser, outboxItem, isPrivate, webServer, cb) { + const collectionId = + makeUserUrl(webServer, owningUser, '/ap/collections/') + '/outbox'; return Collection.addToCollection( 'outbox', owningUser, + collectionId, outboxItem.id, outboxItem, isPrivate, @@ -88,10 +84,13 @@ module.exports = class Collection extends ActivityPubObject { ); } - static addInboxItem(inboxItem, owningUser, cb) { + static addInboxItem(inboxItem, owningUser, webServer, cb) { + const collectionId = + makeUserUrl(webServer, owningUser, '/ap/collections/') + '/inbox'; return Collection.addToCollection( 'inbox', owningUser, + collectionId, inboxItem.id, inboxItem, true, @@ -102,7 +101,8 @@ module.exports = class Collection extends ActivityPubObject { static addPublicInboxItem(inboxItem, cb) { return Collection.addToCollection( 'publicInbox', - APPublicOwningUserId, + null, // N/A + Collection.PublicCollectionId, inboxItem.id, inboxItem, false, @@ -114,11 +114,11 @@ module.exports = class Collection extends ActivityPubObject { const privateQuery = includePrivate ? '' : ' AND is_private = FALSE'; apDb.get( - `SELECT obj_json + `SELECT object_json FROM collection WHERE name = ? ${privateQuery} - AND json_extract(obj_json, '$.object.id') = ?;`, + AND json_extract(object_json, '$.object.id') = ?;`, [collectionName, objectId], (err, row) => { if (err) { @@ -133,7 +133,7 @@ module.exports = class Collection extends ActivityPubObject { ); } - const obj = ActivityPubObject.fromJsonString(row.obj_json); + const obj = ActivityPubObject.fromJsonString(row.object_json); if (!obj) { return cb(Errors.Invalid('Failed to parse Object JSON')); } @@ -143,7 +143,71 @@ module.exports = class Collection extends ActivityPubObject { ); } - static getOrdered( + static publicOrderedById(collectionName, collectionId, page, mapper, cb) { + if (!page) { + return apDb.get( + `SELECT COUNT(collection_id) AS count + FROM collection + WHERE name = ? AND collection_id = ? AND is_private = FALSE;`, + [collectionName, collectionId], + (err, row) => { + if (err) { + return cb(err); + } + + let obj; + if (row.count > 0) { + obj = { + id: collectionId, + type: 'OrderedCollection', + first: `${collectionId}?page=1`, + totalItems: row.count, + }; + } else { + obj = { + id: collectionId, + type: 'OrderedCollection', + totalItems: 0, + orderedItems: [], + }; + } + + return cb(null, new Collection(obj)); + } + ); + } + + // :TODO: actual paging... + apDb.all( + `SELECT object_json + FROM collection + WHERE name = ? AND collection_id = ? AND is_private = FALSE + ORDER BY timestamp;`, + [collectionName, collectionId], + (err, entries) => { + if (err) { + return cb(err); + } + + entries = entries || []; + if (mapper && entries.length > 0) { + entries = entries.map(mapper); + } + + const obj = { + id: `${collectionId}/page=${page}`, + type: 'OrderedCollectionPage', + totalItems: entries.length, + orderedItems: entries, + partOf: collectionId, + }; + + return cb(null, new Collection(obj)); + } + ); + } + + static ownedOrderedByUser( collectionName, owningUser, includePrivate, @@ -153,19 +217,25 @@ module.exports = class Collection extends ActivityPubObject { cb ) { const privateQuery = includePrivate ? '' : ' AND is_private = FALSE'; - const owningUserId = isObject(owningUser) ? owningUser.userId : owningUser; + const actorId = owningUser.getProperty(UserProps.ActivityPubActorId); + if (!actorId) { + return cb( + Errors.MissingProperty( + `User "${owningUser.username}" is missing property '${UserProps.ActivityPubActorId}'` + ) + ); + } - // e.g. http://some.host/_enig/ap/collections/1234/followers - const collectionIdBase = - makeUserUrl(webServer, owningUser, `/ap/collections/${owningUserId}`) + - `/${collectionName}`; + // e.g. http://somewhere.com/_enig/ap/collections/NuSkooler/followers + const collectionId = + makeUserUrl(webServer, owningUser, '/ap/collections/') + `/${collectionName}`; if (!page) { return apDb.get( - `SELECT COUNT(id) AS count + `SELECT COUNT(collection_id) AS count FROM collection - WHERE user_id = ? AND name = ?${privateQuery};`, - [owningUserId, collectionName], + WHERE owner_actor_id = ? AND name = ?${privateQuery};`, + [actorId, collectionName], (err, row) => { if (err) { return cb(err); @@ -180,14 +250,14 @@ module.exports = class Collection extends ActivityPubObject { let obj; if (row.count > 0) { obj = { - id: collectionIdBase, + id: collectionId, type: 'OrderedCollection', - first: `${collectionIdBase}?page=1`, + first: `${collectionId}?page=1`, totalItems: row.count, }; } else { obj = { - id: collectionIdBase, + id: collectionId, type: 'OrderedCollection', totalItems: 0, orderedItems: [], @@ -201,11 +271,11 @@ module.exports = class Collection extends ActivityPubObject { // :TODO: actual paging... apDb.all( - `SELECT obj_json + `SELECT object_json FROM collection - WHERE user_id = ? AND name = ?${privateQuery} + WHERE owner_actor_id = ? AND name = ?${privateQuery} ORDER BY timestamp;`, - [owningUserId, collectionName], + [actorId, collectionName], (err, entries) => { if (err) { return cb(err); @@ -217,11 +287,11 @@ module.exports = class Collection extends ActivityPubObject { } const obj = { - id: `${collectionIdBase}/page=${page}`, + id: `${collectionId}/page=${page}`, type: 'OrderedCollectionPage', totalItems: entries.length, orderedItems: entries, - partOf: collectionIdBase, + partOf: collectionId, }; return cb(null, new Collection(obj)); @@ -239,8 +309,8 @@ module.exports = class Collection extends ActivityPubObject { apDb.run( `UPDATE collection - SET obj_json = ?, timestamp = ? - WHERE name = ? AND obj_id = ?;`, + SET object_json = ?, timestamp = ? + WHERE name = ? AND object_id = ?;`, [obj, collectionName, getISOTimestampString(), objectId], err => { return cb(err); @@ -248,20 +318,43 @@ module.exports = class Collection extends ActivityPubObject { ); } - static addToCollection(collectionName, owningUser, objectId, obj, isPrivate, cb) { + static addToCollection( + collectionName, + owningUser, + collectionId, + objectId, + obj, + isPrivate, + cb + ) { if (!isString(obj)) { obj = JSON.stringify(obj); } - const owningUserId = isObject(owningUser) ? owningUser.userId : owningUser; + let actorId; + if (owningUser) { + actorId = owningUser.getProperty(UserProps.ActivityPubActorId); + if (!actorId) { + return cb( + Errors.MissingProperty( + `User "${owningUser.username}" is missing property '${UserProps.ActivityPubActorId}'` + ) + ); + } + } else { + actorId = Collection.APPublicCollectionId; + } + isPrivate = isPrivate ? 1 : 0; + apDb.run( - `INSERT OR IGNORE INTO collection (name, timestamp, user_id, obj_id, obj_json, is_private) - VALUES (?, ?, ?, ?, ?, ?);`, + `INSERT OR IGNORE INTO collection (name, timestamp, collection_id, owner_actor_id, object_id, object_json, is_private) + VALUES (?, ?, ?, ?, ?, ?, ?);`, [ collectionName, getISOTimestampString(), - owningUserId, + collectionId, + actorId, objectId, obj, isPrivate, @@ -269,6 +362,9 @@ module.exports = class Collection extends ActivityPubObject { function res(err) { // non-arrow for 'this' scope if (err) { + if ('SQLITE_CONSTRAINT' === err.code) { + err = null; // ignore + } return cb(err); } return cb(err, this.lastID); @@ -277,11 +373,18 @@ module.exports = class Collection extends ActivityPubObject { } static removeFromCollectionById(collectionName, owningUser, objectId, cb) { - const owningUserId = isObject(owningUser) ? owningUser.userId : owningUser; + const actorId = owningUser.getProperty(UserProps.ActivityPubActorId); + if (!actorId) { + return cb( + Errors.MissingProperty( + `User "${owningUser.username}" is missing property '${UserProps.ActivityPubActorId}'` + ) + ); + } apDb.run( `DELETE FROM collection - WHERE user_id = ? AND name = ? AND obj_id = ?;`, - [owningUserId, collectionName, objectId], + WHERE name = ? AND owner_actor_id = ? AND object_id = ?;`, + [collectionName, actorId, objectId], err => { return cb(err); } diff --git a/core/activitypub/note.js b/core/activitypub/note.js index 61acc5ef8..a2f658faa 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -5,6 +5,7 @@ const { getISOTimestampString } = require('../database'); const User = require('../user'); const { messageBodyToHtml, htmlToMessageBody } = require('./util'); const { isAnsi } = require('../string_util'); +const Log = require('../logger').log; // deps const { v5: UUIDv5 } = require('uuid'); @@ -187,7 +188,10 @@ module.exports = class Note extends ActivityPubObject { try { message.modTimestamp = moment(this.published); } catch (e) { - // :TODO: Log warning + Log.warn( + { published: this.published, error: e.message }, + 'Failed to parse Note published timestamp' + ); message.modTimestamp = moment(); } @@ -203,9 +207,30 @@ module.exports = class Note extends ActivityPubObject { if (this.inReplyTo) { message.meta.ActivityPub[Message.ActivityPubPropertyNames.InReplyTo] = this.inReplyTo; - } - return cb(null, message); + const filter = { + resultType: 'id', + metaTuples: [ + { + category: Message.WellKnownMetaCategories.ActivityPub, + name: Message.ActivityPubPropertyNames.InReplyTo, + value: this.inReplyTo, + }, + ], + limit: 1, + }; + Message.findMessages(filter, (err, messageId) => { + if (messageId) { + // we get an array, but limited 1; use the first + messageId = messageId[0]; + message.replyToMsgId = messageId; + } + + return cb(null, message); + }); + } else { + return cb(null, message); + } }); } }; diff --git a/core/activitypub/settings.js b/core/activitypub/settings.js index 3b848a28e..3c7cdb952 100644 --- a/core/activitypub/settings.js +++ b/core/activitypub/settings.js @@ -1,14 +1,18 @@ const UserProps = require('../user_property'); +const Config = require('../config').get; module.exports = class ActivityPubSettings { constructor(obj) { - this.enabled = true; // :TODO: fetch from +op config default + this.enabled = true; this.manuallyApproveFollowers = false; this.hideSocialGraph = false; // followers, following this.showRealName = true; this.image = ''; this.icon = ''; + // override default with any op config + Object.assign(this, Config().users.activityPub); + if (obj) { Object.assign(this, obj); } diff --git a/core/activitypub/util.js b/core/activitypub/util.js index 502b08c71..e2738d489 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -20,9 +20,8 @@ exports.isValidLink = isValidLink; exports.makeSharedInboxUrl = makeSharedInboxUrl; exports.makeUserUrl = makeUserUrl; exports.webFingerProfileUrl = webFingerProfileUrl; -exports.selfUrl = selfUrl; -exports.userFromAccount = userFromAccount; -exports.accountFromSelfUrl = accountFromSelfUrl; +exports.localActorId = localActorId; +exports.userFromActorId = userFromActorId; exports.getUserProfileTemplatedBody = getUserProfileTemplatedBody; exports.messageBodyToHtml = messageBodyToHtml; exports.htmlToMessageBody = htmlToMessageBody; @@ -59,26 +58,26 @@ function webFingerProfileUrl(webServer, user) { return webServer.buildUrl(WellKnownLocations.Internal + `/wf/@${user.username}`); } -function selfUrl(webServer, user) { +function localActorId(webServer, user) { return makeUserUrl(webServer, user, '/ap/users/'); } -function accountFromSelfUrl(url) { - // https://some.l33t.enigma.board/_enig/ap/users/Masto -> Masto - // :TODO: take webServer, and just take path-to-users.length +1 - return url.substring(url.lastIndexOf('/') + 1); -} - -function userFromAccount(accountName, cb) { - if (accountName.startsWith('@')) { - accountName = accountName.slice(1); - } - - User.getUserIdAndName(accountName, (err, userId) => { +function userFromActorId(actorId, cb) { + User.getUserIdsWithProperty(UserProps.ActivityPubActorId, actorId, (err, userId) => { if (err) { return cb(err); } + // must only be 0 or 1 + if (!Array.isArray(userId) || userId.length !== 1) { + return cb( + Errors.DoesNotExist( + `No user with property '${UserProps.ActivityPubActorId}' of ${actorId}` + ) + ); + } + + userId = userId[0]; User.getUser(userId, (err, user) => { if (err) { return cb(err); diff --git a/core/config_default.js b/core/config_default.js index a5a644267..27c3945b8 100644 --- a/core/config_default.js +++ b/core/config_default.js @@ -136,6 +136,14 @@ module.exports = () => { storagePath: paths.join(__dirname, '../userdata/avatars/'), spritesPath: paths.join(__dirname, '../misc/avatar-sprites/'), }, + + // See also ./core/activitypub/settings.js + activityPub: { + enabled: true, // ActivityPub enabled for this user? + manuallyApproveFollowers: false, + hideSocialGraph: false, + showRealName: true, + }, }, theme: { diff --git a/core/database.js b/core/database.js index 1561e960b..a565d330a 100644 --- a/core/database.js +++ b/core/database.js @@ -505,7 +505,6 @@ dbs.message.run( // Actors we know about and have cached dbs.activitypub.run( `CREATE TABLE IF NOT EXISTS actor_cache ( - actor_cache_id INTEGER PRIMARY KEY, -- Local DB ID actor_id VARCHAR NOT NULL, -- Fully qualified Actor ID/URL actor_json VARCHAR NOT NULL, -- Actor document subject VARCHAR, -- Subject obtained from WebFinger, e.g. @Username@some.domain @@ -524,32 +523,36 @@ dbs.message.run( // generally obtained via WebFinger dbs.activitypub.run( `CREATE TABLE IF NOT EXISTS actor_alias_cache ( - id INTEGER PRIMARY KEY, - alias VARCHAR NOT NULL, actor_id VARCHAR NOT NULL, -- Fully qualified Actor ID/URL + actor_alias_id VARCHAR NOT NULL, -- Alias such the user's "profile URL" - UNIQUE(alias) + UNIQUE(actor_alias_id) );` ); // ActivityPub Collections of various types such as followers, following, likes, ... dbs.activitypub.run( `CREATE TABLE IF NOT EXISTS collection ( - id INTEGER PRIMARY KEY, -- Auto-generated key + collection_id VARCHAR NOT NULL, -- ie: http://somewhere.com/_enig/ap/collections/NuSkooler/followers name VARCHAR NOT NULL, -- examples: followers, follows, ... timestamp DATETIME NOT NULL, -- Timestamp in which this entry was created - user_id INTEGER NOT NULL, -- Local, owning user ID, 0 means "all" for sharedInbox - obj_id VARCHAR NOT NULL, -- Object ID from obj_json.id - obj_json VARCHAR NOT NULL, -- Object varies by collection (obj_json.type) - is_private INTEGER NOT NULL, -- Is this object private to |user_id|? + owner_actor_id VARCHAR NOT NULL, -- Local, owning Actor ID, or the #Public magic collection ID + object_id VARCHAR NOT NULL, -- Object ID from obj_json.id + object_json VARCHAR NOT NULL, -- Object varies by collection (obj_json.type) + is_private INTEGER NOT NULL, -- Is this object private to |owner_actor_id|? - UNIQUE(name, user_id, obj_id) + UNIQUE(name, collection_id, object_id) );` ); dbs.activitypub.run( - `CREATE INDEX IF NOT EXISTS collection_entry_by_user_index0 - ON collection (name, user_id);` + `CREATE INDEX IF NOT EXISTS collection_entry_by_name_actor_id_index0 + ON collection (name, owner_actor_id);` + ); + + dbs.activitypub.run( + `CREATE INDEX IF NOT EXISTS collection_entry_by_name_collection_id_index0 + ON collection (name, collection_id);` ); return cb(null); diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index e4f0cdaad..75a5166da 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -99,6 +99,7 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule fromUser, activity, message.isPrivate(), + this._webServer(), (err, localId) => { if (!err) { this.log.debug( diff --git a/core/servers/content/web.js b/core/servers/content/web.js index 3c85989f3..6f39bd11c 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -89,7 +89,7 @@ exports.getModule = class WebServerModule extends ServerModule { getDomain() { const config = Config(); - const overridePrefix = _.get(config.contentServers.web.overrideUrlPrefix); + const overridePrefix = _.get(config, 'contentServers.web.overrideUrlPrefix'); if (_.isString(overridePrefix)) { const url = new URL(overridePrefix); return url.hostname; @@ -98,17 +98,11 @@ exports.getModule = class WebServerModule extends ServerModule { return config.contentServers.web.domain; } - buildUrl(pathAndQuery) { - // - // Create a URL such as - // https://l33t.codes:44512/ + |pathAndQuery| - // - // Prefer HTTPS over HTTP. Be explicit about the port - // only if non-standard. Allow users to override full prefix in config. - // + baseUrl() { const config = Config(); - if (_.isString(config.contentServers.web.overrideUrlPrefix)) { - return `${config.contentServers.web.overrideUrlPrefix}${pathAndQuery}`; + const overridePrefix = _.get(config, 'contentServers.web.overrideUrlPrefix'); + if (overridePrefix) { + return overridePrefix; } let schema; @@ -127,7 +121,24 @@ exports.getModule = class WebServerModule extends ServerModule { : `:${config.contentServers.web.http.port}`; } - return `${schema}${config.contentServers.web.domain}${port}${pathAndQuery}`; + return `${schema}${config.contentServers.web.domain}${port}`; + } + + fullUrl(req) { + const base = this.baseUrl(); + return new URL(`${base}${req.url}`); + } + + buildUrl(pathAndQuery) { + // + // Create a URL such as + // https://l33t.codes:44512/ + |pathAndQuery| + // + // Prefer HTTPS over HTTP. Be explicit about the port + // only if non-standard. Allow users to override full prefix in config. + // + const base = this.baseUrl(); + return `${base}${pathAndQuery}`; } isEnabled() { diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 8dfc3f924..3b3238b3f 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -1,25 +1,28 @@ const WebHandlerModule = require('../../../web_handler_module'); const { - userFromAccount, + userFromActorId, getUserProfileTemplatedBody, DefaultProfileTemplate, - accountFromSelfUrl, + makeUserUrl, + localActorId, } = require('../../../activitypub/util'); const Config = require('../../../config').get; const Activity = require('../../../activitypub/activity'); const ActivityPubSettings = require('../../../activitypub/settings'); const Actor = require('../../../activitypub/actor'); const Collection = require('../../../activitypub/collection'); +const Note = require('../../../activitypub/note'); const EnigAssert = require('../../../enigma_assert'); const Message = require('../../../message'); +const Events = require('../../../events'); +const UserProps = require('../../../user_property'); // deps const _ = require('lodash'); const enigma_assert = require('../../../enigma_assert'); const httpSignature = require('http-signature'); const async = require('async'); -const Note = require('../../../activitypub/note'); -const User = require('../../../user'); +const paths = require('path'); exports.moduleInfo = { name: 'ActivityPub', @@ -41,6 +44,11 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { this.log = webServer.logger().child({ webHandler: 'ActivityPub' }); + Events.addListener(Events.getSystemEvents().NewUserPrePersist, eventInfo => { + const { user, callback } = eventInfo; + return this._prepareNewUserAsActor(user, callback); + }); + this.webServer.addRoute({ method: 'GET', path: /^\/_enig\/ap\/users\/[^/]+$/, @@ -131,40 +139,37 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { _selfUrlRequestHandler(req, resp) { this.log.trace({ url: req.url }, 'Request for "self"'); - const url = new URL(req.url, `https://${req.headers.host}`); - let accountName = url.pathname.substring(url.pathname.lastIndexOf('/') + 1); + let actorId = this.webServer.fullUrl(req).toString(); let sendActor = false; + if (actorId.endsWith('.json')) { + sendActor = true; + actorId = actorId.slice(0, -5); + } - // Like Mastodon, if .json is appended onto URL then return the JSON content - if (accountName.endsWith('.json')) { + // Additionally, serve activity JSON if the proper 'Accept' header was sent + const accept = req.headers['accept'].split(',').map(v => v.trim()) || ['*/*']; + const headerValues = [ + ActivityJsonMime, + 'application/ld+json', + 'application/json', + ]; + if (accept.some(v => headerValues.includes(v))) { sendActor = true; - accountName = accountName.slice(0, -5); } - userFromAccount(accountName, (err, user) => { + userFromActorId(actorId, (err, localUser) => { if (err) { this.log.info( - { reason: err.message, accountName: accountName }, - `No user "${accountName}" for "self"` + { error: err.message, actorId }, + `No user for Actor ID ${actorId}` ); return this.webServer.resourceNotFound(resp); } - // Additionally, serve activity JSON if the proper 'Accept' header was sent - const accept = req.headers['accept'].split(',').map(v => v.trim()) || ['*/*']; - const headerValues = [ - ActivityJsonMime, - 'application/ld+json', - 'application/json', - ]; - if (accept.some(v => headerValues.includes(v))) { - sendActor = true; - } - if (sendActor) { - return this._selfAsActorHandler(user, req, resp); + return this._selfAsActorHandler(localUser, req, resp); } else { - return this._standardSelfHandler(user, req, resp); + return this._standardSelfHandler(localUser, req, resp); } }); } @@ -197,8 +202,9 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { switch (activity.type) { case 'Follow': - return this._withUserRequestHandler( + return this._collectionRequestHandler( signature, + 'inbox', activity, this._inboxFollowRequestHandler.bind(this), req, @@ -209,9 +215,14 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this._inboxUpdateRequestHandler(activity, req, resp); case 'Undo': - return this._inboxUndoRequestHandler(activity, req, resp); - - // :TODO: Create, etc. + return this._collectionRequestHandler( + signature, + 'inbox', + activity, + this._inboxUndoRequestHandler.bind(this), + req, + resp + ); default: this.log.warn( @@ -264,15 +275,19 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _sharedInboxCreateActivity(req, resp, activity) { - let toActors = activity.to; - if (!Array.isArray(toActors)) { - toActors = [toActors]; - } + const deliverTo = activity.recipientIds(); + + //Create a method to gather all to, cc, bcc, etc. dests (see spec) -> single array + // loop through, and attempt to fetch user-by-actor id for each; if found, deliver + // --we may need to add properties for ActivityPubFollowersId, ActivityPubFollowingId, etc. + // to user props for quick lookup -> user + // special handling of bcc (remove others before delivery), etc. + // const toActorIds = activity.recipientActorIds() const createWhat = _.get(activity, 'object.type'); switch (createWhat) { case 'Note': - return this._deliverSharedInboxNote(req, resp, toActors, activity); + return this._deliverSharedInboxNote(req, resp, deliverTo, activity); default: this.log.warn( @@ -283,7 +298,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } } - _deliverSharedInboxNote(req, resp, toActors, activity) { + _deliverSharedInboxNote(req, resp, deliverTo, activity) { // When an object is being delivered to the originating actor's followers, // a server MAY reduce the number of receiving actors delivered to by // identifying all followers which share the same sharedInbox who would @@ -297,26 +312,32 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } async.forEach( - toActors, + deliverTo, (actorId, nextActor) => { - if (Collection.PublicCollectionId === actorId) { - // :TODO: we should probably land this in a public areaTag as well for AP; allowing Message objects to be used/etc. - Collection.addPublicInboxItem(note, err => { - return nextActor(err); - }); - } else { - this._deliverInboxNoteToLocalActor( - req, - resp, - actorId, - activity, - note, - nextActor - ); + switch (actorId) { + case Collection.PublicCollectionId: + // :TODO: we should probably land this in a public areaTag as well for AP; allowing Message objects to be used/etc. + Collection.addPublicInboxItem(note, err => { + return nextActor(err); + }); + break; + + default: + this._deliverInboxNoteToLocalActor( + req, + resp, + actorId, + activity, + note, + err => { + return nextActor(err); + } + ); + break; } }, err => { - if (err && 'SQLITE_CONSTRAINT' !== err.code) { + if (err) { return this.webServer.internalServerError(resp, err); } @@ -326,22 +347,12 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _deliverInboxNoteToLocalActor(req, resp, actorId, activity, note, cb) { - const localUserName = accountFromSelfUrl(actorId); - if (!localUserName) { - this.log.debug({ url: req.url }, 'Could not get username from URL'); - return cb(null); - } - - User.getUserByUsername(localUserName, (err, localUser) => { + userFromActorId(actorId, (err, localUser) => { if (err) { - this.log.info( - { username: localUserName }, - `No local user account for "${localUserName}"` - ); - return cb(null); + return cb(null); // not found/etc., just bail } - Collection.addInboxItem(note, localUser, err => { + Collection.addInboxItem(note, localUser, this.webServer, err => { if (err) { return cb(err); } @@ -362,6 +373,17 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } message.persist(err => { + if (!err) { + this.log.info( + { + user: localUser.username, + userId: localUser.userId, + activityId: activity.id, + noteId: note.id, + }, + 'Note delivered as message to private mailbox' + ); + } return cb(err); }); }); @@ -369,45 +391,30 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } - _getCollectionHandler(name, req, resp, signature) { + _getCollectionHandler(collectionName, req, resp, signature) { EnigAssert(signature, 'Missing signature!'); - const url = new URL(req.url, `https://${req.headers.host}`); - const accountName = this._accountNameFromUserPath(url, name); - if (!accountName) { - return this.webServer.resourceNotFound(resp); - } - - // can we even handle this request? - const getter = Collection[name]; - if (!getter) { + const getCollection = Collection[collectionName]; + if (!getCollection) { return this.webServer.resourceNotFound(resp); } - userFromAccount(accountName, (err, user) => { + const url = this.webServer.fullUrl(req); + const page = url.searchParams.get('page'); + const collectionId = url.toString(); + getCollection(collectionId, page, (err, collection) => { if (err) { - this.log.info( - { reason: err.message, accountName: accountName }, - `No user "${accountName}" for "${name}"` - ); - return this.webServer.resourceNotFound(resp); + return this.webServer.internalServerError(resp, err); } - const page = url.searchParams.get('page'); - getter(user, page, this.webServer, (err, collection) => { - if (err) { - return this.webServer.internalServerError(resp, err); - } - - const body = JSON.stringify(collection); - const headers = { - 'Content-Type': ActivityJsonMime, - 'Content-Length': body.length, - }; + const body = JSON.stringify(collection); + const headers = { + 'Content-Type': ActivityJsonMime, + 'Content-Length': body.length, + }; - resp.writeHead(200, headers); - return resp.end(body); - }); + resp.writeHead(200, headers); + return resp.end(body); }); } @@ -416,6 +423,11 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this._getCollectionHandler('following', req, resp, signature); } + _followersGetHandler(req, resp, signature) { + this.log.debug({ url: req.url }, 'Request for "followers"'); + return this._getCollectionHandler('followers', req, resp, signature); + } + // https://docs.gotosocial.org/en/latest/federation/behaviors/outbox/ _outboxGetHandler(req, resp, signature) { this.log.debug({ url: req.url }, 'Request for "outbox"'); @@ -425,9 +437,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { _singlePublicNoteGetHandler(req, resp) { this.log.debug({ url: req.url }, 'Request for "Note"'); - const url = new URL(req.url, `https://${req.headers.host}`); - const noteId = url.toString(); - + const noteId = this.webServer.fullUrl(req).toString(); Note.fromPublicNoteId(noteId, (err, note) => { if (err) { return this.webServer.internalServerError(resp, err); @@ -449,11 +459,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return m[1]; } - _followersGetHandler(req, resp, signature) { - this.log.debug({ url: req.url }, 'Request for "followers"'); - return this._getCollectionHandler('followers', req, resp, signature); - } - _parseAndValidateSignature(req) { let signature; try { @@ -485,8 +490,11 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return keyId.endsWith('#main-key'); } - _inboxFollowRequestHandler(activity, remoteActor, user, resp) { - this.log.info({ user_id: user.userId, actor: activity.actor }, 'Follow request'); + _inboxFollowRequestHandler(activity, remoteActor, localUser, resp) { + this.log.info( + { user_id: localUser.userId, actor: activity.actor }, + 'Follow request' + ); const ok = () => { resp.writeHead(200, { 'Content-Type': 'text/html' }); @@ -499,12 +507,12 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { // request for the user to review and decide what to do with // at a later time. // - const activityPubSettings = ActivityPubSettings.fromUser(user); + const activityPubSettings = ActivityPubSettings.fromUser(localUser); if (!activityPubSettings.manuallyApproveFollowers) { - this._recordAcceptedFollowRequest(user, remoteActor, activity); + this._recordAcceptedFollowRequest(localUser, remoteActor, activity); return ok(); } else { - Collection.addFollowRequest(user, remoteActor, err => { + Collection.addFollowRequest(localUser, remoteActor, this.webServer, err => { if (err) { return this.internalServerError(resp, err); } @@ -523,55 +531,56 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { // }); } - _inboxUndoRequestHandler(activity, req, resp) { - this.log.info({ actor: activity.actor }, 'Undo Activity request'); + _inboxUndoRequestHandler(activity, remoteActor, localUser, resp) { + this.log.info( + { user: localUser.username, actor: remoteActor.id }, + 'Undo Activity request' + ); - const url = new URL(req.url, `https://${req.headers.host}`); - const accountName = this._accountNameFromUserPath(url, 'inbox'); - if (!accountName) { - return this.webServer.resourceNotFound(resp); + // we only understand Follow right now + if (!activity.object || activity.object.type !== 'Follow') { + return this.webServer.notImplemented(resp); } - userFromAccount(accountName, (err, user) => { - if (err) { - return this.webServer.resourceNotFound(resp); - } - - // we only understand Follow right now - if (!activity.object || activity.object.type !== 'Follow') { - return this.webServer.notImplemented(resp); - } - - Collection.removeFromCollectionById( - 'followers', - user, - activity.actor, - err => { - if (err) { - return this.webServer.internalServerError(resp, err); - } + Collection.removeFromCollectionById( + 'followers', + localUser, + remoteActor.id, + err => { + if (err) { + return this.webServer.internalServerError(resp, err); + } - this.log.info( - { userId: user.userId, actor: activity.actor }, - 'Undo "Follow" (un-follow) success' - ); + this.log.info( + { + username: localUser.username, + userId: localUser.userId, + actor: remoteActor.id, + }, + 'Undo "Follow" (un-follow) success' + ); - return this.webServer.accepted(resp); - } - ); - }); + return this.webServer.accepted(resp); + } + ); } - _withUserRequestHandler(signature, activity, activityHandler, req, resp) { - this.log.debug({ actor: activity.actor }, `Inbox request from ${activity.actor}`); - - // :TODO: trace - const accountName = accountFromSelfUrl(activity.object); - if (!accountName) { - return this.webServer.badRequest(resp); + _collectionRequestHandler( + signature, + collectionName, + activity, + activityHandler, + req, + resp + ) { + // turn a collection URL to a Actor ID + let actorId = this.webServer.fullUrl(req).toString(); + const suffix = `/${collectionName}`; + if (actorId.endsWith(suffix)) { + actorId = actorId.slice(0, -suffix.length); } - userFromAccount(accountName, (err, user) => { + userFromActorId(actorId, (err, localUser) => { if (err) { return this.webServer.resourceNotFound(resp); } @@ -604,7 +613,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.accessDenied(resp); } - return activityHandler(activity, actor, user, resp); + return activityHandler(activity, actor, localUser, resp); }); }); } @@ -613,7 +622,12 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { async.series( [ callback => { - return Collection.addFollower(localUser, remoteActor, callback); + return Collection.addFollower( + localUser, + remoteActor, + this.webServer, + callback + ); }, callback => { Actor.fromLocalUser(localUser, this.webServer, (err, localActor) => { @@ -739,4 +753,50 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } ); } + + _prepareNewUserAsActor(user, cb) { + this.log.info( + { username: user.username, userId: user.userId }, + `Preparing ActivityPub settings for "${user.username}"` + ); + + const actorId = localActorId(this.webServer, user); + user.setProperty(UserProps.ActivityPubActorId, actorId); + + user.updateActivityPubKeyPairProperties(err => { + if (err) { + return cb(err); + } + + user.generateNewRandomAvatar((err, outPath) => { + if (err) { + this.log.warn( + { + username: user.username, + userId: user.userId, + error: err.message, + }, + `Failed to generate random avatar for "${user.username}"` + ); + } + + // :TODO: fetch over +op default overrides here, e.g. 'enabled' + const apSettings = ActivityPubSettings.fromUser(user); + + const filename = paths.basename(outPath); + const avatarUrl = + makeUserUrl(this.webServer, user, '/users/') + `/avatar/${filename}`; + + apSettings.image = avatarUrl; + apSettings.icon = avatarUrl; + + user.setProperty( + UserProps.ActivityPubSettings, + JSON.stringify(apSettings) + ); + + return cb(null); + }); + }); + } }; diff --git a/core/servers/content/web_handlers/system_general.js b/core/servers/content/web_handlers/system_general.js index 7b156f6bc..2b92b4fe1 100644 --- a/core/servers/content/web_handlers/system_general.js +++ b/core/servers/content/web_handlers/system_general.js @@ -44,7 +44,7 @@ exports.getModule = class SystemGeneralWebHandler extends WebHandlerModule { } _avatarGetHandler(req, resp) { - const url = new URL(req.url, `https://${req.headers.host}`); + const url = this.webServer.fullUrl(req); const filename = paths.basename(url.pathname); if (!filename) { return this.webServer.fileNotFound(resp); diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index 4d735d27d..dc09264c3 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -1,17 +1,21 @@ const WebHandlerModule = require('../../../web_handler_module'); const Config = require('../../../config').get; -const { Errors } = require('../../../enig_error'); +const { Errors, ErrorReasons } = require('../../../enig_error'); const { WellKnownLocations } = require('../web'); const { - selfUrl, + localActorId, webFingerProfileUrl, - userFromAccount, + userFromActorId, getUserProfileTemplatedBody, DefaultProfileTemplate, } = require('../../../activitypub/util'); +const EngiAssert = require('../../../enigma_assert'); +const User = require('../../../user'); +const UserProps = require('../../../user_property'); +const ActivityPubSettings = require('../../../activitypub/settings'); +// deps const _ = require('lodash'); -const EngiAssert = require('../../../enigma_assert'); exports.moduleInfo = { name: 'WebFinger', @@ -74,31 +78,12 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { } _profileRequestHandler(req, resp) { - const url = new URL(req.url, `https://${req.headers.host}`); - - const resource = url.pathname; - if (_.isEmpty(resource)) { - return this.webServer.instance.respondWithError( - resp, - 400, - 'pathname is required', - 'Missing "resource"' - ); - } - - const userPosition = resource.indexOf('@'); - if (-1 === userPosition || userPosition === resource.length - 1) { - this.webServer.resourceNotFound(resp); - return Errors.DoesNotExist('"@username" missing from path'); - } - - const accountName = resource.substring(userPosition + 1); - - userFromAccount(accountName, (err, user) => { + const actorId = this.webServer.fullUrl(req).toString(); + userFromActorId(actorId, (err, localUser) => { if (err) { this.log.warn( - { url: req.url, error: err.message, type: 'Profile' }, - `No profile for "${accountName}" could be retrieved` + { error: err.message, type: 'Profile' }, + 'Could not fetch profile for WebFinger request' ); return this.webServer.resourceNotFound(resp); } @@ -113,7 +98,7 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { getUserProfileTemplatedBody( templateFile, - user, + localUser, DefaultProfileTemplate, 'text/plain', (err, body, contentType) => { @@ -134,8 +119,7 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { } _webFingerRequestHandler(req, resp) { - const url = new URL(req.url, `https://${req.headers.host}`); - + const url = this.webServer.fullUrl(req); const resource = url.searchParams.get('resource'); if (!resource) { return this.webServer.respondWithError( @@ -148,13 +132,11 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { const accountName = this._getAccountName(resource); if (!accountName || accountName.length < 1) { - this.webServer.resourceNotFound(resp); - return Errors.DoesNotExist( - `Failed to parse "account name" for resource: ${resource}` - ); + this.log.warn(`Failed to parse "account name" for resource: ${resource}`); + return this.webServer.resourceNotFound(resp); } - userFromAccount(accountName, (err, user) => { + this._localUserFromWebFingerAccountName(accountName, (err, localUser) => { if (err) { this.log.warn( { url: req.url, error: err.message, type: 'WebFinger' }, @@ -166,11 +148,11 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { const domain = this.webServer.getDomain(); const body = JSON.stringify({ - subject: `acct:${user.username}@${domain}`, - aliases: [this._profileUrl(user), this._selfUrl(user)], + subject: `acct:${localUser.username}@${domain}`, + aliases: [this._profileUrl(localUser), this._userActorId(localUser)], links: [ - this._profilePageLink(user), - this._selfLink(user), + this._profilePageLink(localUser), + this._selfLink(localUser), this._subscribeLink(), ], }); @@ -185,6 +167,41 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { }); } + _localUserFromWebFingerAccountName(accountName, cb) { + if (accountName.startsWith('@')) { + accountName = accountName.slice(1); + } + + User.getUserIdAndName(accountName, (err, userId) => { + if (err) { + return cb(err); + } + + User.getUser(userId, (err, user) => { + if (err) { + return cb(err); + } + + const accountStatus = user.getPropertyAsNumber(UserProps.AccountStatus); + if ( + User.AccountStatus.disabled == accountStatus || + User.AccountStatus.inactive == accountStatus + ) { + return cb( + Errors.AccessDenied('Account disabled', ErrorReasons.Disabled) + ); + } + + const activityPubSettings = ActivityPubSettings.fromUser(user); + if (!activityPubSettings.enabled) { + return cb(Errors.AccessDenied('ActivityPub is not enabled for user')); + } + + return cb(null, user); + }); + }); + } + _profileUrl(user) { return webFingerProfileUrl(this.webServer, user); } @@ -198,13 +215,13 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { }; } - _selfUrl(user) { - return selfUrl(this.webServer, user); + _userActorId(user) { + return localActorId(this.webServer, user); } // :TODO: only if ActivityPub is enabled _selfLink(user) { - const href = this._selfUrl(user); + const href = this._userActorId(user); return { rel: 'self', type: 'application/activity+json', diff --git a/core/system_events.js b/core/system_events.js index c5969b951..3eceb49ed 100644 --- a/core/system_events.js +++ b/core/system_events.js @@ -10,7 +10,9 @@ module.exports = { ConfigChanged: 'codes.l33t.enigma.system.config_changed', // (config.hjson) MenusChanged: 'codes.l33t.enigma.system.menus_changed', // (menu.hjson) - // User - includes { user, ...} + // User - includes { user, callback, ... } where user *is* the user instance in question + NewUserPrePersist: 'codes.l33t.enigma.system.user_new_pre_persist', + // User - includes { user, ...} where user is a *copy* NewUser: 'codes.l33t.enigma.system.user_new', // { ... } UserLogin: 'codes.l33t.enigma.system.user_login', // { ... } UserLogoff: 'codes.l33t.enigma.system.user_logoff', // { ... } diff --git a/core/user.js b/core/user.js index f03b9c69a..b44a7c9f4 100644 --- a/core/user.js +++ b/core/user.js @@ -22,7 +22,6 @@ const ssh2 = require('ssh2'); const AvatarGenerator = require('avatar-generator'); const paths = require('path'); const fse = require('fs-extra'); -const ActivityPubSettings = require('./activitypub/settings'); module.exports = class User { constructor() { @@ -49,6 +48,7 @@ module.exports = class User { static get PBKDF2() { return { + // :TODO: bump up iterations for all new PWs iterations: 1000, keyLen: 128, saltLen: 32, @@ -129,8 +129,14 @@ module.exports = class User { } getSanitizedName(type = 'username') { - const name = - 'real' === type ? this.getProperty(UserProps.RealName) : this.username; + let name; + switch (type) { + case 'real': + name = this.getProperty(UserProps.RealName) || this.username; + break; + default: + name = this.username; + } return sanatizeFilename(name) || `user${this.userId.toString()}`; } @@ -507,46 +513,6 @@ module.exports = class User { } ); }, - function setKeyPair(trans, callback) { - self.updateActivityPubKeyPairProperties(err => { - return callback(err, trans); - }); - }, - function defaultAvatar(trans, callback) { - self.generateNewRandomAvatar((err, outPath) => { - return callback(err, outPath, trans); - }); - }, - function defaultActivityPubSettings(outPath, trans, callback) { - // we have to late import this crap :D - const getServer = require('./listening_server.js').getServer; - const WebServerPackageName = require('./servers/content/web') - .moduleInfo.packageName; - const webServer = getServer(WebServerPackageName); - - // :TODO: fetch over +op default overrides here, e.g. 'enabled' - const apSettings = ActivityPubSettings.fromUser(self); - - // convert |outPath| of avatar to a URL, that, with the web - // server enabled, can be fetched - if (webServer) { - const { makeUserUrl } = require('./activitypub/util'); - const filename = paths.basename(outPath); - const url = - makeUserUrl(webServer.instance, self, '/users/') + - `/avatar/${filename}`; - - apSettings.image = url; - apSettings.icon = url; - } - - self.setProperty( - UserProps.ActivityPubSettings, - JSON.stringify(apSettings) - ); - - return callback(null, trans); - }, function setInitialGroupMembership(trans, callback) { // Assign initial groups. Must perform a clone: #235 - All users are sysops (and I can't un-sysop them) self.groups = [...config.users.defaultGroups]; @@ -558,12 +524,21 @@ module.exports = class User { return callback(null, trans); }, + function newUserPreEvent(trans, callback) { + Events.emit(Events.getSystemEvents().NewUserPrePersist, { + user: self, + sessionId: createUserInfo.sessionId, + callback: err => { + return callback(err, trans); + }, + }); + }, function saveAll(trans, callback) { self.persistWithTransaction(trans, err => { return callback(err, trans); }); }, - function sendEvent(trans, callback) { + function newUserEvent(trans, callback) { Events.emit(Events.getSystemEvents().NewUser, { user: Object.assign({}, self, { sessionId: createUserInfo.sessionId, @@ -1048,8 +1023,8 @@ module.exports = class User { userIds.push(row.user_id); } }, - () => { - return cb(null, userIds); + err => { + return cb(err, userIds); } ); } diff --git a/core/user_property.js b/core/user_property.js index 0cef0fd55..3d40b6f56 100644 --- a/core/user_property.js +++ b/core/user_property.js @@ -70,5 +70,6 @@ module.exports = { PublicActivityPubSigningKey: 'public_key_activitypub_sign_rsa_pem', // RSA public key for ActivityPub signing PrivateActivityPubSigningKey: 'private_key_activitypub_sign_rsa_pem', // RSA private key (corresponding to PublicActivityPubSigningKey) - ActivityPubSettings: 'activity_pub_settings', // JSON object (above); see ActivityPubSettings in activitypub/settings.js + ActivityPubSettings: 'activitypub_settings', // JSON object (above); see ActivityPubSettings in activitypub/settings.js + ActivityPubActorId: 'activitypub_actor_id', // Actor ID representing this users }; diff --git a/core/wfc.js b/core/wfc.js index 749593ab4..3f1274243 100644 --- a/core/wfc.js +++ b/core/wfc.js @@ -65,7 +65,6 @@ exports.getModule = class WaitingForCallerModule extends MenuModule { // // Enforce that we have at least a secure connection in our ACS check // - this.config.acs = this.config.acs; if (!this.config.acs) { this.config.acs = DefaultACS; } else if (!this.config.acs.includes('SC')) { From 6dd9fe810f6d0d41ff7355bd3b2363b89bf776ec Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 28 Jan 2023 12:13:11 -0700 Subject: [PATCH 090/233] Fix profile query --- WHATSNEW.md | 1 + core/servers/content/web_handlers/webfinger.js | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/WHATSNEW.md b/WHATSNEW.md index 53bf08fe9..b038751e6 100644 --- a/WHATSNEW.md +++ b/WHATSNEW.md @@ -10,6 +10,7 @@ This document attempts to track **major** changes and additions in ENiGMA½. For * [WebFinger](/docs/_docs/servers/contentservers/webfinger-handler.md) support. * New users now have randomly generated avatars assigned to them that can be served up via the new System General [Web Handler](/docs/_docs/servers/contentservers/web-handlers.md). * CombatNet has shut down, so the module (`combatnet.js`) has been removed. +* New `NewUserPrePersist` system event available to developers to 'hook' account creation and add their own properties/etc. ## 0.0.13-beta * **Note for contributors**: ENiGMA has switched to [Prettier](https://prettier.io) for formatting/style. Please see [CONTRIBUTING](CONTRIBUTING.md) and the Prettier website for more information. diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index dc09264c3..8b9521127 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -5,7 +5,6 @@ const { WellKnownLocations } = require('../web'); const { localActorId, webFingerProfileUrl, - userFromActorId, getUserProfileTemplatedBody, DefaultProfileTemplate, } = require('../../../activitypub/util'); @@ -78,11 +77,20 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { } _profileRequestHandler(req, resp) { - const actorId = this.webServer.fullUrl(req).toString(); - userFromActorId(actorId, (err, localUser) => { + // Profile requests do not have an Actor ID available + const profileQuery = this.webServer.fullUrl(req).toString(); + const accountName = this._getAccountName(profileQuery); + if (!accountName) { + this.log.warn( + `Failed to parse "account name" for profile query: ${profileQuery}` + ); + return this.webServer.resourceNotFound(resp); + } + + this._localUserFromWebFingerAccountName(accountName, (err, localUser) => { if (err) { this.log.warn( - { error: err.message, type: 'Profile' }, + { error: err.message, type: 'Profile', accountName }, 'Could not fetch profile for WebFinger request' ); return this.webServer.resourceNotFound(resp); From 0ca67f6729ee6ba907df35587f4ff48ce2b570df Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 28 Jan 2023 12:59:12 -0700 Subject: [PATCH 091/233] Clean up cache, add missing FK option --- core/activitypub/actor.js | 15 ++++++++++++--- core/database.js | 33 ++------------------------------- 2 files changed, 14 insertions(+), 34 deletions(-) diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 83fa9a7c9..4e56e4cf6 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -210,7 +210,7 @@ module.exports = class Actor extends ActivityPubObject { static _fromCache(id, cb) { apDb.get( - `SELECT actor_json, subject, timestamp + `SELECT rowid, actor_json, subject, timestamp, FROM actor_cache WHERE actor_id = ? OR subject = ? LIMIT 1;`, @@ -226,8 +226,17 @@ module.exports = class Actor extends ActivityPubObject { const timestamp = moment(row.timestamp); if (moment().isAfter(timestamp.add(ActorCacheTTL))) { - // :TODO: drop from cache - return cb(Errors.Expired('The cache entry is expired')); + apDb.run( + `DELETE FROM actor_cache + WHERE rowid = ?;`, + [row.rowid], + err => { + if (err) { + // :TODO: Log me + } + return cb(Errors.Expired('The cache entry is expired')); + } + ); } const obj = ActivityPubObject.fromJsonString(row.actor_json); diff --git a/core/database.js b/core/database.js index a565d330a..697c86a15 100644 --- a/core/database.js +++ b/core/database.js @@ -242,37 +242,6 @@ const DB_INIT_TABLE = { return cb(null); }, - // actor: cb => { - // enableForeignKeys(dbs.actor); - - // dbs.actor.run( - // `CREATE TABLE IF NOT EXISTS activitypub_actor ( - // id INTEGER PRIMARY KEY, - // actor_url VARCHAR NOT NULL, - // UNIQUE(actor_url) - // );` - // ); - - // // :TODO: create FK on delete/etc. - - // dbs.actor.run( - // `CREATE TABLE IF NOT EXISTS activitypub_actor_property ( - // actor_id INTEGER NOT NULL, - // prop_name VARCHAR NOT NULL, - // prop_value VARCHAR, - // UNIQUE(actor_id, prop_name), - // FOREIGN KEY(actor_id) REFERENCES actor(id) ON DELETE CASCADE - // );` - // ); - - // dbs.actor.run( - // `CREATE INDEX IF NOT EXISTS activitypub_actor_property_id_and_name_index0 - // ON activitypub_actor_property (actor_id, prop_name);` - // ); - - // return cb(null); - // }, - message: cb => { enableForeignKeys(dbs.message); @@ -502,6 +471,8 @@ dbs.message.run( return cb(null); }, activitypub: cb => { + enableForeignKeys(dbs.activitypub); + // Actors we know about and have cached dbs.activitypub.run( `CREATE TABLE IF NOT EXISTS actor_cache ( From 2a75d55b420e4253c3a7cbb22f396390b650ef02 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 28 Jan 2023 12:59:56 -0700 Subject: [PATCH 092/233] Remove alias cache never used --- core/database.js | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/core/database.js b/core/database.js index 697c86a15..6277a71d3 100644 --- a/core/database.js +++ b/core/database.js @@ -490,17 +490,6 @@ dbs.message.run( ON actor_cache (actor_id);` ); - // Mapping of known aliases for a fully qualified Actor ID - // generally obtained via WebFinger - dbs.activitypub.run( - `CREATE TABLE IF NOT EXISTS actor_alias_cache ( - actor_id VARCHAR NOT NULL, -- Fully qualified Actor ID/URL - actor_alias_id VARCHAR NOT NULL, -- Alias such the user's "profile URL" - - UNIQUE(actor_alias_id) - );` - ); - // ActivityPub Collections of various types such as followers, following, likes, ... dbs.activitypub.run( `CREATE TABLE IF NOT EXISTS collection ( From 3bdce81bdb0308a9ba4f91bfdb11aa661601a0c6 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 29 Jan 2023 16:52:01 -0700 Subject: [PATCH 093/233] Retro style default profile, constant cleanup, some DRY, etc. --- core/activitypub/activity.js | 26 ++-- core/activitypub/actor.js | 30 +++- core/activitypub/const.js | 13 ++ core/activitypub/util.js | 54 ++++--- core/servers/content/web.js | 5 + .../content/web_handlers/activitypub.js | 57 ++++---- .../servers/content/web_handlers/webfinger.js | 45 +++--- www/wf/profile.template.html | 133 +++++++++++++++--- 8 files changed, 270 insertions(+), 93 deletions(-) diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index c66c3e444..07a25e14b 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -1,5 +1,11 @@ const { localActorId } = require('./util'); -const { WellKnownActivityTypes } = require('./const'); +const { + ActivityStreamMediaType, + WellKnownActivityTypes, + WellKnownActivity, + WellKnownRecipientFields, + HttpSignatureSignHeaders, +} = require('./const'); const ActivityPubObject = require('./object'); const { Errors } = require('../enig_error'); const UserProps = require('../user_property'); @@ -26,7 +32,7 @@ module.exports = class Activity extends ActivityPubObject { static makeFollow(webServer, localActor, remoteActor) { return new Activity({ id: Activity.activityObjectId(webServer), - type: 'Follow', + type: WellKnownActivity.Follow, actor: localActor, object: remoteActor.id, }); @@ -36,7 +42,7 @@ module.exports = class Activity extends ActivityPubObject { static makeAccept(webServer, localActor, followRequest) { return new Activity({ id: Activity.activityObjectId(webServer), - type: 'Accept', + type: WellKnownActivity.Accept, actor: localActor, object: followRequest, // previous request Activity }); @@ -45,7 +51,7 @@ module.exports = class Activity extends ActivityPubObject { static makeCreate(webServer, actor, obj) { return new Activity({ id: Activity.activityObjectId(webServer), - type: 'Create', + type: WellKnownActivity.Create, actor, object: obj, }); @@ -55,7 +61,7 @@ module.exports = class Activity extends ActivityPubObject { const deleted = getISOTimestampString(); return new Activity({ id: obj.id, - type: 'Tombstone', + type: WellKnownActivity.Tombstone, deleted, published: deleted, updated: deleted, @@ -74,14 +80,13 @@ module.exports = class Activity extends ActivityPubObject { const reqOpts = { headers: { - 'Content-Type': 'application/activity+json', + 'Content-Type': ActivityStreamMediaType, }, sign: { - // :TODO: Make a helper for this key: privateKey, keyId: localActorId(webServer, fromUser) + '#main-key', authorizationHeaderName: 'Signature', - headers: ['(request-target)', 'host', 'date', 'digest', 'content-type'], + headers: HttpSignatureSignHeaders, }, }; @@ -92,8 +97,7 @@ module.exports = class Activity extends ActivityPubObject { recipientIds() { const ids = []; - // :TODO: bto, bcc? - ['to', 'cc', 'audience'].forEach(field => { + WellKnownRecipientFields.forEach(field => { let v = this[field]; if (v) { if (!Array.isArray(v)) { @@ -103,7 +107,7 @@ module.exports = class Activity extends ActivityPubObject { } }); - return ids; + return Array.from(new Set(ids)); } static activityObjectId(webServer) { diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 4e56e4cf6..6e22c1480 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -17,6 +17,7 @@ const { queryWebFinger } = require('../webfinger'); const EnigAssert = require('../enigma_assert'); const ActivityPubSettings = require('./settings'); const ActivityPubObject = require('./object'); +const { ActivityStreamMediaType } = require('./const'); const apDb = require('../database').dbs.activitypub; // deps @@ -96,6 +97,12 @@ module.exports = class Actor extends ActivityPubObject { '@context': [ ActivityStreamsContext, 'https://w3id.org/security/v1', // :TODO: add support + { + bbsPublicStats: { + '@id': 'bbs:bbsPublicStats', + '@type': '@id', + }, + }, ], id: userActorId, type: 'Person', @@ -122,6 +129,25 @@ module.exports = class Actor extends ActivityPubObject { // value: 'Mateo@21:1/121', // }, // ], + bbsPublicStats: { + affiliations: user.getProperty(UserProps.Affiliations) || '', + lastLogin: user.getProperty(UserProps.LastLoginTs), + loginCount: user.getPropertyAsNumber(UserProps.LoginCount), + joined: user.getProperty(UserProps.AccountCreated), + postCount: user.getPropertyAsNumber(UserProps.MessagePostCount), + doorCount: user.getPropertyAsNumber(UserProps.DoorRunTotalCount), + doorMinute: user.getPropertyAsNumber(UserProps.DoorRunTotalMinutes), + achievementCount: user.getPropertyAsNumber( + UserProps.AchievementTotalCount + ), + achievementPoints: user.getPropertyAsNumber( + UserProps.AchievementTotalPoints + ), + uploadCount: user.getPropertyAsNumber(UserProps.FileUlTotalCount), + downloadCount: user.getPropertyAsNumber(UserProps.FileDlTotalCount), + uploadBytes: user.getPropertyAsNumber(UserProps.FileUlTotalBytes), + downloadBytes: user.getPropertyAsNumber(UserProps.FileDlTotalBytes), + }, }; addImage(obj, 'icon'); @@ -190,7 +216,7 @@ module.exports = class Actor extends ActivityPubObject { static _fromRemoteQuery(id, cb) { const headers = { - Accept: 'application/activity+json', + Accept: ActivityStreamMediaType, }; getJson(id, { headers }, (err, actor) => { @@ -268,7 +294,7 @@ module.exports = class Actor extends ActivityPubObject { } const activityLink = links.find(l => { - return l.type === 'application/activity+json' && l.href?.length > 0; + return l.type === ActivityStreamMediaType && l.href?.length > 0; }); if (!activityLink) { diff --git a/core/activitypub/const.js b/core/activitypub/const.js index 61e005f2f..56221a035 100644 --- a/core/activitypub/const.js +++ b/core/activitypub/const.js @@ -1,5 +1,6 @@ exports.ActivityStreamsContext = 'https://www.w3.org/ns/activitystreams'; exports.PublicCollectionId = 'https://www.w3.org/ns/activitystreams#Public'; +exports.ActivityStreamMediaType = 'application/activity+json'; const WellKnownActivity = { Create: 'Create', @@ -13,8 +14,20 @@ const WellKnownActivity = { Like: 'Like', Announce: 'Announce', Undo: 'Undo', + Tombstone: 'Tombstone', }; exports.WellKnownActivity = WellKnownActivity; const WellKnownActivityTypes = Object.values(WellKnownActivity); exports.WellKnownActivityTypes = WellKnownActivityTypes; + +exports.WellKnownRecipientFields = ['audience', 'bcc', 'bto', 'cc', 'to']; + +// Signatures utilized in HTTP signature generation +exports.HttpSignatureSignHeaders = [ + '(request-target)', + 'host', + 'date', + 'digest', + 'content-type', +]; diff --git a/core/activitypub/util.js b/core/activitypub/util.js index e2738d489..3d89c0424 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -14,6 +14,7 @@ const paths = require('path'); const moment = require('moment'); const { striptags } = require('striptags'); const { encode, decode } = require('html-entities'); +const { isString } = require('lodash'); exports.ActivityStreamsContext = 'https://www.w3.org/ns/activitystreams'; exports.isValidLink = isValidLink; @@ -32,9 +33,9 @@ exports.userNameFromSubject = userNameFromSubject; // profiles and 'self' requests without the // Accept: application/activity+json headers present exports.DefaultProfileTemplate = ` -User information for: %USERNAME% +User information for: %PREFERRED_USERNAME% -Real Name: %REAL_NAME% +Name: %NAME% Login Count: %LOGIN_COUNT% Affiliations: %AFFILIATIONS% Achievement Points: %ACHIEVEMENT_POINTS% @@ -102,8 +103,10 @@ function userFromActorId(actorId, cb) { } function getUserProfileTemplatedBody( + webServer, templateFile, user, + userAsActor, defaultTemplate, defaultContentType, cb @@ -130,36 +133,53 @@ function getUserProfileTemplatedBody( return callback(null, template, contentType); }, (template, contentType, callback) => { - const up = (p, na = 'N/A') => { - return user.getProperty(p) || na; + const val = v => { + if (isString(v)) { + return v ? encode(v) : ''; + } else { + return v ? v : 0; + } }; - let birthDate = up(UserProps.Birthdate); + let birthDate = val(user.getProperty(UserProps.Birthdate)); if (moment.isDate(birthDate)) { birthDate = moment(birthDate); } const varMap = { - USERNAME: user.username, - REAL_NAME: user.getSanitizedName('real'), - SEX: up(UserProps.Sex), + ACTOR_OBJ: JSON.stringify(userAsActor), + SUBJECT: `@${user.username}@${webServer.getDomain()}`, + INBOX: userAsActor.inbox, + SHARED_INBOX: userAsActor.endpoints.sharedInbox, + OUTBOX: userAsActor.outbox, + FOLLOWERS: userAsActor.followers, + FOLLOWING: userAsActor.following, + USER_ICON: userAsActor.icon.url, + USER_IMAGE: userAsActor.image.url, + PREFERRED_USERNAME: userAsActor.preferredUsername, + NAME: userAsActor.name, + SEX: user.getProperty(UserProps.Sex), BIRTHDATE: birthDate, AGE: user.getAge(), - LOCATION: up(UserProps.Location), - AFFILIATIONS: up(UserProps.Affiliations), - EMAIL: up(UserProps.EmailAddress), - WEB_ADDRESS: up(UserProps.WebAddress), + LOCATION: user.getProperty(UserProps.Location), + AFFILIATIONS: user.getProperty(UserProps.Affiliations), + EMAIL: user.getProperty(UserProps.EmailAddress), + WEB_ADDRESS: user.getProperty(UserProps.WebAddress), ACCOUNT_CREATED: moment(user.getProperty(UserProps.AccountCreated)), LAST_LOGIN: moment(user.getProperty(UserProps.LastLoginTs)), - LOGIN_COUNT: up(UserProps.LoginCount), - ACHIEVEMENT_COUNT: up(UserProps.AchievementTotalCount, '0'), - ACHIEVEMENT_POINTS: up(UserProps.AchievementTotalPoints, '0'), + LOGIN_COUNT: user.getPropertyAsNumber(UserProps.LoginCount), + ACHIEVEMENT_COUNT: user.getPropertyAsNumber( + UserProps.AchievementTotalCount + ), + ACHIEVEMENT_POINTS: user.getProperty( + UserProps.AchievementTotalPoints + ), BOARDNAME: Config().general.boardName, }; let body = template; - _.each(varMap, (val, varName) => { - body = body.replace(new RegExp(`%${varName}%`, 'g'), val); + _.each(varMap, (v, varName) => { + body = body.replace(new RegExp(`%${varName}%`, 'g'), val(v)); }); return callback(null, body, contentType); diff --git a/core/servers/content/web.js b/core/servers/content/web.js index 6f39bd11c..713b7a4ad 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -324,6 +324,11 @@ exports.getModule = class WebServerModule extends ServerModule { }); } + created(resp, body = '', headers = { 'Content-Type:': 'text/html' }) { + resp.writeHead(201, 'Created', body ? headers : null); + return resp.end(body); + } + accepted(resp, body = '', headers = { 'Content-Type:': 'text/html' }) { resp.writeHead(202, 'Accepted', body ? headers : null); return resp.end(body); diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 3b3238b3f..386a7bac1 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -6,6 +6,7 @@ const { makeUserUrl, localActorId, } = require('../../../activitypub/util'); +const { ActivityStreamMediaType } = require('../../../activitypub/const'); const Config = require('../../../config').get; const Activity = require('../../../activitypub/activity'); const ActivityPubSettings = require('../../../activitypub/settings'); @@ -31,8 +32,6 @@ exports.moduleInfo = { packageName: 'codes.l33t.enigma.web.handler.activitypub', }; -const ActivityJsonMime = 'application/activity+json'; - exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { constructor() { super(); @@ -149,7 +148,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { // Additionally, serve activity JSON if the proper 'Accept' header was sent const accept = req.headers['accept'].split(',').map(v => v.trim()) || ['*/*']; const headerValues = [ - ActivityJsonMime, + ActivityStreamMediaType, 'application/ld+json', 'application/json', ]; @@ -166,11 +165,17 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.resourceNotFound(resp); } - if (sendActor) { - return this._selfAsActorHandler(localUser, req, resp); - } else { - return this._standardSelfHandler(localUser, req, resp); - } + Actor.fromLocalUser(localUser, this.webServer, (err, localActor) => { + if (err) { + return this.webServer.internalServerError(resp, err); + } + + if (sendActor) { + return this._selfAsActorHandler(localUser, localActor, req, resp); + } else { + return this._standardSelfHandler(localUser, localActor, req, resp); + } + }); }); } @@ -341,7 +346,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.internalServerError(resp, err); } - return this.webServer.accepted(resp); + return this.webServer.created(resp); } ); } @@ -409,7 +414,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { const body = JSON.stringify(collection); const headers = { - 'Content-Type': ActivityJsonMime, + 'Content-Type': ActivityStreamMediaType, 'Content-Length': body.length, }; @@ -700,30 +705,24 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { console.log(resp); } - _selfAsActorHandler(user, req, resp) { + _selfAsActorHandler(localUser, localActor, req, resp) { this.log.trace( - { username: user.username }, - `Serving ActivityPub Actor for "${user.username}"` + { username: localUser.username }, + `Serving ActivityPub Actor for "${localUser.username}"` ); - Actor.fromLocalUser(user, this.webServer, (err, actor) => { - if (err) { - return this.webServer.internalServerError(resp, err); - } - - const body = JSON.stringify(actor); + const body = JSON.stringify(localActor); - const headers = { - 'Content-Type': ActivityJsonMime, - 'Content-Length': body.length, - }; + const headers = { + 'Content-Type': ActivityStreamMediaType, + 'Content-Length': body.length, + }; - resp.writeHead(200, headers); - return resp.end(body); - }); + resp.writeHead(200, headers); + return resp.end(body); } - _standardSelfHandler(user, req, resp) { + _standardSelfHandler(localUser, localActor, req, resp) { let templateFile = _.get( Config(), 'contentServers.web.handlers.activityPub.selfTemplate' @@ -734,8 +733,10 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { // we'll fall back to the same default profile info as the WebFinger profile getUserProfileTemplatedBody( + this.webServer, templateFile, - user, + localUser, + localActor, DefaultProfileTemplate, 'text/plain', (err, body, contentType) => { diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index 8b9521127..a101e260c 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -15,6 +15,7 @@ const ActivityPubSettings = require('../../../activitypub/settings'); // deps const _ = require('lodash'); +const Actor = require('../../../activitypub/actor'); exports.moduleInfo = { name: 'WebFinger', @@ -104,25 +105,33 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { templateFile = this.webServer.resolveTemplatePath(templateFile); } - getUserProfileTemplatedBody( - templateFile, - localUser, - DefaultProfileTemplate, - 'text/plain', - (err, body, contentType) => { - if (err) { - return this.webServer.resourceNotFound(resp); - } - - const headers = { - 'Content-Type': contentType, - 'Content-Length': body.length, - }; - - resp.writeHead(200, headers); - return resp.end(body); + Actor.fromLocalUser(localUser, this.webServer, (err, localActor) => { + if (err) { + return this.webServer.internalServerError(resp, err); } - ); + + getUserProfileTemplatedBody( + this.webServer, + templateFile, + localUser, + localActor, + DefaultProfileTemplate, + 'text/plain', + (err, body, contentType) => { + if (err) { + return this.webServer.resourceNotFound(resp); + } + + const headers = { + 'Content-Type': contentType, + 'Content-Length': body.length, + }; + + resp.writeHead(200, headers); + return resp.end(body); + } + ); + }); }); } diff --git a/www/wf/profile.template.html b/www/wf/profile.template.html index 2912ad7b2..909c89ae1 100644 --- a/www/wf/profile.template.html +++ b/www/wf/profile.template.html @@ -1,19 +1,118 @@ - + - - - %USERNAME% - - - - -

    %USERNAME% of %BOARDNAME%:

    -

    - Real Name: %REAL_NAME%
    - Location: %LOCATION%
    - Login Count %LOGIN_COUNT%
    - Affils: %AFFILIATIONS%
    - Account Since: %ACCOUNT_CREATED%
    -

    - + + + %NAME% + + + + + + +
    +
    + +

    %NAME%

    +

    + Name: %NAME%
    + Location: %LOCATION%
    + Login Count: %LOGIN_COUNT%
    + Last Login : %LAST_LOGIN%
    + Affils: %AFFILIATIONS%
    + Account Since: %ACCOUNT_CREATED%
    +

    + %SUBJECT% + %BOARDNAME%! +
    + \ No newline at end of file From 35b7c00d1135c8b6209b33a0cef928f2ee2a5e84 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 30 Jan 2023 12:30:36 -0700 Subject: [PATCH 094/233] Additionl of WIP NodeInfo2 support, fix content-type for Actor images --- core/activitypub/actor.js | 4 +- core/activitypub/util.js | 5 +- core/config_default.js | 3 + .../servers/content/web_handlers/nodeinfo2.js | 123 ++++++++++++++++++ core/stat_log.js | 11 +- 5 files changed, 143 insertions(+), 3 deletions(-) create mode 100644 core/servers/content/web_handlers/nodeinfo2.js diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 6e22c1480..13d53dff8 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -26,6 +26,7 @@ const mimeTypes = require('mime-types'); const { getJson } = require('../http_util.js'); const { getISOTimestampString } = require('../database.js'); const moment = require('moment'); +const paths = require('path'); const ActorCacheTTL = moment.duration(1, 'day'); @@ -82,7 +83,8 @@ module.exports = class Actor extends ActivityPubObject { const addImage = (o, t) => { const url = userSettings[t]; if (url) { - const mt = mimeTypes.contentType(url); + const fn = paths.basename(url); + const mt = mimeTypes.contentType(fn); if (mt) { o[t] = { mediaType: mt, diff --git a/core/activitypub/util.js b/core/activitypub/util.js index 3d89c0424..7a0f0d8aa 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -137,6 +137,9 @@ function getUserProfileTemplatedBody( if (isString(v)) { return v ? encode(v) : ''; } else { + if (isNaN(v)) { + return ''; + } return v ? v : 0; } }; @@ -171,7 +174,7 @@ function getUserProfileTemplatedBody( ACHIEVEMENT_COUNT: user.getPropertyAsNumber( UserProps.AchievementTotalCount ), - ACHIEVEMENT_POINTS: user.getProperty( + ACHIEVEMENT_POINTS: user.getPropertyAsNumber( UserProps.AchievementTotalPoints ), BOARDNAME: Config().general.boardName, diff --git a/core/config_default.js b/core/config_default.js index 27c3945b8..e2752603c 100644 --- a/core/config_default.js +++ b/core/config_default.js @@ -306,6 +306,9 @@ module.exports = () => { systemGeneral: { enabled: true, }, + nodeInfo2: { + enabled: true, + }, }, resetPassword: { diff --git a/core/servers/content/web_handlers/nodeinfo2.js b/core/servers/content/web_handlers/nodeinfo2.js new file mode 100644 index 000000000..f5c3cc2ee --- /dev/null +++ b/core/servers/content/web_handlers/nodeinfo2.js @@ -0,0 +1,123 @@ +const WebHandlerModule = require('../../../web_handler_module'); +const { Errors } = require('../../../enig_error'); +const EngiAssert = require('../../../enigma_assert'); +const Config = require('../../../config').get; +const packageJson = require('../../../../package.json'); +const StatLog = require('../../../stat_log'); +const SysProps = require('../../../system_property'); +const SysLogKeys = require('../../../system_log'); + +// deps +const moment = require('moment'); +const async = require('async'); + +exports.moduleInfo = { + name: 'NodeInfo2', + desc: 'A NodeInfo2 Handler implementing https://github.com/jaywink/nodeinfo2', + author: 'NuSkooler', + packageName: 'codes.l33t.enigma.web.handler.nodeinfo2', +}; + +exports.getModule = class NodeInfo2WebHadnler extends WebHandlerModule { + constructor() { + super(); + } + + init(webServer, cb) { + // we rely on the web server + this.webServer = webServer; + EngiAssert(webServer, 'NodeInfo2 Web Handler init without webServer'); + + this.log = webServer.logger().child({ webHandler: 'NodeInfo2' }); + + const domain = this.webServer.getDomain(); + if (!domain) { + return cb(Errors.UnexpectedState('Web server does not have "domain" set')); + } + + this.webServer.addRoute({ + method: 'GET', + path: /^\/\.well-known\/x-nodeinfo2$/, + handler: this._nodeInfo2Handler.bind(this), + }); + + return cb(null); + } + + _nodeInfo2Handler(req, resp) { + this.log.info({ url: req.url }, 'Serving NodeInfo2 request'); + + this._getNodeInfo(nodeInfo => { + const body = JSON.stringify(nodeInfo); + const headers = { + 'Content-Type': 'application/json', + 'Content-Length': body.length, + }; + + resp.writeHead(200, headers); + return resp.end(body); + }); + } + + _getNodeInfo(cb) { + // https://github.com/jaywink/nodeinfo2/tree/master/schemas/1.0 + const config = Config(); + const nodeInfo = { + version: '1.0', + server: { + baseUrl: this.webServer.baseUrl(), + name: config.general.boardName, + software: 'ENiGMA½ Bulletin Board Software', + version: packageJson.version, + }, + // :TODO: Only list what's enabled + protocols: ['telnet', 'ssh', 'gopher', 'nntp', 'ws', 'activitypub'], + services: { + inbound: [], + outbound: [''], + }, + openRegistrations: !config.general.closedSystem, + usage: { + users: { + total: StatLog.getSystemStatNum(SysProps.TotalUserCount) || 1, + // others fetched dynamically below + }, + + // :TODO: pop with local message + // select count() from message_meta where meta_name='local_from_user_id'; + localPosts: 0, + }, + }; + + const setActive = (since, name, next) => { + const filter = { + logName: SysLogKeys.UserLoginHistory, + resultType: 'count', + dateNewer: moment().subtract(moment.duration(since, 'days')), + }; + StatLog.findSystemLogEntries(filter, (err, count) => { + if (!err) { + nodeInfo.usage[name] = count; + } + return next(null); + }); + }; + + async.series( + [ + callback => { + return setActive(180, 'activeHalfyear', callback); + }, + callback => { + return setActive(30, 'activeMonth', callback); + }, + callback => { + return setActive(7, 'activeWeek', callback); + }, + ], + () => { + return cb(nodeInfo); + } + ); + } +}; diff --git a/core/stat_log.js b/core/stat_log.js index f2d57bd0c..923abe7af 100644 --- a/core/stat_log.js +++ b/core/stat_log.js @@ -8,6 +8,7 @@ const SysProps = require('./system_property.js'); const UserProps = require('./user_property'); const Message = require('./message'); const { getActiveConnections, AllConnections } = require('./client_connections'); +const Log = require('./logger').log; // deps const _ = require('lodash'); @@ -349,6 +350,7 @@ class StatLog { // - resultType: 'obj' | 'count' (default='obj') // - limit: Limit returned results // - date: exact date to filter against + // - dateNewer: Entries newer than this value // - order: 'timestamp' | 'timestamp_asc' | 'timestamp_desc' | 'random' // (default='timestamp') // @@ -402,7 +404,9 @@ class StatLog { this.setNonPersistentSystemStat(SysProps.SystemLoadStats, loadStats); }) .catch(err => { - // :TODO: log me + if (err) { + Log.err({ error: err.message }, 'Error refreshing system stats'); + } }); } @@ -509,6 +513,11 @@ class StatLog { sql += ` AND DATE(timestamp, "localtime") = DATE("${filter.date.format( 'YYYY-MM-DD' )}")`; + } else if (filter.dateNewer) { + filter.dateNewer = moment(filter.dateNewer); + sql += ` AND DATE(timestamp, "localtime") > DATE("${filter.dateNewer.format( + 'YYYY-MM-DD' + )}")`; } if ('count' !== filter.resultType) { From c456c18b853f7e38ec81c2f7eaab743ed5bb265d Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 30 Jan 2023 16:09:18 -0700 Subject: [PATCH 095/233] Non-dynamic info --- core/activitypub/actor.js | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 13d53dff8..f9079eb04 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -19,6 +19,7 @@ const ActivityPubSettings = require('./settings'); const ActivityPubObject = require('./object'); const { ActivityStreamMediaType } = require('./const'); const apDb = require('../database').dbs.activitypub; +const Config = require('../config').get; // deps const _ = require('lodash'); @@ -100,8 +101,8 @@ module.exports = class Actor extends ActivityPubObject { ActivityStreamsContext, 'https://w3id.org/security/v1', // :TODO: add support { - bbsPublicStats: { - '@id': 'bbs:bbsPublicStats', + bbsInfo: { + '@id': 'bbs:bbsInfo', '@type': '@id', }, }, @@ -131,24 +132,9 @@ module.exports = class Actor extends ActivityPubObject { // value: 'Mateo@21:1/121', // }, // ], - bbsPublicStats: { - affiliations: user.getProperty(UserProps.Affiliations) || '', - lastLogin: user.getProperty(UserProps.LastLoginTs), - loginCount: user.getPropertyAsNumber(UserProps.LoginCount), - joined: user.getProperty(UserProps.AccountCreated), - postCount: user.getPropertyAsNumber(UserProps.MessagePostCount), - doorCount: user.getPropertyAsNumber(UserProps.DoorRunTotalCount), - doorMinute: user.getPropertyAsNumber(UserProps.DoorRunTotalMinutes), - achievementCount: user.getPropertyAsNumber( - UserProps.AchievementTotalCount - ), - achievementPoints: user.getPropertyAsNumber( - UserProps.AchievementTotalPoints - ), - uploadCount: user.getPropertyAsNumber(UserProps.FileUlTotalCount), - downloadCount: user.getPropertyAsNumber(UserProps.FileDlTotalCount), - uploadBytes: user.getPropertyAsNumber(UserProps.FileUlTotalBytes), - downloadBytes: user.getPropertyAsNumber(UserProps.FileDlTotalBytes), + bbsInfo: { + boardName: Config().general.boardName, + memberSince: user.getProperty(UserProps.AccountCreated), }, }; From a829905c6319cb927bc912adaa5b19cfc13b2ef9 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 30 Jan 2023 22:13:38 -0700 Subject: [PATCH 096/233] New convienience functions on toggle menus, allow paths in sys module search --- core/activitypub/actor.js | 1 + core/asset.js | 2 +- core/toggle_menu_view.js | 22 ++++++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index f9079eb04..efe8c4b9e 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -135,6 +135,7 @@ module.exports = class Actor extends ActivityPubObject { bbsInfo: { boardName: Config().general.boardName, memberSince: user.getProperty(UserProps.AccountCreated), + affiliations: user.getProperty(UserProps.Affiliations) || '', }, }; diff --git a/core/asset.js b/core/asset.js index 21cd19252..71acae733 100644 --- a/core/asset.js +++ b/core/asset.js @@ -30,7 +30,7 @@ const ALL_ASSETS = [ ]; const ASSET_RE = new RegExp( - '^@(' + ALL_ASSETS.join('|') + ')' + /:(?:([^:]+):)?([A-Za-z0-9_\-.]+)$/.source + '^@(' + ALL_ASSETS.join('|') + ')' + /:(?:([^:]+):)?([A-Za-z0-9_\-./]+)$/.source ); function parseAsset(s) { diff --git a/core/toggle_menu_view.js b/core/toggle_menu_view.js index 280056c61..ad0961528 100644 --- a/core/toggle_menu_view.js +++ b/core/toggle_menu_view.js @@ -77,6 +77,28 @@ ToggleMenuView.prototype.setFocusItemIndex = function (index) { this.updateSelection(); }; +ToggleMenuView.prototype.setTrue = function () { + this.setFocusItemIndex(0); + this.updateSelection(); +}; + +ToggleMenuView.prototype.setFalse = function () { + this.setFocusItemIndex(1); + this.updateSelection(); +}; + +ToggleMenuView.prototype.setFromBoolean = function (bool) { + return bool ? this.setTrue() : this.setFalse(); +}; + +ToggleMenuView.prototype.setYes = function () { + return this.setTrue(); +}; + +ToggleMenuView.prototype.setNo = function () { + return this.setFalse(); +}; + ToggleMenuView.prototype.setFocus = function (focused) { ToggleMenuView.super_.prototype.setFocus.call(this, focused); From 98d37e9564b8d10e5826431fe1b681d73ac135fa Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Tue, 31 Jan 2023 20:06:07 -0700 Subject: [PATCH 097/233] Fix various Content-Lenght's --- core/http_util.js | 2 +- core/servers/content/web_handlers/activitypub.js | 6 +++--- core/servers/content/web_handlers/nodeinfo2.js | 2 +- core/servers/content/web_handlers/webfinger.js | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/core/http_util.js b/core/http_util.js index 249df24bf..ceb4ee1b7 100644 --- a/core/http_util.js +++ b/core/http_util.js @@ -46,7 +46,7 @@ function postJson(url, json, options, cb) { function _makeRequest(url, options, cb) { if (options.body) { - options.headers['Content-Length'] = options.body.length; + options.headers['Content-Length'] = Buffer(options.body).length; if (options?.sign?.headers?.includes('digest')) { options.headers['Digest'] = diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 386a7bac1..f5d33301a 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -415,7 +415,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { const body = JSON.stringify(collection); const headers = { 'Content-Type': ActivityStreamMediaType, - 'Content-Length': body.length, + 'Content-Length': Buffer(body).length, }; resp.writeHead(200, headers); @@ -715,7 +715,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { const headers = { 'Content-Type': ActivityStreamMediaType, - 'Content-Length': body.length, + 'Content-Length': Buffer(body).length, }; resp.writeHead(200, headers); @@ -746,7 +746,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { const headers = { 'Content-Type': contentType, - 'Content-Length': body.length, + 'Content-Length': Buffer(body).length, }; resp.writeHead(200, headers); diff --git a/core/servers/content/web_handlers/nodeinfo2.js b/core/servers/content/web_handlers/nodeinfo2.js index f5c3cc2ee..e376c75ae 100644 --- a/core/servers/content/web_handlers/nodeinfo2.js +++ b/core/servers/content/web_handlers/nodeinfo2.js @@ -51,7 +51,7 @@ exports.getModule = class NodeInfo2WebHadnler extends WebHandlerModule { const body = JSON.stringify(nodeInfo); const headers = { 'Content-Type': 'application/json', - 'Content-Length': body.length, + 'Content-Length': Buffer(body).length, }; resp.writeHead(200, headers); diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index a101e260c..1f32150a8 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -124,7 +124,7 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { const headers = { 'Content-Type': contentType, - 'Content-Length': body.length, + 'Content-Length': Buffer(body).length, }; resp.writeHead(200, headers); @@ -176,7 +176,7 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { const headers = { 'Content-Type': 'application/jrd+json', - 'Content-Length': body.length, + 'Content-Length': Buffer(body).length, }; resp.writeHead(200, headers); From f8d4f49f7f3e73b8dafeb9198bb32f7b00bc0c53 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Tue, 31 Jan 2023 22:16:19 -0700 Subject: [PATCH 098/233] WIP ActivityPub user config --- art/themes/luciano_blocktronics/theme.hjson | 33 ++++ core/activitypub/settings.js | 11 +- core/activitypub/user_config.js | 161 ++++++++++++++++++++ core/enig_error.js | 2 + core/view.js | 8 + 5 files changed, 214 insertions(+), 1 deletion(-) create mode 100644 core/activitypub/user_config.js diff --git a/art/themes/luciano_blocktronics/theme.hjson b/art/themes/luciano_blocktronics/theme.hjson index 8f6d01d71..4fc408c65 100644 --- a/art/themes/luciano_blocktronics/theme.hjson +++ b/art/themes/luciano_blocktronics/theme.hjson @@ -427,6 +427,39 @@ } } + // :TODO: move this to the right area, rename, etc. + mainMenuActivityPubUserConfig: { + 0: { + mci: { + TM1: { + focusTextStyle: upper + } + TM2: { + focusTextStyle: upper + } + TM3: { + focusTextStyle: upper + } + TM4: { + focusTextStyle: upper + } + TL5: { + width: 70 + } + TL6: { + width: 70 + } + BT7: { + width: 20 + focusTextStyle: upper + } + TM8: { + focusTextStyle: upper + } + } + } + } + mainMenuRumorz: { 0: { mci: { diff --git a/core/activitypub/settings.js b/core/activitypub/settings.js index 3c7cdb952..b7f4e2bd7 100644 --- a/core/activitypub/settings.js +++ b/core/activitypub/settings.js @@ -13,6 +13,7 @@ module.exports = class ActivityPubSettings { // override default with any op config Object.assign(this, Config().users.activityPub); + // finally override with any explicit values given to us if (obj) { Object.assign(this, obj); } @@ -39,7 +40,15 @@ module.exports = class ActivityPubSettings { return user.persistProperty( UserProps.ActivityPubSettings, JSON.stringify(this), - cb + err => { + if (!err) { + // drop from cache + delete user.activityPubSettings; + } + if (cb) { + return cb(err); + } + } ); } }; diff --git a/core/activitypub/user_config.js b/core/activitypub/user_config.js new file mode 100644 index 000000000..a56f29ed5 --- /dev/null +++ b/core/activitypub/user_config.js @@ -0,0 +1,161 @@ +const { MenuModule } = require('../menu_module'); +const ActivityPubSettings = require('./settings'); +const { Errors } = require('../enig_error'); + +// deps +const async = require('async'); +const { get, truncate } = require('lodash'); + +exports.moduleInfo = { + name: 'ActivityPub User Config', + desc: 'ActivityPub User Configuration', + author: 'NuSkooler', +}; + +const FormIds = { + main: 0, + images: 1, +}; + +const MciViewIds = { + main: { + enabledToggle: 1, + manuallyApproveFollowersToggle: 2, + hideSocialGraphToggle: 3, + showRealNameToggle: 4, + image: 5, + icon: 6, + manageImagesButton: 7, + saveOrCancel: 8, + }, +}; + +exports.getModule = class ActivityPubUserConfig extends MenuModule { + constructor(options) { + super(options); + + this.config = Object.assign({}, get(options, 'menuConfig.config'), { + extraArgs: options.extraArgs, + }); + + this.menuMethods = { + submit: (formData, extraArgs, cb) => { + switch (formData.submitId) { + case MciViewIds.main.manageImagesButton: + return this._manageImagesButton(cb); + + case MciViewIds.main.saveOrCancel: { + const save = get(formData, 'value.saveOrCancel') === 0; + return save ? this._save(formData.value, cb) : this.prevMenu(cb); + } + + default: + cb( + Errors.UnexpectedState( + `Unexpected submitId: ${formData.submitId}` + ) + ); + } + }, + }; + } + + initSequence() { + async.series( + [ + callback => { + return this.beforeArt(callback); + }, + callback => { + return this._displayMainPage(false, callback); + }, + ], + () => { + this.finishedLoading(); + } + ); + } + + _manageImagesButton(cb) { + return cb(null); + } + + _save(values, cb) { + const reqFields = [ + 'enabled', + 'manuallyApproveFollowers', + 'hideSocialGraph', + 'showRealName', + ]; + if ( + !reqFields.every(p => { + return true === !![values[p]]; + }) + ) { + return cb(Errors.BadFormData('One or more missing form values')); + } + + const apSettings = ActivityPubSettings.fromUser(this.client.user); + apSettings.enabled = values.enabled; + apSettings.manuallyApproveFollowers = values.manuallyApproveFollowers; + apSettings.hideSocialGraph = values.hideSocialGraph; + apSettings.showRealName = values.showRealName; + + return apSettings.persistToUserProperties(this.client.user, cb); + } + + _displayMainPage(clearScreen, cb) { + async.series( + [ + callback => { + return this.displayArtAndPrepViewController( + 'main', + FormIds.main, + { clearScreen }, + callback + ); + }, + callback => { + return this.validateMCIByViewIds( + 'main', + Object.values(MciViewIds.main), + callback + ); + }, + callback => { + const v = id => this.getView('main', id); + + const enabledToggleView = v(MciViewIds.main.enabledToggle); + const manuallyApproveFollowersToggleView = v( + MciViewIds.main.manuallyApproveFollowersToggle + ); + const hideSocialGraphToggleView = v( + MciViewIds.main.hideSocialGraphToggle + ); + const showRealNameToggleView = v(MciViewIds.main.showRealNameToggle); + const imageView = v(MciViewIds.main.image); + const iconView = v(MciViewIds.main.icon); + + const apSettings = ActivityPubSettings.fromUser(this.client.user); + enabledToggleView.setFromBoolean(apSettings.enabled); + manuallyApproveFollowersToggleView.setFromBoolean( + apSettings.manuallyApproveFollowers + ); + hideSocialGraphToggleView.setFromBoolean(apSettings.hideSocialGraph); + showRealNameToggleView.setFromBoolean(apSettings.showRealName); + imageView.setText( + truncate(apSettings.image, { length: imageView.getWidth() }) + ); + iconView.setText( + truncate(apSettings.icon, { length: iconView.getWidth() }) + ); + + return callback(null); + }, + ], + err => { + return cb(err); + } + ); + } +}; diff --git a/core/enig_error.js b/core/enig_error.js index c396cbe40..0423703a5 100644 --- a/core/enig_error.js +++ b/core/enig_error.js @@ -57,6 +57,8 @@ exports.Errors = { MissingProperty: (reason, reasonCode) => new EnigError('Missing property', -32014, reason, reasonCode), Expired: (reason, reasonCode) => new EnigError('Expired', -32015, reason, reasonCode), + BadFormData: (reason, reasonCode) => + new EnigError('Bad or missing form data', -32016, reason, reasonCode), }; exports.ErrorReasons = { diff --git a/core/view.js b/core/view.js index f568a09af..fe0c4a882 100644 --- a/core/view.js +++ b/core/view.js @@ -127,6 +127,14 @@ View.prototype.getId = function () { return this.id; }; +View.prototype.getWidth = function () { + return this.dimens.width; +}; + +View.prototype.getHeight = function () { + return this.dimens.height; +}; + View.prototype.setPosition = function (pos) { // // Allow the following forms: [row, col], { row : r, col : c }, or (row, col) From 835bfbddb046a60e63fe13be4c8ca3a36d4ceab9 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Tue, 31 Jan 2023 22:19:27 -0700 Subject: [PATCH 099/233] Return to prev on save --- core/activitypub/user_config.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/core/activitypub/user_config.js b/core/activitypub/user_config.js index a56f29ed5..895253878 100644 --- a/core/activitypub/user_config.js +++ b/core/activitypub/user_config.js @@ -101,7 +101,16 @@ exports.getModule = class ActivityPubUserConfig extends MenuModule { apSettings.hideSocialGraph = values.hideSocialGraph; apSettings.showRealName = values.showRealName; - return apSettings.persistToUserProperties(this.client.user, cb); + apSettings.persistToUserProperties(this.client.user, err => { + if (err) { + const user = this.client.user; + this.client.log.warn( + { error: err.message, user: user.username }, + `Failed saving ActivityPub settings for user "${user.username}"` + ); + } + return this.prevMenu(cb); + }); } _displayMainPage(clearScreen, cb) { From 45deef3f036b38b61948e362c052680d090df725 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Tue, 31 Jan 2023 23:13:21 -0700 Subject: [PATCH 100/233] Placeholder art --- .../activitypub_user_config_main.ans | Bin 0 -> 3157 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 art/themes/luciano_blocktronics/activitypub_user_config_main.ans diff --git a/art/themes/luciano_blocktronics/activitypub_user_config_main.ans b/art/themes/luciano_blocktronics/activitypub_user_config_main.ans new file mode 100644 index 0000000000000000000000000000000000000000..4a8b4514fdc8731b2cc547a90f7eb987b0618a8c GIT binary patch literal 3157 zcmcgu+fLg+5Dk5#KTwsIeL-ra3ONZ)D)N*>DUDQG)C8o8Cld@r_1Y*GD1U|c9b57T z^dG98nVntR!O%!W^+V#_ojG&PnX!|t6Hjld^0jr+Z0R&jvAcCr?=%}&C|+W{+t5jZ zFGS$e(-h-%D8a;b=p>~;kGA+I15_gC+Q6EWgbJtb1mVEL1t?Co)EL@B;bL;39;&r* zip$ic^0dLLjPPhFXC$S9v!oQn*_6zN1A*-57%(FZXKqgjuot4lSx6qhSYYxuVpwMr zE>TI>1(BMiSyEM&MREdpE`+!hmMz1g37Hekanvdp?R)?@g2)pjI#i01Eqsv%4g(ge zO~{H|t_gX{OKE|T3eD&R5Fk2%z+AP6MtfnCtCjIZ39BWo#`}9qfmJxlrZqOtc_D1X z8Pe|L;@*TA&C=V|+QtNnTQrVOKwmQ2n%l?SRcW!mMhy&5JP4)`8iUDzDi&6Ln80R$G{jCmYnsxgeXik46tq%wuNnJAzYAk4T}y9}UU(W6gjJejNn zc`(ULK1-%ro6H+EQw#wn58s8yI-?QE3JRbFu-IMQOL>|eY-iMj5(4NEL~e=@zzCvr zMsKD9EAuq6APzk(d)Lxxdwfu*J&c~YT}wbU1M10hUGyB}lU~qv z;73b83~!Zxbv28x19cvUVSE$J=0Zx5HWt=kVQmtI+iJK^)3ZR0;>pwx)&9)Cy37R# zo`Y-VaJUtpBRbKnTP1u%_V z5>j?^8n|7nU8uqsW?)L_|GE(5m06@Wizpjv|01vitWELxB8b#-9-JwEu6%XsPkvm? z;$?&xXQph_dfdtkIA?qO`TeG?X{Zq&^k+DUBYun?93!W-UcslMR_Ms`Kfe_5F!#o7 zs!h)|->x?(Wo>L3M(%?};#-SUl2&*zuRE0GT92)&tMCsWe*5qXME}YxrN=<3_XQdl zfHR2v+IcpF literal 0 HcmV?d00001 From 1d1bf68f0d269315e8fc79c9545854f68ed41f26 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Wed, 1 Feb 2023 18:26:33 -0600 Subject: [PATCH 101/233] Added warning to make finding misconfigurations easier --- core/menu_module.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core/menu_module.js b/core/menu_module.js index 335c6e43a..08757c9f3 100644 --- a/core/menu_module.js +++ b/core/menu_module.js @@ -632,6 +632,14 @@ exports.MenuModule = class MenuModule extends PluginModule { this.client.term.rawWrite(ansi.resetScreen()); } + if (!_.has(config.art, name)) { + const artKeys = _.keys(config.art); + this.client.log.warn( + { requestedArtName: name, availableArtKeys: artKeys }, + 'Art name is not set! Check configuration for typos.' + ); + } + theme.displayThemedAsset( config.art[name], this.client, From 3be14ec94b190a9d399379a4157784c6a79e0b96 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Wed, 1 Feb 2023 21:50:32 -0600 Subject: [PATCH 102/233] Start of an actor search screen, finally --- .../activitypub_actor_search_main.ans | Bin 0 -> 2823 bytes .../activitypub_actor_view.ans | Bin 0 -> 2840 bytes art/themes/luciano_blocktronics/theme.hjson | 29 ++++ core/activitypub/actor_search.js | 161 ++++++++++++++++++ 4 files changed, 190 insertions(+) create mode 100644 art/themes/luciano_blocktronics/activitypub_actor_search_main.ans create mode 100644 art/themes/luciano_blocktronics/activitypub_actor_view.ans create mode 100644 core/activitypub/actor_search.js diff --git a/art/themes/luciano_blocktronics/activitypub_actor_search_main.ans b/art/themes/luciano_blocktronics/activitypub_actor_search_main.ans new file mode 100644 index 0000000000000000000000000000000000000000..802ea16dc27e91e9d7e2d9a68db3bf556777dc45 GIT binary patch literal 2823 zcmcgs!EVz)5KTGe3lO>Z()-3isnncI6af+yC`o(Csfvm?u!&UQz{l_pRe#5p_D>M+ z&CG7rX&@0Y_+Wc?X5P$uGrNP8^Zlaz3|6DDZ<+?XgVk^{DzPYJiS^6U*EK%yz}tEH zxCsN)cS1`;N5?HO1whqi_X?{aH4`_<0(aoy0h9#C(gfNeaUPuIL$(W8@n~MA=Z35T z@whY_sT`=;LNanOBt&;0P>zX$DK*&Ao)sWk7?UI+HGr_dlrMaQ=Ljk>W$J=a4Na&I zr4^DAK+UZnX+^A7V9|t-NQ)m^1)-A;0EZJbL103qmu=xg4&nwZVOvv*9bI+#la|&3 zr3%jI1rR{G2EiR`BaQY#rj#ql!+`yik>lfIEJ0YLlC?E4E@@%am@?#^=;B}9l(Y4A zKevhyadY9sg7Pim!b|(4yG4`tSJ^;-LIyz-p)r^Yuo7bJ!$irY6NE;Q4-ZkGSV!U) z4Ir4osd(a~*#yQ^MN8NQ%S_ia6B$|tq2m(eQb5Dv(I=WrrZ7PqMAFF@%FNZ5x{?r*D#RSM{-KbR7I_F(qN=FC)hKcC)_woCE!?CJJ#Z z&FS_eb4y>n2xUkXcenTJPsPXWeNnBy;(a}TXYdw#DH@G=DPfY%XUicB_C2Z8!!=O- zt{zVOZl*)i=N+cfkNx@bs$>Z`8Ty;Mc2xm!bcVY`1O*&l=R^B==%MQ-kwN$OQni=e zq#{b2P+b1M^WGJcCs)ZoIktOQ-MMU><7Vo_aBXU?5~S#7qP n?|%F3%Mstwl_OWW;g5c=cXsxn_q-?1v$wCViksJ!uG0G#vi#)8 literal 0 HcmV?d00001 diff --git a/art/themes/luciano_blocktronics/activitypub_actor_view.ans b/art/themes/luciano_blocktronics/activitypub_actor_view.ans new file mode 100644 index 0000000000000000000000000000000000000000..45e18bfc7487dabd0c40fa4064b995373667d9e2 GIT binary patch literal 2840 zcmcguO=}x55OsR=FDUh8FS*O>vWEDycHLq~+fdtq;8R*c4~=YS$f19#g#4Wq=%19n z`H-x2I`H*dhT|APP(vyK# zp73a?dqgEuvxX$(LWmFUKp;6r0w&b37j0SqYoSb{grot41t!1Y!#oF2iBiTcC{^!# zlS|7aIe;|Rg18l-T82dvd?d|&)G7!abpSY=ND~A`RPs_2Uc`ajfW>SZl446&T>hk` zwm_(YGkO68kZwS5%UVgJy^ty9^88T1Zpy&%{yvnzEMm#hnh+PY&}vi};vVVZTik@R z_I5Y7h!Aj7;dlq-YsAoU`?$M>OZzKqAV9%`Ac@czOa@pnvG!pi$+;5*jUw;vfQpd}D8E7RHgkT@>RB;EN17k#l_ijT;TiTr{c|YQO{22R3DLm@0LWSI2i~#olnTy z*prar>!$d8`Q=*@yss)wm4QCY6oqanELS0q$@1pv`})#eW#BdTgjK4T|Ii*UPWu_( zoGG6>>R#Emx7XLjhivkFxl7&1<;&RUFl@)&yDqLb{AD~3Hp%QB9G(lz3nzyy=l^`0 zm#Vum_{QqGy?j3GzKAxVkmWz0^U5BN7XvB=6dg2;#F)x2I#rp7!$gL=JL|FE0en@4<0Qw~gN`aip!&e73X=VgbV P7qjvE;{07LtN8mHY4_}2 literal 0 HcmV?d00001 diff --git a/art/themes/luciano_blocktronics/theme.hjson b/art/themes/luciano_blocktronics/theme.hjson index 4fc408c65..b83ce01da 100644 --- a/art/themes/luciano_blocktronics/theme.hjson +++ b/art/themes/luciano_blocktronics/theme.hjson @@ -460,6 +460,35 @@ } } + // :TODO: move this to the right area, rename, etc. + mainMenuActivityPubActorSearch: { + 0: { + mci: { + TL1: { + width: 70 + } + BT2: { + width: 20 + focusTextStyle: upper + } + } + } + 1: { + mci: { + TL1: { + width: 70 + } + TL2: { + width: 70 + } + BT3: { + width: 20 + focusTextStyle: upper + } + } + } + } + mainMenuRumorz: { 0: { mci: { diff --git a/core/activitypub/actor_search.js b/core/activitypub/actor_search.js new file mode 100644 index 000000000..41fe76e70 --- /dev/null +++ b/core/activitypub/actor_search.js @@ -0,0 +1,161 @@ +const { MenuModule } = require('../menu_module'); +const { Errors } = require('../enig_error'); +const Actor = require('../activitypub/actor'); + +// deps +const async = require('async'); +const { get, truncate } = require('lodash'); + +exports.moduleInfo = { + name: 'ActivityPub Actor Search', + desc: 'Menu item to search for an ActivityPub actor', + author: 'CognitiveGears', +}; + +const FormIds = { + main: 0, + view: 1, +}; + +const MciViewIds = { + main: { + searchUrl: 1, + searchOrCancel: 2, + }, + view: { + userName: 1, + fullName: 2, + }, +}; + +exports.getModule = class ActivityPubActorSearch extends MenuModule { + constructor(options) { + super(options); + + this.config = Object.assign({}, get(options, 'menuConfig.config'), { + extraArgs: options.extraArgs, + }); + + this.menuMethods = { + submit: (formData, extraArgs, cb) => { + switch (formData.submitId) { + case MciViewIds.main.searchUrl: { + return this._search(formData.value, cb); + } + case MciViewIds.main.searchOrCancel: { + const search = get(formData, 'value.searchOrCancel') === 0; + return search + ? this._search(formData.value, cb) + : this.prevMenu(cb); + } + + default: + cb( + Errors.UnexpectedState( + `Unexpected submitId: ${formData.submitId}` + ) + ); + } + }, + }; + } + + initSequence() { + async.series( + [ + callback => { + return this.beforeArt(callback); + }, + callback => { + return this._displayMainPage(false, callback); + }, + ], + () => { + this.finishedLoading(); + } + ); + } + + _search(values, cb) { + const searchString = values['searchUrl'].trim(); + //TODO: Handle empty searchString + Actor.fromId(searchString, (err, remoteActor) => { + if (err) { + this.client.log.warn( + { remoteActor: remoteActor, err: err }, + 'Failure to search for actor' + ); + // TODO: Add error to page for failure to find actor + return this._displayMainPage(true, cb); + } + return this._displayListScreen(remoteActor, cb); + }); + } + + _displayListScreen(remoteActor, cb) { + async.series( + [ + callback => { + return this.displayArtAndPrepViewController( + 'view', + FormIds.view, + { clearScreen: true }, + callback + ); + }, + callback => { + return this.validateMCIByViewIds( + 'view', + Object.values(MciViewIds.view), + callback + ); + }, + callback => { + const v = id => this.getView('view', id); + + const nameView = v(MciViewIds.view.userName); + nameView.setText( + truncate(remoteActor.preferredUsername, { + length: nameView.getWidth(), + }) + ); + + // TODO: FIXME: fullNameView.getWidth() is 0 - I'm thinking it's getting form 0 for some reason + const fullNameView = v(MciViewIds.view.fullName); + fullNameView.setText( + truncate(remoteActor.name, { length: fullNameView.getWidth() }) + ); + return callback(null); + }, + ], + err => { + return cb(err); + } + ); + } + + _displayMainPage(clearScreen, cb) { + async.series( + [ + callback => { + return this.displayArtAndPrepViewController( + 'main', + FormIds.main, + { clearScreen }, + callback + ); + }, + callback => { + return this.validateMCIByViewIds( + 'main', + Object.values(MciViewIds.main), + callback + ); + }, + ], + err => { + return cb(err); + } + ); + } +}; From eb9d9055e9ac46d74721cd3dc92d5f5d705aaf90 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 1 Feb 2023 21:59:55 -0700 Subject: [PATCH 103/233] Allow itemFormat/focusItem format on TextViews/Buttons/... --- core/text_view.js | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/core/text_view.js b/core/text_view.js index 770a279fc..24865df4d 100644 --- a/core/text_view.js +++ b/core/text_view.js @@ -54,13 +54,28 @@ function TextView(options) { // |ABCDEFG| ^_ this.text.length // ^-- this.dimens.width // - let renderLength = renderStringLength(s); // initial; may be adjusted below: - - let textToDraw = _.isString(this.textMaskChar) - ? new Array(renderLength + 1).join(this.textMaskChar) - : stylizeString(s, this.hasFocus ? this.focusTextStyle : this.textStyle); + let textToDraw; + if (this.itemFormat) { + textToDraw = pipeToAnsi( + stringFormat( + this.hasFocus && this.focusItemFormat + ? this.focusItemFormat + : this.itemFormat, + { + text: stylizeString( + s, + this.hasFocus ? this.focusTextStyle : this.textStyle + ), + } + ) + ); + } else { + textToDraw = _.isString(this.textMaskChar) + ? new Array(renderStringLength(s) + 1).join(this.textMaskChar) + : stylizeString(s, this.hasFocus ? this.focusTextStyle : this.textStyle); + } - renderLength = renderStringLength(textToDraw); + const renderLength = renderStringLength(textToDraw); if (renderLength >= this.dimens.width) { if (this.hasFocus) { From 5f53ef9a60882b4c78c74b75ea13ecf44ad2474b Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 1 Feb 2023 22:00:31 -0700 Subject: [PATCH 104/233] itemFormat/focusItemFormat properties in Button --- core/button_view.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/core/button_view.js b/core/button_view.js index 31fb7dc35..bc9e70cf1 100644 --- a/core/button_view.js +++ b/core/button_view.js @@ -5,6 +5,9 @@ const TextView = require('./text_view.js').TextView; const miscUtil = require('./misc_util.js'); const util = require('util'); +// deps +const { isString } = require('lodash'); + exports.ButtonView = ButtonView; function ButtonView(options) { @@ -33,3 +36,18 @@ ButtonView.prototype.onKeyPress = function (ch, key) { ButtonView.prototype.getData = function () { return this.submitData || null; }; + +ButtonView.prototype.setPropertyValue = function (propName, value) { + switch (propName) { + case 'itemFormat': + case 'focusItemFormat': + if (isString(value)) { + this[propName] = value; + } + break; + default: + break; + } + + ButtonView.super_.prototype.setPropertyValue.call(this, propName, value); +}; From b94fa6addd97f8e91314a63fd289a73cc49b0827 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 1 Feb 2023 22:00:45 -0700 Subject: [PATCH 105/233] WIP theme update --- .../activitypub_user_config_main.ans | Bin 3157 -> 3171 bytes art/themes/luciano_blocktronics/theme.hjson | 14 ++++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/art/themes/luciano_blocktronics/activitypub_user_config_main.ans b/art/themes/luciano_blocktronics/activitypub_user_config_main.ans index 4a8b4514fdc8731b2cc547a90f7eb987b0618a8c..a0d31ac370c603aa610cbdd72609824a3b2a8a4c 100644 GIT binary patch delta 46 zcmcaA@mOMmIwx~zkk4c_&WK5ze3K_|YH%t@M;n{v0tGj3=B#95F)}dxIoW_m6#z`P B4XgkF delta 36 scmaDXaaCf2I_G3<&hW_wtSpl_`6f@`)YyECvxJGo(Ae Date: Wed, 1 Feb 2023 23:02:33 -0700 Subject: [PATCH 106/233] Split out web logging to it's own logger/files/configuration --- core/config_default.js | 11 +++++++ core/logger.js | 16 ++++++---- core/servers/content/web.js | 6 ++-- .../servers/content/web_handlers/nodeinfo2.js | 2 +- core/web_log.js | 29 +++++++++++++++++++ 5 files changed, 56 insertions(+), 8 deletions(-) create mode 100644 core/web_log.js diff --git a/core/config_default.js b/core/config_default.js index e2752603c..87b586c2b 100644 --- a/core/config_default.js +++ b/core/config_default.js @@ -302,6 +302,17 @@ module.exports = () => { staticRoot: paths.join(__dirname, './../www'), + // Logging block works the same way the system logger does + logging: { + rotatingFile: { + level: 'info', + type: 'rotating-file', + fileName: 'enigma-bbs.web.log', + period: '1d', + count: 3, + }, + }, + handlers: { systemGeneral: { enabled: true, diff --git a/core/logger.js b/core/logger.js index a78066838..37f4f3190 100644 --- a/core/logger.js +++ b/core/logger.js @@ -27,6 +27,16 @@ module.exports = class Log { logStreams.push(Config.logging.rotatingFile); } + const serializers = Log.standardSerializers(); + + this.log = bunyan.createLogger({ + name: 'ENiGMA½ BBS', + streams: logStreams, + serializers: serializers, + }); + } + + static standardSerializers() { const serializers = { err: bunyan.stdSerializers.err, // handle 'err' fields with stack/etc. }; @@ -36,11 +46,7 @@ module.exports = class Log { serializers[keyName] = fd => Log.hideSensitive(fd); }); - this.log = bunyan.createLogger({ - name: 'ENiGMA½ BBS', - streams: logStreams, - serializers: serializers, - }); + return serializers; } static checkLogPath(logPath) { diff --git a/core/servers/content/web.js b/core/servers/content/web.js index 713b7a4ad..8042ec474 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -15,6 +15,7 @@ const paths = require('path'); const mimeTypes = require('mime-types'); const forEachSeries = require('async/forEachSeries'); const findSeries = require('async/findSeries'); +const WebLog = require('../../web_log.js'); const ModuleInfo = (exports.moduleInfo = { name: 'Web', @@ -74,7 +75,8 @@ exports.getModule = class WebServerModule extends ServerModule { constructor() { super(); - this.log = Log.child({ server: 'Web' }); + //this.log = Log.child({ server: 'Web' }); + this.log = WebLog.createWebLog(); const config = Config(); this.enableHttp = config.contentServers.web.http.enabled || false; @@ -276,7 +278,7 @@ exports.getModule = class WebServerModule extends ServerModule { } routeRequest(req, resp) { - this.log.trace({ url: req.url, method: req.method }, 'Request'); + this.log.trace({ req }, 'Request'); let route = _.find(this.routes, r => r.matchesRequest(req)); diff --git a/core/servers/content/web_handlers/nodeinfo2.js b/core/servers/content/web_handlers/nodeinfo2.js index e376c75ae..4be7f85c9 100644 --- a/core/servers/content/web_handlers/nodeinfo2.js +++ b/core/servers/content/web_handlers/nodeinfo2.js @@ -45,7 +45,7 @@ exports.getModule = class NodeInfo2WebHadnler extends WebHandlerModule { } _nodeInfo2Handler(req, resp) { - this.log.info({ url: req.url }, 'Serving NodeInfo2 request'); + this.log.info('Serving NodeInfo2 request'); this._getNodeInfo(nodeInfo => { const body = JSON.stringify(nodeInfo); diff --git a/core/web_log.js b/core/web_log.js new file mode 100644 index 000000000..d463a3246 --- /dev/null +++ b/core/web_log.js @@ -0,0 +1,29 @@ +const Logger = require('./logger'); +const Config = require('./config').get; + +// deps +const paths = require('path'); +const bunyan = require('bunyan'); +const { get } = require('lodash'); + +module.exports = class WebLog { + static createWebLog() { + const config = Config(); + const logPath = config.paths.logs; + const rotatingFile = get(config, 'contentServers.web.logging.rotatingFile'); + + rotatingFile.path = paths.join(logPath, rotatingFile.fileName); + + const serializers = Logger.standardSerializers(); + serializers.req = bunyan.stdSerializers.req; + serializers.res = bunyan.stdSerializers.res; + + const webLog = bunyan.createLogger({ + name: 'ENiGMA½ BBS[Web]', + streams: [rotatingFile], + serializers, + }); + + return webLog; + } +}; From 5cfacf4ff08fc71c3ea24ddf876d6fb89c774f12 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 1 Feb 2023 23:06:38 -0700 Subject: [PATCH 107/233] Update WHATSNEW --- WHATSNEW.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/WHATSNEW.md b/WHATSNEW.md index b038751e6..f85f3a886 100644 --- a/WHATSNEW.md +++ b/WHATSNEW.md @@ -2,12 +2,14 @@ This document attempts to track **major** changes and additions in ENiGMA½. For details, see GitHub. ## 0.0.14-beta -* The [Web Server](/docs/_docs/servers/contentservers/web-server.md) has made some possibly breaking changes: +* [Web Server](/docs/_docs/servers/contentservers/web-server.md) has made many changes, **some possibly breaking**: * `/static/` prefixes are no longer required. This was a ugly hack. * Some internal routes such as those used for password resets live within `/_enig/`. * Routes for the file base now default to `/_f/` prefixed instead of just `/f/`. If `/f/` is in your `config.hjson` you are encouraged to update it! * Finally, the system will search for `index.html` and `index.htm` in that order, if another suitable route cannot be established. -* [WebFinger](/docs/_docs/servers/contentservers/webfinger-handler.md) support. + * Web activity now has it's own logging configuration under `contentHandlers.web.logging`; The format is the same as the systems standard logging and defaults to a `enigma-bbs.web.log` rotating file at `info` level. + * Smaller [Web Handler](/docs/_docs/servers/contentservers/web-handlers.md) modules are now easy to add, a number of which exist by default. + * [WebFinger](/docs/_docs/servers/contentservers/webfinger-handler.md) support (Web Handler) * New users now have randomly generated avatars assigned to them that can be served up via the new System General [Web Handler](/docs/_docs/servers/contentservers/web-handlers.md). * CombatNet has shut down, so the module (`combatnet.js`) has been removed. * New `NewUserPrePersist` system event available to developers to 'hook' account creation and add their own properties/etc. From 95250d23f29dff48d03e9e56e2914ac9788e0d41 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Fri, 3 Feb 2023 15:21:19 -0600 Subject: [PATCH 108/233] Added additional fields and some cleanup --- .../activitypub_actor_view.ans | Bin 2840 -> 3326 bytes art/themes/luciano_blocktronics/theme.hjson | 24 +++++++++++- core/activitypub/actor_search.js | 35 +++++++++++++++++- 3 files changed, 55 insertions(+), 4 deletions(-) diff --git a/art/themes/luciano_blocktronics/activitypub_actor_view.ans b/art/themes/luciano_blocktronics/activitypub_actor_view.ans index 45e18bfc7487dabd0c40fa4064b995373667d9e2..d54ec77325c443b6f31e006657769980e5c88994 100644 GIT binary patch delta 698 zcmbOs_D^!dEVju8tQ?c;x!5PmvI|b$#HIjdOL6c|{=lY&Bxf->mR&$xK|wm&z}na> z*CnweRUx1>DJQcyBQ<5RBC9CO3{zt+>1ac1V}o3U`*+~#eG~Ia6LWGZ6&wo+it@`+ zixu4Rb8_;_Q;UkFqm9jTC-bo@WSSs!D!_HZ)d8&r8*2r10+0{Xs2bv93S^k&0(F1^ zM15vnI>-d<8q9$11^JUh9B5Q77g!tEjNsDT+{B_vtH~Q!Wr2RzfQE%|J=DruN2mez zgB=cY-Tgagj@S(Gmv4wU(EYipAbPSOn}ZVAg%C+DRLvlt0z+Uk)Y-ZuDCI^nb#g6- zc;xNdAm>0$JU|Wa9=Qqj(Bwo`1wpf1Ri_XOP`sExn3DzA6h**p07_UQBrJgv^5Edt X=Hj2s#}+=)$)cd3aA$(Z Date: Fri, 3 Feb 2023 15:14:27 -0700 Subject: [PATCH 109/233] Add attachment information to messages, fix duplicate handling to respond properly --- core/activitypub/collection.js | 20 +++-- core/activitypub/note.js | 81 ++++++++++++++++--- core/activitypub/util.js | 5 +- core/enig_error.js | 2 + core/scanner_tossers/activitypub.js | 14 +++- .../content/web_handlers/activitypub.js | 42 +++++----- 6 files changed, 123 insertions(+), 41 deletions(-) diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index fb5488a65..493eec143 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -38,7 +38,7 @@ module.exports = class Collection extends ActivityPubObject { ); } - static addFollower(owningUser, followingActor, webServer, cb) { + static addFollower(owningUser, followingActor, webServer, ignoreDupes, cb) { const collectionId = makeUserUrl(webServer, owningUser, '/ap/collections/') + '/followers'; return Collection.addToCollection( @@ -48,11 +48,12 @@ module.exports = class Collection extends ActivityPubObject { followingActor.id, followingActor, false, + ignoreDupes, cb ); } - static addFollowRequest(owningUser, requestingActor, webServer, cb) { + static addFollowRequest(owningUser, requestingActor, webServer, ignoreDupes, cb) { const collectionId = makeUserUrl(webServer, owningUser, '/ap/collections/') + '/follow-requests'; return Collection.addToCollection( @@ -62,6 +63,7 @@ module.exports = class Collection extends ActivityPubObject { requestingActor.id, requestingActor, true, + ignoreDupes, cb ); } @@ -70,7 +72,7 @@ module.exports = class Collection extends ActivityPubObject { return Collection.publicOrderedById('outbox', collectionId, page, null, cb); } - static addOutboxItem(owningUser, outboxItem, isPrivate, webServer, cb) { + static addOutboxItem(owningUser, outboxItem, isPrivate, webServer, ignoreDupes, cb) { const collectionId = makeUserUrl(webServer, owningUser, '/ap/collections/') + '/outbox'; return Collection.addToCollection( @@ -80,11 +82,12 @@ module.exports = class Collection extends ActivityPubObject { outboxItem.id, outboxItem, isPrivate, + ignoreDupes, cb ); } - static addInboxItem(inboxItem, owningUser, webServer, cb) { + static addInboxItem(inboxItem, owningUser, webServer, ignoreDupes, cb) { const collectionId = makeUserUrl(webServer, owningUser, '/ap/collections/') + '/inbox'; return Collection.addToCollection( @@ -94,11 +97,12 @@ module.exports = class Collection extends ActivityPubObject { inboxItem.id, inboxItem, true, + ignoreDupes, cb ); } - static addPublicInboxItem(inboxItem, cb) { + static addPublicInboxItem(inboxItem, ignoreDupes, cb) { return Collection.addToCollection( 'publicInbox', null, // N/A @@ -106,6 +110,7 @@ module.exports = class Collection extends ActivityPubObject { inboxItem.id, inboxItem, false, + ignoreDupes, cb ); } @@ -325,6 +330,7 @@ module.exports = class Collection extends ActivityPubObject { objectId, obj, isPrivate, + ignoreDupes, cb ) { if (!isString(obj)) { @@ -361,8 +367,8 @@ module.exports = class Collection extends ActivityPubObject { ], function res(err) { // non-arrow for 'this' scope - if (err) { - if ('SQLITE_CONSTRAINT' === err.code) { + if (err && 'SQLITE_CONSTRAINT' === err.code) { + if (ignoreDupes) { err = null; // ignore } return cb(err); diff --git a/core/activitypub/note.js b/core/activitypub/note.js index a2f658faa..6b86e37a2 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -172,17 +172,54 @@ module.exports = class Note extends ActivityPubObject { // :TODO: it would be better to do some basic HTML to ANSI or pipe codes perhaps message.message = htmlToMessageBody(this.content); + message.subject = this._getSubject(message); - // If the summary is not present, build one using the message itself; - // finally, default to a static subject so there is *something* if - // all else fails. - if (this.summary) { - message.subject = this.summary; - } else { - let subject = message.message.replace(`@${message.toUserName} `, ''); - subject = truncate(subject, { length: 32, omission: '...' }); - subject = subject || APDefaultSummary; - message.subject = subject; + // List all attachments + if (Array.isArray(this.attachment) && this.attachment.length > 0) { + let attachmentInfoLines = ['--[Attachments]--']; + // https://socialhub.activitypub.rocks/t/representing-images/624 + this.attachment.forEach(att => { + switch (att.mediaType) { + case 'image/avif': + case 'image/apng': + case 'image/png': + case 'image/x-png': + case 'image/jpeg': + case 'image/gif': + case 'image/svg+xml': + case 'image/webp': + { + let imgInfo; + if (att.height && att.width) { + imgInfo = `Image (${att.width} x ${att.height})`; + } else { + imgInfo = 'Image'; + } + attachmentInfoLines.push(imgInfo); + } + break; + + // :TODO: video + + default: + attachmentInfoLines.push(att.mediaType); + } + + if (att.name) { + attachmentInfoLines.push(att.name); + } + + attachmentInfoLines.push(att.url); + attachmentInfoLines.push(''); + attachmentInfoLines.push(''); + }); + + message.message += '\r\n\r\n' + attachmentInfoLines.join('\r\n'); + } + + // If the Note is marked sensitive, prefix the subject + if (this.sensitive) { + message.subject = `[NSFW] ${message.subject}`; } try { @@ -233,4 +270,28 @@ module.exports = class Note extends ActivityPubObject { } }); } + + _getSubject(message) { + if (this.summary) { + return this.summary; + } + + // + // Build a subject from the message itself: + // - First few characters of the message, removing the @username + // prefix, if any + // - Truncate at the first line feed, the end of the message, + // or 32 characters in length, whichever comes first + // - If not end of string, we'll sub in '...' + // + let subject = message.message.replace(`@${message.toUserName} `, '').trim(); + const m = /^(.+)\r?\n/.exec(subject); + if (m && m[1]) { + subject = m[1]; + } + + subject = truncate(subject, { length: 32, omission: '...' }); + subject = subject || APDefaultSummary; + return subject; + } }; diff --git a/core/activitypub/util.js b/core/activitypub/util.js index 7a0f0d8aa..41d47558a 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -211,8 +211,9 @@ function messageBodyToHtml(body) { } function htmlToMessageBody(html) { - //
    ,
    , and
    -> \r\n - html = html.replace(/<\/?br?\/?>/g, '\r\n'); + //
    ,
    , and
    ,
    -> \r\n + //

    -> \r\n + html = html.replace(/(?:<\/?br ?\/?>)|(?:<\/p>)/g, '\r\n'); return striptags(decode(html)); } diff --git a/core/enig_error.js b/core/enig_error.js index 0423703a5..c5e9f0659 100644 --- a/core/enig_error.js +++ b/core/enig_error.js @@ -59,6 +59,8 @@ exports.Errors = { Expired: (reason, reasonCode) => new EnigError('Expired', -32015, reason, reasonCode), BadFormData: (reason, reasonCode) => new EnigError('Bad or missing form data', -32016, reason, reasonCode), + Duplicate: (reason, reasonCode) => + new EnigError('Duplicate', -32017, reason, reasonCode), }; exports.ErrorReasons = { diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index 75a5166da..014222f41 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -100,6 +100,7 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule activity, message.isPrivate(), this._webServer(), + false, // do not ignore dupes (err, localId) => { if (!err) { this.log.debug( @@ -145,11 +146,16 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule }, ], (err, activity) => { + // dupes aren't considered failure if (err) { - this.log.error( - { error: err.message, messageId: message.messageId }, - 'Failed to export message to ActivityPub' - ); + if (err.code === 'SQLITE_CONSTRAINT') { + this.log.debug({ id: activity.id }, 'Ignoring duplicate'); + } else { + this.log.error( + { error: err.message, messageId: message.messageId }, + 'Failed to export message to ActivityPub' + ); + } } else { this.log.info( { id: activity.id }, diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index f5d33301a..94bcc3f1e 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -281,14 +281,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { _sharedInboxCreateActivity(req, resp, activity) { const deliverTo = activity.recipientIds(); - - //Create a method to gather all to, cc, bcc, etc. dests (see spec) -> single array - // loop through, and attempt to fetch user-by-actor id for each; if found, deliver - // --we may need to add properties for ActivityPubFollowersId, ActivityPubFollowingId, etc. - // to user props for quick lookup -> user - // special handling of bcc (remove others before delivery), etc. - // const toActorIds = activity.recipientActorIds() - const createWhat = _.get(activity, 'object.type'); switch (createWhat) { case 'Note': @@ -322,7 +314,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { switch (actorId) { case Collection.PublicCollectionId: // :TODO: we should probably land this in a public areaTag as well for AP; allowing Message objects to be used/etc. - Collection.addPublicInboxItem(note, err => { + Collection.addPublicInboxItem(note, true, err => { return nextActor(err); }); break; @@ -342,7 +334,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } }, err => { - if (err) { + if (err && err.code !== 'SQLITE_CONSTRAINT') { return this.webServer.internalServerError(resp, err); } @@ -357,7 +349,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return cb(null); // not found/etc., just bail } - Collection.addInboxItem(note, localUser, this.webServer, err => { + Collection.addInboxItem(note, localUser, this.webServer, false, err => { if (err) { return cb(err); } @@ -388,6 +380,8 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }, 'Note delivered as message to private mailbox' ); + } else if (err.code === 'SQLITE_CONSTRAINT') { + return cb(null); } return cb(err); }); @@ -517,13 +511,19 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { this._recordAcceptedFollowRequest(localUser, remoteActor, activity); return ok(); } else { - Collection.addFollowRequest(localUser, remoteActor, this.webServer, err => { - if (err) { - return this.internalServerError(resp, err); - } + Collection.addFollowRequest( + localUser, + remoteActor, + this.webServer, + true, // ignore dupes + err => { + if (err) { + return this.internalServerError(resp, err); + } - return ok(); - }); + return ok(); + } + ); } } @@ -631,6 +631,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { localUser, remoteActor, this.webServer, + true, // ignore dupes callback ); }, @@ -706,7 +707,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _selfAsActorHandler(localUser, localActor, req, resp) { - this.log.trace( + this.log.info( { username: localUser.username }, `Serving ActivityPub Actor for "${localUser.username}"` ); @@ -744,6 +745,11 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.resourceNotFound(resp); } + this.log.info( + { username: localUser.username }, + `Serving ActivityPub Profile for "${localUser.username}"` + ); + const headers = { 'Content-Type': contentType, 'Content-Length': Buffer(body).length, From 00e6b41a3e6f513b71a071e69b62d3743a181967 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Fri, 3 Feb 2023 16:14:45 -0600 Subject: [PATCH 110/233] Fixed focus and minor changes --- .../activitypub_actor_search_main.ans | Bin 2823 -> 2834 bytes art/themes/luciano_blocktronics/theme.hjson | 4 +++ core/activitypub/actor_search.js | 23 ++++++++++++------ 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/art/themes/luciano_blocktronics/activitypub_actor_search_main.ans b/art/themes/luciano_blocktronics/activitypub_actor_search_main.ans index 802ea16dc27e91e9d7e2d9a68db3bf556777dc45..711255cc8d3deb85ceff110a695dc422556f5143 100644 GIT binary patch delta 58 zcmZn{n1ac16EJgg1$!|wli}RSZ@E+fNt_Mj diff --git a/art/themes/luciano_blocktronics/theme.hjson b/art/themes/luciano_blocktronics/theme.hjson index ac92d91d3..731a83ee4 100644 --- a/art/themes/luciano_blocktronics/theme.hjson +++ b/art/themes/luciano_blocktronics/theme.hjson @@ -472,6 +472,7 @@ BT2: { width: 20 focusTextStyle: upper + submit: true } } } @@ -496,16 +497,19 @@ width: 4 } MT7: { + focus: true width: 69 height: 3 mode: preview } BT8: { focusTextStyle: upper + submit: true } BT9: { text: back focusTextStyle: upper + submit: true } } } diff --git a/core/activitypub/actor_search.js b/core/activitypub/actor_search.js index b5c28552e..906312119 100644 --- a/core/activitypub/actor_search.js +++ b/core/activitypub/actor_search.js @@ -22,7 +22,7 @@ const FormIds = { const MciViewIds = { main: { searchUrl: 1, - searchOrCancel: 2, + searchButton: 2, }, view: { userName: 1, @@ -51,11 +51,8 @@ exports.getModule = class ActivityPubActorSearch extends MenuModule { case MciViewIds.main.searchUrl: { return this._search(formData.value, cb); } - case MciViewIds.main.searchOrCancel: { - const search = get(formData, 'value.searchOrCancel') === 0; - return search - ? this._search(formData.value, cb) - : this.prevMenu(cb); + case MciViewIds.main.searchButton: { + return this._search(formData.value, cb); } default: @@ -105,11 +102,20 @@ exports.getModule = class ActivityPubActorSearch extends MenuModule { async.series( [ callback => { + if (this.viewControllers.main) { + this.viewControllers.main.setFocus(false); + } + return this.displayArtAndPrepViewController( 'view', FormIds.view, { clearScreen: true }, - callback + (err, artInfo, wasCreated) => { + if (!err && !wasCreated) { + this.viewControllers.view.setFocus(true); + } + return callback(err); + } ); }, callback => { @@ -151,10 +157,11 @@ exports.getModule = class ActivityPubActorSearch extends MenuModule { const summaryView = v(MciViewIds.view.summary); summaryView.setText(htmlToMessageBody(remoteActor.summary)); + summaryView.redraw(); const followButtonView = v(MciViewIds.view.followButton); // TODO: FIXME: Real status - followButtonView.setText('Follow'); + followButtonView.setText('follow'); return callback(null); }, From a8e867a4bb343796416515c0c19d4370875d5b1c Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 4 Feb 2023 11:51:47 -0700 Subject: [PATCH 111/233] Support 'maxLength' property in MLTEV; Enforce this by default, to 500 characters for AP messages. WIP optional subjects, some new configuration --- .../activitypub_user_config_main.ans | Bin 3171 -> 3177 bytes core/activitypub/activity.js | 1 + core/config_default.js | 12 +++++++++ core/fse.js | 21 +++++++++++++--- core/mail_util.js | 23 ++++++++++++++++++ core/multi_line_edit_text_view.js | 20 +++++++++++++++ core/view.js | 2 +- core/wfc.js | 3 ++- 8 files changed, 76 insertions(+), 6 deletions(-) diff --git a/art/themes/luciano_blocktronics/activitypub_user_config_main.ans b/art/themes/luciano_blocktronics/activitypub_user_config_main.ans index a0d31ac370c603aa610cbdd72609824a3b2a8a4c..bd591ead34eb4a3c384ac3200cef33a9c46366ce 100644 GIT binary patch delta 45 zcmaDX@ls;L2{tZcb88c`T-6X?!^w)=>XSIdHuJE*VP-Nm-~64+m66H#|71HJRRB-R B4d4I( delta 24 gcmaDU@mONR3AW9r*$h}V|KoCDWHS6Y*@Z_H0EOELX8-^I diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index 07a25e14b..d5db4112f 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -94,6 +94,7 @@ module.exports = class Activity extends ActivityPubObject { return postJson(actorUrl, activityJson, reqOpts, cb); } + // :TODO: we need dp/support a bit more here... recipientIds() { const ids = []; diff --git a/core/config_default.js b/core/config_default.js index 87b586c2b..a50d78b74 100644 --- a/core/config_default.js +++ b/core/config_default.js @@ -413,6 +413,18 @@ module.exports = () => { }, }, + // General ActivityPub integration configuration + activityPub: { + // Mimics Mastodon max 500 characters for *outgoing* Notes + // (messages destined for ActivityPub); This is a soft limit; + // Implementations including Mastodon should still display + // longer messages, but this keeps us as a "good citizen" + autoSignatures: false, + + // by default, don't include auto-signatures in AP outgoing + maxMessageLength: 500, + }, + infoExtractUtils: { Exiftool2Desc: { cmd: `${__dirname}/../util/exiftool2desc.js`, // ensure chmod +x diff --git a/core/fse.js b/core/fse.js index fd0f6aac4..f7d39d079 100644 --- a/core/fse.js +++ b/core/fse.js @@ -18,6 +18,7 @@ const { stripMciColorCodes, controlCodesToAnsi } = require('./color_codes.js'); const Config = require('./config.js').get; const { getAddressedToInfo, + messageInfoFromAddressedToInfo, setExternalAddressedToInfo, copyExternalAddressedToInfo, } = require('./mail_util.js'); @@ -424,10 +425,15 @@ exports.FullScreenEditorModule = // // Append auto-signature, if enabled for the area & the user has one // - if (false != area.autoSignatures) { - const sig = this.client.user.getProperty(UserProps.AutoSignature); - if (sig) { - messageBody += `\r\n-- \r\n${sig}`; + const msgInfo = messageInfoFromAddressedToInfo( + getAddressedToInfo(headerValues.to) + ); + if (false !== msgInfo.autoSignatures) { + if (false !== area.autoSignatures) { + const sig = this.client.user.getProperty(UserProps.AutoSignature); + if (sig) { + messageBody += `\r\n-- \r\n${sig}`; + } } } @@ -1391,6 +1397,13 @@ exports.FullScreenEditorModule = } switchToBody() { + const to = this.getView('header', MciViewIds.header.to).getData(); + const msgInfo = messageInfoFromAddressedToInfo(getAddressedToInfo(to)); + if (msgInfo.maxMessageLength > 0) { + const bodyView = this.getView('body', MciViewIds.body.message); + bodyView.maxLength = msgInfo.maxMessageLength; + } + this.viewControllers.header.setFocus(false); this.viewControllers.body.switchFocus(1); diff --git a/core/mail_util.js b/core/mail_util.js index 3ab6bb9f6..aba0771fa 100644 --- a/core/mail_util.js +++ b/core/mail_util.js @@ -5,10 +5,15 @@ const EnigmaAssert = require('./enigma_assert.js'); const Address = require('./ftn_address.js'); const MessageConst = require('./message_const'); const { getQuotePrefix } = require('./ftn_util'); +const Config = require('./config').get; + +// deps +const { get } = require('lodash'); exports.getAddressedToInfo = getAddressedToInfo; exports.setExternalAddressedToInfo = setExternalAddressedToInfo; exports.copyExternalAddressedToInfo = copyExternalAddressedToInfo; +exports.messageInfoFromAddressedToInfo = messageInfoFromAddressedToInfo; exports.getQuotePrefixFromName = getQuotePrefixFromName; const EMAIL_REGEX = @@ -148,6 +153,24 @@ function copyExternalAddressedToInfo(fromMessage, toMessage) { toMessage.setExternalFlavor(fromMessage.meta.System[sm.ExternalFlavor]); } +function messageInfoFromAddressedToInfo(addressInfo) { + switch (addressInfo.flavor) { + case MessageConst.AddressFlavor.ActivityPub: { + const config = Config(); + const maxMessageLength = get(config, 'activityPub.maxMessageLength', 500); + const autoSignatures = get(config, 'activityPub.autoSignatures', false); + + // Additionally, it's ot necessary to supply a subject + // (aka summary) with a 'Note' Activity + return { subjectOptional: true, maxMessageLength, autoSignatures }; + } + + default: + // autoSignatures: null = varies by additional config + return { subjectOptional: false, maxMessageLength: 0, autoSignatures: null }; + } +} + function getQuotePrefixFromName(name) { const addrInfo = getAddressedToInfo(name); return getQuotePrefix(addrInfo.name || name); diff --git a/core/multi_line_edit_text_view.js b/core/multi_line_edit_text_view.js index 025f14d47..5fddbb1ba 100644 --- a/core/multi_line_edit_text_view.js +++ b/core/multi_line_edit_text_view.js @@ -113,6 +113,7 @@ function MultiLineEditTextView(options) { this.textLines = []; this.topVisibleIndex = 0; this.mode = options.mode || 'edit'; // edit | preview | read-only + this.maxLength = 0; // no max by default if ('preview' === this.mode) { this.autoScroll = options.autoScroll || true; @@ -317,6 +318,15 @@ function MultiLineEditTextView(options) { return text; }; + this.getCharacterLength = function () { + // :TODO: FSE needs re-write anyway, but this should just be known all the time vs calc. Too much of a mess right now... + let len = 0; + this.textLines.forEach(tl => { + len += tl.text.length; + }); + return len; + }; + this.replaceCharacterInText = function (c, index, col) { self.textLines[index].text = strUtil.replaceAt( self.textLines[index].text, @@ -664,6 +674,10 @@ function MultiLineEditTextView(options) { }; this.keyPressCharacter = function (c) { + if (this.maxLength > 0 && this.getCharacterLength() + 1 >= this.maxLength) { + return; + } + var index = self.getTextLinesIndex(); // @@ -1170,6 +1184,12 @@ MultiLineEditTextView.prototype.setPropertyValue = function (propName, value) { this.specialKeyMap.next = this.specialKeyMap.next || []; this.specialKeyMap.next.push('tab'); break; + + case 'maxLength': + if (_.isNumber(value)) { + this.maxLength = value; + } + break; } MultiLineEditTextView.super_.prototype.setPropertyValue.call(this, propName, value); diff --git a/core/view.js b/core/view.js index fe0c4a882..ed8f08d06 100644 --- a/core/view.js +++ b/core/view.js @@ -150,7 +150,7 @@ View.prototype.setPosition = function (pos) { this.position.col = parseInt(arguments[1], 10); } - // sanatize + // sanitize this.position.row = Math.max(this.position.row, 1); this.position.col = Math.max(this.position.col, 1); this.position.row = Math.min(this.position.row, this.client.term.termHeight); diff --git a/core/wfc.js b/core/wfc.js index 3f1274243..13ef6cde7 100644 --- a/core/wfc.js +++ b/core/wfc.js @@ -226,6 +226,7 @@ exports.getModule = class WaitingForCallerModule extends MenuModule { enter() { this.client.stopIdleMonitor(); this._applyOpVisibility(); + Events.on( Events.getSystemEvents().ClientDisconnected, this._clientDisconnected.bind(this) @@ -240,7 +241,7 @@ exports.getModule = class WaitingForCallerModule extends MenuModule { Events.removeListener( Events.getSystemEvents().ClientDisconnected, - this._clientDisconnected + this._clientDisconnected.bind(this) ); this._restoreOpVisibility(); From b20b6cc5caf116c980100adf25b7e00a2fcaf47f Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 4 Feb 2023 13:44:55 -0700 Subject: [PATCH 112/233] Updates on form validation * Better errors, using enig Errors and ErrorReasons * If subject isn't required, don't enforce it * Allow validator listeners to override error (ie: ignore) --- core/bbs_list.js | 8 +-- core/enig_error.js | 9 +++ core/file_area_filter_edit.js | 5 +- core/fse.js | 31 ++++++--- core/nua.js | 6 +- core/system_view_validate.js | 122 ++++++++++++++++++++++++++-------- core/upload.js | 4 +- core/user_config.js | 5 +- core/view_controller.js | 13 ++-- 9 files changed, 147 insertions(+), 56 deletions(-) diff --git a/core/bbs_list.js b/core/bbs_list.js index f87349fd0..b4e45994e 100644 --- a/core/bbs_list.js +++ b/core/bbs_list.js @@ -80,13 +80,13 @@ exports.getModule = class BBSListModule extends MenuModule { const errMsgView = self.viewControllers.add.getView(MciViewIds.add.Error); if (errMsgView) { if (err) { - errMsgView.setText(err.message); + errMsgView.setText(err.friendlyText); } else { errMsgView.clearText(); } } - return cb(null); + return cb(err, null); }, // @@ -119,7 +119,7 @@ exports.getModule = class BBSListModule extends MenuModule { } self.database.run( - `DELETE FROM bbs_list + `DELETE FROM bbs_list WHERE id=?;`, [entry.id], err => { @@ -162,7 +162,7 @@ exports.getModule = class BBSListModule extends MenuModule { } self.database.run( - `INSERT INTO bbs_list (bbs_name, sysop, telnet, www, location, software, submitter_user_id, notes) + `INSERT INTO bbs_list (bbs_name, sysop, telnet, www, location, software, submitter_user_id, notes) VALUES(?, ?, ?, ?, ?, ?, ?, ?);`, [ formData.value.name, diff --git a/core/enig_error.js b/core/enig_error.js index c5e9f0659..a84c6a306 100644 --- a/core/enig_error.js +++ b/core/enig_error.js @@ -61,6 +61,8 @@ exports.Errors = { new EnigError('Bad or missing form data', -32016, reason, reasonCode), Duplicate: (reason, reasonCode) => new EnigError('Duplicate', -32017, reason, reasonCode), + ValidationFailed: (reason, reasonCode) => + new EnigError('Validation failed', -32018, reason, reasonCode), }; exports.ErrorReasons = { @@ -76,4 +78,11 @@ exports.ErrorReasons = { Locked: 'LOCKED', NotAllowed: 'NOTALLOWED', Invalid2FA: 'INVALID2FA', + + ValueTooShort: 'VALUE_TOO_SHORT', + ValueTooLong: 'VALUE_TOO_LONG', + ValueInvalid: 'VALUE_INVALID', + + NotAvailable: 'NOT_AVAILABLE', + DoesNotExist: 'EEXIST', }; diff --git a/core/file_area_filter_edit.js b/core/file_area_filter_edit.js index 28a8b38d8..9fc1fb016 100644 --- a/core/file_area_filter_edit.js +++ b/core/file_area_filter_edit.js @@ -146,18 +146,17 @@ exports.getModule = class FileAreaFilterEdit extends MenuModule { const errorView = this.viewControllers.editor.getView( MciViewIds.editor.error ); - let newFocusId; if (errorView) { if (err) { - errorView.setText(err.message); + errorView.setText(err.friendlyText); err.view.clearText(); // clear out the invalid data } else { errorView.clearText(); } } - return cb(newFocusId); + return cb(err, null); }, }; } diff --git a/core/fse.js b/core/fse.js index f7d39d079..9a9c1f185 100644 --- a/core/fse.js +++ b/core/fse.js @@ -38,6 +38,7 @@ const fse = require('fs-extra'); const fs = require('graceful-fs'); const paths = require('path'); const sanatizeFilename = require('sanitize-filename'); +const { ErrorReasons } = require('./enig_error.js'); exports.moduleInfo = { name: 'Full Screen Editor (FSE)', @@ -165,23 +166,35 @@ exports.FullScreenEditorModule = // // Validation stuff // - viewValidationListener: function (err, cb) { - var errMsgView = self.viewControllers.header.getView( + viewValidationListener: (err, cb) => { + if ( + err && + err.view.getId() === MciViewIds.header.subject && + err.reasonCode === ErrorReasons.ValueTooShort + ) { + // Ignore validation errors if this is the subject field + // and it's optional + const toView = this.getView('header', MciViewIds.header.to); + const msgInfo = messageInfoFromAddressedToInfo( + getAddressedToInfo(toView.getData()) + ); + if (true === msgInfo.subjectOptional) { + return cb(null, null); + } + } + + const errMsgView = this.viewControllers.header.getView( MciViewIds.header.errorMsg ); - var newFocusViewId; if (errMsgView) { if (err) { - errMsgView.setText(err.message); - - if (MciViewIds.header.subject === err.view.getId()) { - // :TODO: for "area" mode, should probably just bail if this is emtpy (e.g. cancel) - } + errMsgView.setText(err.friendlyText); } else { errMsgView.clearText(); } } - cb(newFocusViewId); + + return cb(err, null); }, headerSubmit: function (formData, extraArgs, cb) { self.switchToBody(); diff --git a/core/nua.js b/core/nua.js index 4f6f355d4..198264f8e 100644 --- a/core/nua.js +++ b/core/nua.js @@ -49,10 +49,10 @@ exports.getModule = class NewUserAppModule extends MenuModule { viewValidationListener: function (err, cb) { const errMsgView = self.viewControllers.menu.getView(MciViewIds.errMsg); - let newFocusId; + let newFocusId; if (err) { - errMsgView.setText(err.message); + errMsgView.setText(err.friendlyText); err.view.clearText(); if (err.view.getId() === MciViewIds.confirm) { @@ -65,7 +65,7 @@ exports.getModule = class NewUserAppModule extends MenuModule { errMsgView.clearText(); } - return cb(newFocusId); + return cb(err, newFocusId); }, // diff --git a/core/system_view_validate.js b/core/system_view_validate.js index 763e0c475..13d1568f5 100644 --- a/core/system_view_validate.js +++ b/core/system_view_validate.js @@ -2,11 +2,12 @@ 'use strict'; // ENiGMA½ -const User = require('./user.js'); -const Config = require('./config.js').get; -const Log = require('./logger.js').log; -const { getAddressedToInfo } = require('./mail_util.js'); -const Message = require('./message.js'); +const User = require('./user'); +const Config = require('./config').get; +const Log = require('./logger').log; +const { getAddressedToInfo } = require('./mail_util'); +const Message = require('./message'); +const { Errors, ErrorReasons } = require('./enig_error'); // note: Only use ValidationFailed in this module! // deps const fs = require('graceful-fs'); @@ -22,36 +23,66 @@ exports.validateBirthdate = validateBirthdate; exports.validatePasswordSpec = validatePasswordSpec; function validateNonEmpty(data, cb) { - return cb(data && data.length > 0 ? null : new Error('Field cannot be empty')); + return cb( + data && data.length > 0 + ? null + : Errors.ValidationFailed('Field cannot be empty', ErrorReasons.ValueTooShort) + ); } function validateMessageSubject(data, cb) { - return cb(data && data.length > 1 ? null : new Error('Subject too short')); + return cb( + data && data.length > 1 + ? null + : Errors.ValidationFailed('Subject too short', ErrorReasons.ValueTooShort) + ); } function validateUserNameAvail(data, cb) { const config = Config(); if (!data || data.length < config.users.usernameMin) { - cb(new Error('Username too short')); + cb(Errors.ValidationFailed('Username too short', ErrorReasons.ValueTooShort)); } else if (data.length > config.users.usernameMax) { // generally should be unreached due to view restraints - return cb(new Error('Username too long')); + return cb( + Errors.ValidationFailed('Username too long', ErrorReasons.ValueTooLong) + ); } else { const usernameRegExp = new RegExp(config.users.usernamePattern); const invalidNames = config.users.newUserNames + config.users.badUserNames; if (!usernameRegExp.test(data)) { - return cb(new Error('Username contains invalid characters')); + return cb( + Errors.ValidationFailed( + 'Username contains invalid characters', + ErrorReasons.ValueInvalid + ) + ); } else if (invalidNames.indexOf(data.toLowerCase()) > -1) { - return cb(new Error('Username is blacklisted')); + return cb( + Errors.ValidationFailed( + 'Username is blacklisted', + ErrorReasons.NotAllowed + ) + ); } else if (/^[0-9]+$/.test(data)) { - return cb(new Error('Username cannot be a number')); + return cb( + Errors.ValidationFailed( + 'Username cannot be a number', + ErrorReasons.ValueInvalid + ) + ); } else { // a new user name cannot be an existing user name or an existing real name User.getUserIdAndNameByLookup(data, function userIdAndName(err) { if (!err) { // err is null if we succeeded -- meaning this user exists already - return cb(new Error('Username unavailable')); + return cb( + Errors.ValidationFailed( + 'Username unavailable', + ErrorReasons.NotAvailable + ) + ); } return cb(null); @@ -60,25 +91,41 @@ function validateUserNameAvail(data, cb) { } } -const invalidUserNameError = () => new Error('Invalid username'); - function validateUserNameExists(data, cb) { if (0 === data.length) { - return cb(invalidUserNameError()); + return cb( + Errors.ValidationFailed('Invalid username', ErrorReasons.ValueTooShort) + ); } User.getUserIdAndName(data, err => { - return cb(err ? invalidUserNameError() : null); + return cb( + err + ? Errors.ValidationFailed( + 'Failed to find username', + err.reasonCode || ErrorReasons.DoesNotExist + ) + : null + ); }); } function validateUserNameOrRealNameExists(data, cb) { if (0 === data.length) { - return cb(invalidUserNameError()); + return cb( + Errors.ValidationFailed('Invalid username', ErrorReasons.ValueTooShort) + ); } User.getUserIdAndNameByLookup(data, err => { - return cb(err ? invalidUserNameError() : null); + return cb( + err + ? Errors.ValidationFailed( + 'Failed to find user', + err.reasonCode || ErrorReasons.DoesNotExist + ) + : null + ); }); } @@ -112,7 +159,9 @@ function validateEmailAvail(data, cb) { // const emailRegExp = /[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(.[a-z0-9-]+)*/; if (!emailRegExp.test(data)) { - return cb(new Error('Invalid email address')); + return cb( + Errors.ValidationFailed('Invalid email address', ErrorReasons.ValueInvalid) + ); } User.getUserIdsWithProperty( @@ -120,9 +169,19 @@ function validateEmailAvail(data, cb) { data, function userIdsWithEmail(err, uids) { if (err) { - return cb(new Error('Internal system error')); + return cb( + Errors.ValidationFailed( + err.message, + err.reasonCode || ErrorReasons.DoesNotExist + ) + ); } else if (uids.length > 0) { - return cb(new Error('Email address not unique')); + return cb( + Errors.ValidationFailed( + 'Email address not unique', + ErrorReasons.NotAvailable + ) + ); } return cb(null); @@ -132,25 +191,36 @@ function validateEmailAvail(data, cb) { function validateBirthdate(data, cb) { // :TODO: check for dates in the future, or > reasonable values - return cb(isNaN(Date.parse(data)) ? new Error('Invalid birthdate') : null); + return cb( + isNaN(Date.parse(data)) + ? Errors.ValidationFailed('Invalid birthdate', ErrorReasons.ValueInvalid) + : null + ); } function validatePasswordSpec(data, cb) { const config = Config(); if (!data || data.length < config.users.passwordMin) { - return cb(new Error('Password too short')); + return cb( + Errors.ValidationFailed('Password too short', ErrorReasons.ValueTooShort) + ); } // check badpass, if avail fs.readFile(config.users.badPassFile, 'utf8', (err, passwords) => { if (err) { - Log.warn({ error: err.message }, 'Cannot read bad pass file'); + Log.warn( + { error: err.message, path: config.users.badPassFile }, + 'Cannot read bad pass file' + ); return cb(null); } passwords = passwords.toString().split(/\r\n|\n/g); if (passwords.includes(data)) { - return cb(new Error('Password is too common')); + return cb( + Errors.ValidationFailed('Password is too common', ErrorReasons.NotAllowed) + ); } return cb(null); diff --git a/core/upload.js b/core/upload.js index ec73a2339..d27e9d2ed 100644 --- a/core/upload.js +++ b/core/upload.js @@ -120,13 +120,13 @@ exports.getModule = class UploadModule extends MenuModule { ); if (errView) { if (err) { - errView.setText(err.message); + errView.setText(err.friendlyText); } else { errView.clearText(); } } - return cb(null); + return cb(err, null); }, }; } diff --git a/core/user_config.js b/core/user_config.js index 859c63e84..e5bbff6f4 100644 --- a/core/user_config.js +++ b/core/user_config.js @@ -90,7 +90,7 @@ exports.getModule = class UserConfigModule extends MenuModule { var newFocusId; if (errMsgView) { if (err) { - errMsgView.setText(err.message); + errMsgView.setText(err.friendlyText); if (err.view.getId() === MciCodeIds.PassConfirm) { newFocusId = MciCodeIds.Password; @@ -102,7 +102,8 @@ exports.getModule = class UserConfigModule extends MenuModule { errMsgView.clearText(); } } - cb(newFocusId); + + return cb(err, newFocusId); }, // diff --git a/core/view_controller.js b/core/view_controller.js index 6a0597e73..420d4b2b5 100644 --- a/core/view_controller.js +++ b/core/view_controller.js @@ -385,19 +385,18 @@ function ViewController(options) { this.validateView = function (view, cb) { if (view && _.isFunction(view.validate)) { view.validate(view.getData(), function validateResult(err) { - var viewValidationListener = + const viewValidationListener = self.client.currentMenuModule.menuMethods.viewValidationListener; if (_.isFunction(viewValidationListener)) { if (err) { err.view = view; // pass along the view that failed + err.friendlyText = err.reason || err.message; } - viewValidationListener( - err, - function validationComplete(newViewFocusId) { - cb(err, newViewFocusId); - } - ); + viewValidationListener(err, (err, newFocusedViewId) => { + // validator may have updated |err| + return cb(err, newFocusedViewId); + }); } else { cb(err); } From 21fb688bf65c5248bcfbf61ab89c28555bacb53b Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 4 Feb 2023 13:54:16 -0700 Subject: [PATCH 113/233] Tidy up errors --- WHATSNEW.md | 1 + art/themes/luciano_blocktronics/theme.hjson | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/WHATSNEW.md b/WHATSNEW.md index f85f3a886..3472426cd 100644 --- a/WHATSNEW.md +++ b/WHATSNEW.md @@ -13,6 +13,7 @@ This document attempts to track **major** changes and additions in ENiGMA½. For * New users now have randomly generated avatars assigned to them that can be served up via the new System General [Web Handler](/docs/_docs/servers/contentservers/web-handlers.md). * CombatNet has shut down, so the module (`combatnet.js`) has been removed. * New `NewUserPrePersist` system event available to developers to 'hook' account creation and add their own properties/etc. +* The signature for `viewValidationListener`'s callback has changed: It is now `(err, newFocusId)`. To ignore a validation error, implementors can simply call the callback with a `null` error, else they should forward it on. ## 0.0.13-beta * **Note for contributors**: ENiGMA has switched to [Prettier](https://prettier.io) for formatting/style. Please see [CONTRIBUTING](CONTRIBUTING.md) and the Prettier website for more information. diff --git a/art/themes/luciano_blocktronics/theme.hjson b/art/themes/luciano_blocktronics/theme.hjson index 731a83ee4..361f7c3e3 100644 --- a/art/themes/luciano_blocktronics/theme.hjson +++ b/art/themes/luciano_blocktronics/theme.hjson @@ -400,6 +400,7 @@ TL1: { width: 19, textOverflow: "..." } ET2: { width: 19, textOverflow: "..." } ET3: { width: 19, textOverflow: "..." } + ET4: { width: 21, textOverflow: "..." } } } 1: { @@ -491,15 +492,15 @@ width: 10 } TL5: { - width: 4 + width: 4 } TL6: { - width: 4 + width: 4 } MT7: { focus: true width: 69 - height: 3 + height: 3 mode: preview } BT8: { @@ -773,6 +774,7 @@ TL1: { width: 19, textOverflow: "..." } ET2: { width: 19, textOverflow: "..." } ET3: { width: 19, textOverflow: "..." } + ET4: { width: 21, textOverflow: "..." } //TL4: { width: 25 } } } From a24ec5fd6736ce67e591c94f76456517be351bdb Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 4 Feb 2023 14:19:29 -0700 Subject: [PATCH 114/233] Some hardening and Note import improvements for diff systems --- core/activitypub/note.js | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/core/activitypub/note.js b/core/activitypub/note.js index 6b86e37a2..18bbc9026 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -171,7 +171,12 @@ module.exports = class Note extends ActivityPubObject { message.areaTag = options.areaTag || Message.WellKnownAreaTags.Private; // :TODO: it would be better to do some basic HTML to ANSI or pipe codes perhaps - message.message = htmlToMessageBody(this.content); + message.message = htmlToMessageBody( + // try to handle various implementations + // - https://docs.joinmastodon.org/spec/activitypub/#payloads + // - https://indieweb.org/post-type-discovery#Algorithm + this.content || this.name || this.summary + ); message.subject = this._getSubject(message); // List all attachments @@ -179,19 +184,13 @@ module.exports = class Note extends ActivityPubObject { let attachmentInfoLines = ['--[Attachments]--']; // https://socialhub.activitypub.rocks/t/representing-images/624 this.attachment.forEach(att => { - switch (att.mediaType) { - case 'image/avif': - case 'image/apng': - case 'image/png': - case 'image/x-png': - case 'image/jpeg': - case 'image/gif': - case 'image/svg+xml': - case 'image/webp': + const type = att.mediaType.substring(0, att.mediaType.indexOf('/')); + switch (type) { + case 'image': { let imgInfo; if (att.height && att.width) { - imgInfo = `Image (${att.width} x ${att.height})`; + imgInfo = `Image (${att.width}x${att.height})`; } else { imgInfo = 'Image'; } @@ -199,7 +198,13 @@ module.exports = class Note extends ActivityPubObject { } break; - // :TODO: video + case 'audio': + attachmentInfoLines.push('Audio'); + break; + + case 'video': + attachmentInfoLines.push('Video'); + break; default: attachmentInfoLines.push(att.mediaType); @@ -273,7 +278,11 @@ module.exports = class Note extends ActivityPubObject { _getSubject(message) { if (this.summary) { - return this.summary; + return this.summary.trim(); + } + + if (this.name) { + return this.name.trim(); } // From c3335ce062cddb4eb985dc7caefd690c8f41a1ef Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 4 Feb 2023 15:17:59 -0700 Subject: [PATCH 115/233] Hopefully better microformat handling outgoing --- core/activitypub/note.js | 5 ++--- core/activitypub/util.js | 37 ++++++++++++++++++++++++++++++------- 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/core/activitypub/note.js b/core/activitypub/note.js index 18bbc9026..b562ebf36 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -3,7 +3,7 @@ const ActivityPubObject = require('./object'); const { Errors } = require('../enig_error'); const { getISOTimestampString } = require('../database'); const User = require('../user'); -const { messageBodyToHtml, htmlToMessageBody } = require('./util'); +const { messageToHtml, htmlToMessageBody } = require('./util'); const { isAnsi } = require('../string_util'); const Log = require('../logger').log; @@ -117,7 +117,7 @@ module.exports = class Note extends ActivityPubObject { published: getISOTimestampString(message.modTimestamp), to, attributedTo: fromActor.id, - content: messageBodyToHtml(message.message.trim()), + content: messageToHtml(message, remoteActor), source: { content: message.message, mediaType: sourceMediaType, @@ -237,7 +237,6 @@ module.exports = class Note extends ActivityPubObject { message.modTimestamp = moment(); } - // :TODO: replyToMsgId from 'inReplyTo' message.setRemoteFromUser(this.attributedTo); message.setExternalFlavor(Message.AddressFlavor.ActivityPub); diff --git a/core/activitypub/util.js b/core/activitypub/util.js index 41d47558a..517f23152 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -25,6 +25,7 @@ exports.localActorId = localActorId; exports.userFromActorId = userFromActorId; exports.getUserProfileTemplatedBody = getUserProfileTemplatedBody; exports.messageBodyToHtml = messageBodyToHtml; +exports.messageToHtml = messageToHtml; exports.htmlToMessageBody = htmlToMessageBody; exports.userNameFromSubject = userNameFromSubject; @@ -194,13 +195,6 @@ function getUserProfileTemplatedBody( ); } -// -// Apply very basic HTML to a message following -// Mastodon's supported tags of 'p', 'br', 'a', and 'span': -// - https://docs.joinmastodon.org/spec/activitypub/#sanitization -// - https://blog.joinmastodon.org/2018/06/how-to-implement-a-basic-activitypub-server/ -// -// :TODO: https://docs.joinmastodon.org/spec/microformats/ function messageBodyToHtml(body) { body = encode(stripAnsiControlCodes(body), { mode: 'nonAsciiPrintable' }).replace( /\r?\n/g, @@ -210,6 +204,35 @@ function messageBodyToHtml(body) { return `

    ${body}

    `; } +// +// Apply very basic HTML to a message following +// Mastodon's supported tags of 'p', 'br', 'a', and 'span': +// - https://docs.joinmastodon.org/spec/activitypub/#sanitization +// - https://blog.joinmastodon.org/2018/06/how-to-implement-a-basic-activitypub-server/ +// +// Microformats: +// - https://microformats.org/wiki/ +// - https://indieweb.org/note +// - https://docs.joinmastodon.org/spec/microformats/ +// +function messageToHtml(message, remoteActor) { + const msg = encode(stripAnsiControlCodes(message.message.trim()), { + mode: 'nonAsciiPrintable', + }).replace(/\r?\n/g, '
    '); + + if (message.isPrivate()) { + const toId = remoteActor.id; + return `
    `; + } + + return `

    ${msg}

    `; +} + function htmlToMessageBody(html) { //
    ,
    , and
    ,
    -> \r\n //

    -> \r\n From 877e2ca61a814947bae107896f4da64aeb680b04 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Sat, 4 Feb 2023 19:33:56 -0600 Subject: [PATCH 116/233] Added followers and following --- core/activitypub/actor_search.js | 64 +++++++++++++++++++++++++++++++- core/http_util.js | 2 + 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/core/activitypub/actor_search.js b/core/activitypub/actor_search.js index 906312119..a338a212e 100644 --- a/core/activitypub/actor_search.js +++ b/core/activitypub/actor_search.js @@ -3,6 +3,8 @@ const { Errors } = require('../enig_error'); const Actor = require('../activitypub/actor'); const moment = require('moment'); const { htmlToMessageBody } = require('./util'); +const { getJson } = require('../http_util'); +const { ActivityStreamMediaType } = require('./const'); // deps const async = require('async'); @@ -153,7 +155,37 @@ exports.getModule = class ActivityPubActorSearch extends MenuModule { const manualFollowersView = v(MciViewIds.view.manualFollowers); manualFollowersView.setText(remoteActor.manuallyApprovesFollowers); - // TODO: Number of followers, number following + const followerCountView = v(MciViewIds.view.numberFollowers); + this._retrieveCountFromUrl( + remoteActor.followers, + (err, followerCount) => { + if (err) { + this.client.log.warn( + { err: err }, + 'Unable to get follower count' + ); + followerCountView.setText('--'); + } else { + followerCountView.setText(followerCount); + } + } + ); + + const followingCountView = v(MciViewIds.view.numberFollowing); + this._retrieveCountFromUrl( + remoteActor.following, + (err, followingCount) => { + if (err) { + this.client.log.warn( + { err: err }, + 'Unable to get following count' + ); + followingCountView.setText('--'); + } else { + followingCountView.setText(followingCount); + } + } + ); const summaryView = v(MciViewIds.view.summary); summaryView.setText(htmlToMessageBody(remoteActor.summary)); @@ -196,4 +228,34 @@ exports.getModule = class ActivityPubActorSearch extends MenuModule { } ); } + + _retrieveCountFromUrl(countUrl, cb) { + async.waterfall( + [ + callback => { + countUrl = countUrl.trim(); + if (isEmpty(countUrl)) { + return callback( + Errors.UnexpectedState('Count URL can not be empty.') + ); + } + const headers = { + Accept: ActivityStreamMediaType, + }; + getJson(countUrl, { headers }, (err, jsonResponse) => { + if (err) { + return callback(err, jsonResponse); + } + return callback(null, jsonResponse); + }); + }, + (jsonResponse, callback) => { + return callback(null, jsonResponse.totalItems); + }, + ], + (err, result) => { + return cb(err, result); + } + ); + } }; diff --git a/core/http_util.js b/core/http_util.js index ceb4ee1b7..0474fc1c9 100644 --- a/core/http_util.js +++ b/core/http_util.js @@ -5,6 +5,7 @@ const { isString, isObject, truncate } = require('lodash'); const https = require('https'); const httpSignature = require('http-signature'); const crypto = require('crypto'); +const Log = require('./logger').log; exports.getJson = getJson; exports.postJson = postJson; @@ -17,6 +18,7 @@ function getJson(url, options, cb) { return cb(err); } + Log.debug({ url: url, body: body }, 'Response from getJson'); let parsed; try { parsed = JSON.parse(body); From 99ae973396284cf3fd52ee275cb585b4e3062a0d Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 4 Feb 2023 22:55:11 -0700 Subject: [PATCH 117/233] Handle Update of Notes, store Activites as-is, better shared mailbox delivery and DRY --- core/activitypub/collection.js | 65 +++-- core/activitypub/note.js | 39 +-- core/activitypub/util.js | 24 +- core/config_default.js | 5 + core/message_const.js | 1 + .../content/web_handlers/activitypub.js | 246 +++++++++++++----- 6 files changed, 271 insertions(+), 109 deletions(-) diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index 493eec143..c62c85270 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -1,4 +1,4 @@ -const { makeUserUrl } = require('./util'); +const { makeUserUrl, parseTimestampOrNow } = require('./util'); const ActivityPubObject = require('./object'); const apDb = require('../database').dbs.activitypub; const { getISOTimestampString } = require('../database'); @@ -102,9 +102,9 @@ module.exports = class Collection extends ActivityPubObject { ); } - static addPublicInboxItem(inboxItem, ignoreDupes, cb) { + static addSharedInboxItem(inboxItem, ignoreDupes, cb) { return Collection.addToCollection( - 'publicInbox', + 'sharedInbox', null, // N/A Collection.PublicCollectionId, inboxItem.id, @@ -115,27 +115,47 @@ module.exports = class Collection extends ActivityPubObject { ); } - static embeddedObjById(collectionName, includePrivate, objectId, cb) { - const privateQuery = includePrivate ? '' : ' AND is_private = FALSE'; + static objectById(objectId, cb) { + apDb.get( + `SELECT name, timestamp, owner_actor_id, object_json, is_private + FROM collection + WHERE name = ? AND object_id = ? + LIMIT 1;`, + [objectId], + (err, row) => { + if (err) { + return cb(err); + } + + if (!row) { + return cb(null, null); + } + const obj = ActivityPubObject.fromJsonString(row.object_json); + if (!obj) { + return cb(Errors.Invalid('Failed to parse Object JSON')); + } + + return cb(null, obj, Collection._rowToObjectInfo(row)); + } + ); + } + + static objectByEmbeddedId(objectId, cb) { apDb.get( - `SELECT object_json + `SELECT name, timestamp, owner_actor_id, object_json, is_private FROM collection - WHERE name = ? - ${privateQuery} - AND json_extract(object_json, '$.object.id') = ?;`, - [collectionName, objectId], + WHERE json_extract(object_json, '$.object.id') = ? + LIMIT 1;`, + [objectId], (err, row) => { if (err) { return cb(err); } if (!row) { - return cb( - Errors.DoesNotExist( - `No embedded Object with object.id of "${objectId}" found` - ) - ); + // no match + return cb(null, null); } const obj = ActivityPubObject.fromJsonString(row.object_json); @@ -143,7 +163,7 @@ module.exports = class Collection extends ActivityPubObject { return cb(Errors.Invalid('Failed to parse Object JSON')); } - return cb(null, obj); + return cb(null, obj, Collection._rowToObjectInfo(row)); } ); } @@ -310,8 +330,6 @@ module.exports = class Collection extends ActivityPubObject { obj = JSON.stringify(obj); } - // :TODO: The receiving server MUST take care to be sure that the Update is authorized to modify its object. At minimum, this may be done by ensuring that the Update and its object are of same origin. - apDb.run( `UPDATE collection SET object_json = ?, timestamp = ? @@ -378,7 +396,7 @@ module.exports = class Collection extends ActivityPubObject { ); } - static removeFromCollectionById(collectionName, owningUser, objectId, cb) { + static removeById(collectionName, owningUser, objectId, cb) { const actorId = owningUser.getProperty(UserProps.ActivityPubActorId); if (!actorId) { return cb( @@ -396,4 +414,13 @@ module.exports = class Collection extends ActivityPubObject { } ); } + + static _rowToObjectInfo(row) { + return { + name: row.name, + timestamp: parseTimestampOrNow(row.timestamp), + ownerActorId: row.owner_actor_id, + isPrivate: row.is_private, + }; + } }; diff --git a/core/activitypub/note.js b/core/activitypub/note.js index b562ebf36..566515b1e 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -3,14 +3,12 @@ const ActivityPubObject = require('./object'); const { Errors } = require('../enig_error'); const { getISOTimestampString } = require('../database'); const User = require('../user'); -const { messageToHtml, htmlToMessageBody } = require('./util'); +const { parseTimestampOrNow, messageToHtml, htmlToMessageBody } = require('./util'); const { isAnsi } = require('../string_util'); -const Log = require('../logger').log; // deps const { v5: UUIDv5 } = require('uuid'); const Actor = require('./actor'); -const moment = require('moment'); const Collection = require('./collection'); const async = require('async'); const { isString, isObject, truncate } = require('lodash'); @@ -34,11 +32,19 @@ module.exports = class Note extends ActivityPubObject { } static fromPublicNoteId(noteId, cb) { - Collection.embeddedObjById('outbox', false, noteId, (err, obj) => { + Collection.objectByEmbeddedId(noteId, (err, obj, objInfo) => { if (err) { return cb(err); } + if (!obj) { + return cb(null, null); + } + + if (objInfo.isPrivate || !obj.object || obj.object.type !== 'Note') { + return cb(null, null); + } + return cb(null, new Note(obj.object)); }); } @@ -117,7 +123,7 @@ module.exports = class Note extends ActivityPubObject { published: getISOTimestampString(message.modTimestamp), to, attributedTo: fromActor.id, - content: messageToHtml(message, remoteActor), + content: messageToHtml(message), source: { content: message.message, mediaType: sourceMediaType, @@ -144,7 +150,7 @@ module.exports = class Note extends ActivityPubObject { } toMessage(options, cb) { - if (!isObject(options.toUser) || !isString(options.areaTag)) { + if (!options.toUser || !isString(options.areaTag)) { return cb(Errors.MissingParam('Missing one or more required options!')); } @@ -165,9 +171,14 @@ module.exports = class Note extends ActivityPubObject { // Note's can be addressed to 1:N users, but a Message is a 1:1 // relationship. This method requires the mapping up front via options // - message.toUserName = options.toUser.username; - message.meta.System[Message.SystemMetaNames.LocalToUserID] = - options.toUser.userId; + if (isObject(options.toUser)) { + message.toUserName = options.toUser.username; + message.meta.System[Message.SystemMetaNames.LocalToUserID] = + options.toUser.userId; + } else { + message.toUser = 'All'; + } + message.areaTag = options.areaTag || Message.WellKnownAreaTags.Private; // :TODO: it would be better to do some basic HTML to ANSI or pipe codes perhaps @@ -227,15 +238,7 @@ module.exports = class Note extends ActivityPubObject { message.subject = `[NSFW] ${message.subject}`; } - try { - message.modTimestamp = moment(this.published); - } catch (e) { - Log.warn( - { published: this.published, error: e.message }, - 'Failed to parse Note published timestamp' - ); - message.modTimestamp = moment(); - } + message.modTimestamp = parseTimestampOrNow(this.published); message.setRemoteFromUser(this.attributedTo); message.setExternalFlavor(Message.AddressFlavor.ActivityPub); diff --git a/core/activitypub/util.js b/core/activitypub/util.js index 517f23152..a753eec59 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -15,8 +15,11 @@ const moment = require('moment'); const { striptags } = require('striptags'); const { encode, decode } = require('html-entities'); const { isString } = require('lodash'); +const Log = require('../logger').log; exports.ActivityStreamsContext = 'https://www.w3.org/ns/activitystreams'; + +exports.parseTimestampOrNow = parseTimestampOrNow; exports.isValidLink = isValidLink; exports.makeSharedInboxUrl = makeSharedInboxUrl; exports.makeUserUrl = makeUserUrl; @@ -42,6 +45,15 @@ Affiliations: %AFFILIATIONS% Achievement Points: %ACHIEVEMENT_POINTS% `; +function parseTimestampOrNow(s) { + try { + return moment(s); + } catch (e) { + Log.warn({ error: e.message }, `Failed parsing timestamp "${s}"`); + return moment(); + } +} + function isValidLink(l) { return /^https?:\/\/.+$/.test(l); } @@ -215,20 +227,12 @@ function messageBodyToHtml(body) { // - https://indieweb.org/note // - https://docs.joinmastodon.org/spec/microformats/ // -function messageToHtml(message, remoteActor) { +function messageToHtml(message) { const msg = encode(stripAnsiControlCodes(message.message.trim()), { mode: 'nonAsciiPrintable', }).replace(/\r?\n/g, '
    '); - if (message.isPrivate()) { - const toId = remoteActor.id; - return `

    - - @ ${remoteActor.preferredUsername} - -${msg} -

    `; - } + // :TODO: figure out any microformats we should use here... return `

    ${msg}

    `; } diff --git a/core/config_default.js b/core/config_default.js index a50d78b74..60885f90a 100644 --- a/core/config_default.js +++ b/core/config_default.js @@ -904,6 +904,11 @@ module.exports = () => { name: 'System Bulletins', desc: 'Bulletin messages for all users', }, + + activitypub_shared_inbox: { + name: 'ActivityPub sharedInbox', + desc: 'Public shared inbox for ActivityPub', + }, }, }, }, diff --git a/core/message_const.js b/core/message_const.js index 78d83d191..b67992b83 100644 --- a/core/message_const.js +++ b/core/message_const.js @@ -2,6 +2,7 @@ const WellKnownAreaTags = { Invalid: '', Private: 'private_mail', Bulletin: 'local_bulletin', + ActivityPubSharedInbox: 'activitypub_shared_inbox', }; exports.WellKnownAreaTags = WellKnownAreaTags; diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 94bcc3f1e..3527233d1 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -216,8 +216,18 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { resp ); + case 'Delete': + return this._collectionRequestHandler( + signature, + 'inbox', + activity, + this._inboxDeleteRequestHandler.bind(this), + req, + resp + ); + case 'Update': - return this._inboxUpdateRequestHandler(activity, req, resp); + return this.inboxUpdateObject('inbox', req, resp, activity); case 'Undo': return this._collectionRequestHandler( @@ -269,6 +279,9 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { case 'Create': return this._sharedInboxCreateActivity(req, resp, activity); + case 'Update': + return this.inboxUpdateObject('sharedInbox', req, resp, activity); + default: this.log.warn( { type: activity.type }, @@ -295,6 +308,80 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } } + inboxUpdateObject(inboxType, req, resp, activity) { + const objectIdToUpdate = _.get(activity, 'object.id'); + const objectType = _.get(activity, 'object.type'); + + this.log.info( + { inboxType, objectId: objectIdToUpdate, type: objectType }, + 'Inbox Object "Update" request' + ); + + // :TODO: other types... + if (!objectIdToUpdate || !['Note'].includes(objectType)) { + return this.webServer.resourceNotFound(resp); + } + + // Note's are wrapped in Create Activities + Collection.objectByEmbeddedId(objectIdToUpdate, (err, obj) => { + if (err) { + return this.webServer.internalServerError(resp, err); + } + + if (!obj) { + // no match + return this.webServer.resourceNotFound(resp); + } + + // OK, the object exists; Does the caller have permission + // to update? The origin must match + // + // "The receiving server MUST take care to be sure that the Update is authorized + // to modify its object. At minimum, this may be done by ensuring that the Update + // and its object are of same origin." + try { + const updateTargetUrl = new URL(obj.object.id); + const updaterUrl = new URL(activity.actor); + + if (updateTargetUrl.host !== updaterUrl.host) { + this.log.warn( + { + objectId: objectIdToUpdate, + type: objectType, + updateTargetHost: updateTargetUrl.host, + requestorHost: updaterUrl.host, + }, + 'Attempt to update object from another origin' + ); + return this.webServer.accessDenied(resp); + } + + Collection.updateCollectionEntry( + 'inbox', + objectIdToUpdate, + activity, + err => { + if (err) { + return this.webServer.internalServerError(resp, err); + } + + this.log.info( + { + objectId: objectIdToUpdate, + type: objectType, + collection: 'inbox', + }, + 'Object updated' + ); + return this.webServer.accepted(resp); + } + ); + } catch (e) { + return this.webServer.internalServerError(resp, e); + } + }); + } + _deliverSharedInboxNote(req, resp, deliverTo, activity) { // When an object is being delivered to the originating actor's followers, // a server MAY reduce the number of receiving actors delivered to by @@ -313,10 +400,15 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { (actorId, nextActor) => { switch (actorId) { case Collection.PublicCollectionId: - // :TODO: we should probably land this in a public areaTag as well for AP; allowing Message objects to be used/etc. - Collection.addPublicInboxItem(note, true, err => { - return nextActor(err); - }); + this._deliverInboxNoteToSharedInbox( + req, + resp, + activity, + note, + err => { + return nextActor(err); + } + ); break; default: @@ -343,49 +435,77 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { ); } + _deliverInboxNoteToSharedInbox(req, resp, activity, note, cb) { + Collection.addSharedInboxItem(activity, true, err => { + if (err) { + return cb(err); + } + + return this._storeNoteAsMessage( + activity.id, + 'All', + Message.WellKnownAreaTags.ActivityPubSharedInbox, + note, + cb + ); + }); + } + + _storeNoteAsMessage(activityId, localAddressedTo, areaTag, note, cb) { + // + // Import the item to the user's private mailbox + // + const messageOpts = { + // Notes can have 1:N 'to' relationships while a Message is 1:1; + activityId, + toUser: localAddressedTo, + areaTag: areaTag, + }; + + note.toMessage(messageOpts, (err, message) => { + if (err) { + return cb(err); + } + + message.persist(err => { + if (!err) { + if (_.isObject(localAddressedTo)) { + localAddressedTo = localAddressedTo.username; + } + this.log.info( + { + localAddressedTo, + activityId, + noteId: note.id, + }, + 'Note delivered as message to private mailbox' + ); + } else if (err.code === 'SQLITE_CONSTRAINT') { + return cb(null); + } + return cb(err); + }); + }); + } + _deliverInboxNoteToLocalActor(req, resp, actorId, activity, note, cb) { userFromActorId(actorId, (err, localUser) => { if (err) { return cb(null); // not found/etc., just bail } - Collection.addInboxItem(note, localUser, this.webServer, false, err => { + Collection.addInboxItem(activity, localUser, this.webServer, false, err => { if (err) { return cb(err); } - // - // Import the item to the user's private mailbox - // - const messageOpts = { - // Notes can have 1:N 'to' relationships while a Message is 1:1; - activityId: activity.id, - toUser: localUser, - areaTag: Message.WellKnownAreaTags.Private, - }; - - note.toMessage(messageOpts, (err, message) => { - if (err) { - return cb(err); - } - - message.persist(err => { - if (!err) { - this.log.info( - { - user: localUser.username, - userId: localUser.userId, - activityId: activity.id, - noteId: note.id, - }, - 'Note delivered as message to private mailbox' - ); - } else if (err.code === 'SQLITE_CONSTRAINT') { - return cb(null); - } - return cb(err); - }); - }); + return this._storeNoteAsMessage( + activity.id, + localUser, + Message.WellKnownAreaTags.Private, + note, + cb + ); }); }); } @@ -442,6 +562,10 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.internalServerError(resp, err); } + if (!note) { + return this.webServer.resourceNotFound(resp); + } + // :TODO: support a template here resp.writeHead(200, { 'Content-Type': 'text/html' }); @@ -527,13 +651,16 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } } - _inboxUpdateRequestHandler(activity, req, resp) { - this.log.info({ actor: activity.actor }, 'Update Activity request'); + // :TODO: DRY: update/delete are mostly the same code other than the final operation + _inboxDeleteRequestHandler(activity, remoteActor, localUser, resp) { + this.log.info( + { user_id: localUser.userId, actor: activity.actor }, + 'Delete request' + ); - return this.webServer.notImplemented(resp); + // :TODO:only delete if it's owned by the sender - // Collection.updateCollectionEntry('inbox', activity.id, activity, err => { - // }); + return this.webServer.accepted(resp); } _inboxUndoRequestHandler(activity, remoteActor, localUser, resp) { @@ -547,27 +674,22 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.notImplemented(resp); } - Collection.removeFromCollectionById( - 'followers', - localUser, - remoteActor.id, - err => { - if (err) { - return this.webServer.internalServerError(resp, err); - } + Collection.removeById('followers', localUser, remoteActor.id, err => { + if (err) { + return this.webServer.internalServerError(resp, err); + } - this.log.info( - { - username: localUser.username, - userId: localUser.userId, - actor: remoteActor.id, - }, - 'Undo "Follow" (un-follow) success' - ); + this.log.info( + { + username: localUser.username, + userId: localUser.userId, + actor: remoteActor.id, + }, + 'Undo "Follow" (un-follow) success' + ); - return this.webServer.accepted(resp); - } - ); + return this.webServer.accepted(resp); + }); } _collectionRequestHandler( From bd2dc27477f87dc5267839aaffbe3af7cac69b9e Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 4 Feb 2023 23:16:44 -0700 Subject: [PATCH 118/233] Add getRemoteCollectionStats() and usage --- core/activitypub/actor_search.js | 80 +++++++++++--------------------- core/activitypub/collection.js | 33 ++++++++++++- 2 files changed, 59 insertions(+), 54 deletions(-) diff --git a/core/activitypub/actor_search.js b/core/activitypub/actor_search.js index a338a212e..6ce5c5634 100644 --- a/core/activitypub/actor_search.js +++ b/core/activitypub/actor_search.js @@ -3,8 +3,7 @@ const { Errors } = require('../enig_error'); const Actor = require('../activitypub/actor'); const moment = require('moment'); const { htmlToMessageBody } = require('./util'); -const { getJson } = require('../http_util'); -const { ActivityStreamMediaType } = require('./const'); +const Collection = require('./collection'); // deps const async = require('async'); @@ -156,35 +155,15 @@ exports.getModule = class ActivityPubActorSearch extends MenuModule { manualFollowersView.setText(remoteActor.manuallyApprovesFollowers); const followerCountView = v(MciViewIds.view.numberFollowers); - this._retrieveCountFromUrl( + this._updateViewWithCollectionItemCount( remoteActor.followers, - (err, followerCount) => { - if (err) { - this.client.log.warn( - { err: err }, - 'Unable to get follower count' - ); - followerCountView.setText('--'); - } else { - followerCountView.setText(followerCount); - } - } + followerCountView ); const followingCountView = v(MciViewIds.view.numberFollowing); - this._retrieveCountFromUrl( + this._updateViewWithCollectionItemCount( remoteActor.following, - (err, followingCount) => { - if (err) { - this.client.log.warn( - { err: err }, - 'Unable to get following count' - ); - followingCountView.setText('--'); - } else { - followingCountView.setText(followingCount); - } - } + followingCountView ); const summaryView = v(MciViewIds.view.summary); @@ -229,33 +208,28 @@ exports.getModule = class ActivityPubActorSearch extends MenuModule { ); } - _retrieveCountFromUrl(countUrl, cb) { - async.waterfall( - [ - callback => { - countUrl = countUrl.trim(); - if (isEmpty(countUrl)) { - return callback( - Errors.UnexpectedState('Count URL can not be empty.') - ); - } - const headers = { - Accept: ActivityStreamMediaType, - }; - getJson(countUrl, { headers }, (err, jsonResponse) => { - if (err) { - return callback(err, jsonResponse); - } - return callback(null, jsonResponse); - }); - }, - (jsonResponse, callback) => { - return callback(null, jsonResponse.totalItems); - }, - ], - (err, result) => { - return cb(err, result); + _updateViewWithCollectionItemCount(collectionUrl, view) { + this._retrieveCountFromCollectionUrl(collectionUrl, (err, count) => { + if (err) { + this.client.log.warn( + { err: err }, + `Unable to get Collection count for ${collectionUrl}` + ); + view.setText('--'); + } else { + view.setText(count); } - ); + }); + } + + _retrieveCountFromCollectionUrl(collectionUrl, cb) { + collectionUrl = collectionUrl.trim(); + if (isEmpty(collectionUrl)) { + return cb(Errors.UnexpectedState('Count URL can not be empty.')); + } + + Collection.getRemoteCollectionStats(collectionUrl, (err, stats) => { + return cb(err, stats.totalItems); + }); } }; diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index c62c85270..b8fb49d42 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -3,8 +3,12 @@ const ActivityPubObject = require('./object'); const apDb = require('../database').dbs.activitypub; const { getISOTimestampString } = require('../database'); const { Errors } = require('../enig_error.js'); -const { PublicCollectionId: APPublicCollectionId } = require('./const'); +const { + PublicCollectionId: APPublicCollectionId, + ActivityStreamMediaType, +} = require('./const'); const UserProps = require('../user_property'); +const { getJson } = require('../http_util'); // deps const { isString } = require('lodash'); @@ -18,6 +22,33 @@ module.exports = class Collection extends ActivityPubObject { return APPublicCollectionId; } + static getRemoteCollectionStats(collectionUrl, cb) { + const headers = { + Accept: ActivityStreamMediaType, + }; + getJson(collectionUrl, { headers }, (err, collection) => { + if (err) { + return cb(err); + } + + // :TODO: validate headers? + + collection = new Collection(collection); + if (!collection.isValid()) { + return cb(Errors.Invalid('Invalid Collection')); + } + + const { totalItems, type, id, summary } = collection; + + return cb(null, { + totalItems, + type, + id, + summary, + }); + }); + } + static followers(collectionId, page, cb) { return Collection.publicOrderedById( 'followers', From 41cd0f7f33a77a579b8e020b4c2916eaae05a42e Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 5 Feb 2023 10:42:30 -0700 Subject: [PATCH 119/233] Fix local Actor URLs, add addFollowing() API --- core/activitypub/actor.js | 13 +++--- core/activitypub/collection.js | 73 ++++++++++++++++++++-------------- core/database.js | 2 +- core/http_util.js | 11 +++++ 4 files changed, 63 insertions(+), 36 deletions(-) diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index efe8c4b9e..979b2f1ec 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -19,7 +19,6 @@ const ActivityPubSettings = require('./settings'); const ActivityPubObject = require('./object'); const { ActivityStreamMediaType } = require('./const'); const apDb = require('../database').dbs.activitypub; -const Config = require('../config').get; // deps const _ = require('lodash'); @@ -132,11 +131,13 @@ module.exports = class Actor extends ActivityPubObject { // value: 'Mateo@21:1/121', // }, // ], - bbsInfo: { - boardName: Config().general.boardName, - memberSince: user.getProperty(UserProps.AccountCreated), - affiliations: user.getProperty(UserProps.Affiliations) || '', - }, + + // :TODO: re-enable once a spec is defined; board should prob be a object with connection info, etc. + // bbsInfo: { + // boardName: Config().general.boardName, + // memberSince: user.getProperty(UserProps.AccountCreated), + // affiliations: user.getProperty(UserProps.Affiliations) || '', + // }, }; addImage(obj, 'icon'); diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index b8fb49d42..a95753d9b 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -26,27 +26,29 @@ module.exports = class Collection extends ActivityPubObject { const headers = { Accept: ActivityStreamMediaType, }; - getJson(collectionUrl, { headers }, (err, collection) => { - if (err) { - return cb(err); - } - - // :TODO: validate headers? + getJson( + collectionUrl, + { headers, validContentTypes: [ActivityStreamMediaType] }, + (err, collection) => { + if (err) { + return cb(err); + } - collection = new Collection(collection); - if (!collection.isValid()) { - return cb(Errors.Invalid('Invalid Collection')); - } + collection = new Collection(collection); + if (!collection.isValid()) { + return cb(Errors.Invalid('Invalid Collection')); + } - const { totalItems, type, id, summary } = collection; + const { totalItems, type, id, summary } = collection; - return cb(null, { - totalItems, - type, - id, - summary, - }); - }); + return cb(null, { + totalItems, + type, + id, + summary, + }); + } + ); } static followers(collectionId, page, cb) { @@ -71,14 +73,14 @@ module.exports = class Collection extends ActivityPubObject { static addFollower(owningUser, followingActor, webServer, ignoreDupes, cb) { const collectionId = - makeUserUrl(webServer, owningUser, '/ap/collections/') + '/followers'; + makeUserUrl(webServer, owningUser, '/ap/users/') + '/followers'; return Collection.addToCollection( 'followers', owningUser, collectionId, - followingActor.id, + followingActor.id, // Actor following owningUser followingActor, - false, + false, // we'll check dynamically when queried ignoreDupes, cb ); @@ -86,12 +88,12 @@ module.exports = class Collection extends ActivityPubObject { static addFollowRequest(owningUser, requestingActor, webServer, ignoreDupes, cb) { const collectionId = - makeUserUrl(webServer, owningUser, '/ap/collections/') + '/follow-requests'; + makeUserUrl(webServer, owningUser, '/ap/users/') + '/follow-requests'; return Collection.addToCollection( 'follow-requests', owningUser, collectionId, - requestingActor.id, + requestingActor.id, // Actor requesting to follow owningUser requestingActor, true, ignoreDupes, @@ -99,13 +101,27 @@ module.exports = class Collection extends ActivityPubObject { ); } + static addFollowing(owningUser, followingActor, webServer, ignoreDupes, cb) { + const collectionId = + makeUserUrl(webServer, owningUser, '/ap/users/') + '/following'; + return Collection.addToCollection( + 'following', + owningUser, + collectionId, + followingActor.id, // Actor owningUser is following + followingActor, + false, // we'll check dynamically when queried + ignoreDupes, + cb + ); + } + static outbox(collectionId, page, cb) { return Collection.publicOrderedById('outbox', collectionId, page, null, cb); } static addOutboxItem(owningUser, outboxItem, isPrivate, webServer, ignoreDupes, cb) { - const collectionId = - makeUserUrl(webServer, owningUser, '/ap/collections/') + '/outbox'; + const collectionId = makeUserUrl(webServer, owningUser, '/ap/users/') + '/outbox'; return Collection.addToCollection( 'outbox', owningUser, @@ -119,8 +135,7 @@ module.exports = class Collection extends ActivityPubObject { } static addInboxItem(inboxItem, owningUser, webServer, ignoreDupes, cb) { - const collectionId = - makeUserUrl(webServer, owningUser, '/ap/collections/') + '/inbox'; + const collectionId = makeUserUrl(webServer, owningUser, '/ap/users/') + '/inbox'; return Collection.addToCollection( 'inbox', owningUser, @@ -282,9 +297,9 @@ module.exports = class Collection extends ActivityPubObject { ); } - // e.g. http://somewhere.com/_enig/ap/collections/NuSkooler/followers + // e.g. http://somewhere.com/_enig/ap/users/NuSkooler/followers const collectionId = - makeUserUrl(webServer, owningUser, '/ap/collections/') + `/${collectionName}`; + makeUserUrl(webServer, owningUser, '/ap/users/') + `/${collectionName}`; if (!page) { return apDb.get( diff --git a/core/database.js b/core/database.js index 6277a71d3..bab1ffbf5 100644 --- a/core/database.js +++ b/core/database.js @@ -493,7 +493,7 @@ dbs.message.run( // ActivityPub Collections of various types such as followers, following, likes, ... dbs.activitypub.run( `CREATE TABLE IF NOT EXISTS collection ( - collection_id VARCHAR NOT NULL, -- ie: http://somewhere.com/_enig/ap/collections/NuSkooler/followers + collection_id VARCHAR NOT NULL, -- ie: http://somewhere.com/_enig/ap/users/NuSkooler/followers name VARCHAR NOT NULL, -- examples: followers, follows, ... timestamp DATETIME NOT NULL, -- Timestamp in which this entry was created owner_actor_id VARCHAR NOT NULL, -- Local, owning Actor ID, or the #Public magic collection ID diff --git a/core/http_util.js b/core/http_util.js index 0474fc1c9..f9dd540e5 100644 --- a/core/http_util.js +++ b/core/http_util.js @@ -18,6 +18,17 @@ function getJson(url, options, cb) { return cb(err); } + if (Array.isArray(options.validContentTypes)) { + const contentType = res.headers['content-type'] || ''; + if ( + !options.validContentTypes.some(ct => { + return contentType.startsWith(ct); + }) + ) { + return cb(Errors.HttpError(`Invalid Content-Type: ${contentType}`)); + } + } + Log.debug({ url: url, body: body }, 'Response from getJson'); let parsed; try { From 36ebda5269bb6891db2eeedf6400fc17cd9994e8 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 5 Feb 2023 14:43:46 -0700 Subject: [PATCH 120/233] Fix shared inbox delivery for private + public --- core/activitypub/actor.js | 2 +- core/activitypub/note.js | 32 ++++++++++++++++++++++++++------ 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 979b2f1ec..01d2ccdc2 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -28,7 +28,7 @@ const { getISOTimestampString } = require('../database.js'); const moment = require('moment'); const paths = require('path'); -const ActorCacheTTL = moment.duration(1, 'day'); +const ActorCacheTTL = moment.duration(120, 'days'); // https://www.w3.org/TR/activitypub/#actor-objects module.exports = class Actor extends ActivityPubObject { diff --git a/core/activitypub/note.js b/core/activitypub/note.js index 566515b1e..8904e3397 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -13,7 +13,7 @@ const Collection = require('./collection'); const async = require('async'); const { isString, isObject, truncate } = require('lodash'); -const APMessageIdNamespace = '307bc7b3-3735-4573-9a20-e3f9eaac29c5'; +const PublicMessageIdNamespace = 'a26ae389-5dfb-4b24-a58e-5472085c8e42'; const APDefaultSummary = '[ActivityPub]'; module.exports = class Note extends ActivityPubObject { @@ -154,10 +154,26 @@ module.exports = class Note extends ActivityPubObject { return cb(Errors.MissingParam('Missing one or more required options!')); } - // stable ID based on Note ID - const message = new Message({ - uuid: UUIDv5(this.id, APMessageIdNamespace), - }); + const isPrivate = isObject(options.toUser); + + // + // Message UUIDs are unique in the message database; + // However, we may need to deliver a particular message to: + // - #Public / sharedInbox + // - 1:N private user inboxes + // + // In both cases, the UUID is stable. That is, the same ID + // will equal the same UUID as to prevent dupes. + // + const makeMessageUuid = () => { + if (isPrivate) { + // UUID specific to the target user + const url = `${this.id}/${options.toUser.userId}`; + return UUIDv5(url, UUIDv5.URL); + } else { + return UUIDv5(this.id, PublicMessageIdNamespace); + } + }; // Fetch the remote actor info to get their user info Actor.fromId(this.attributedTo, (err, attributedToActor, fromActorSubject) => { @@ -165,13 +181,17 @@ module.exports = class Note extends ActivityPubObject { return cb(err); } + const message = new Message({ + uuid: makeMessageUuid(), + }); + message.fromUserName = fromActorSubject || this.attributedTo; // // Note's can be addressed to 1:N users, but a Message is a 1:1 // relationship. This method requires the mapping up front via options // - if (isObject(options.toUser)) { + if (isPrivate) { message.toUserName = options.toUser.username; message.meta.System[Message.SystemMetaNames.LocalToUserID] = options.toUser.userId; From 0402de7444e628921065545256e69fbcdf772216 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 5 Feb 2023 21:10:51 -0700 Subject: [PATCH 121/233] Ability to send/recv public messages in the AP shared inbox areaTag * Optional subjects * Resolving followers * Various cleanup and tidy --- core/activitypub/activity.js | 19 +- core/activitypub/collection.js | 32 ++- core/activitypub/note.js | 14 +- core/config_default.js | 12 +- core/fse.js | 24 +- core/message_const.js | 5 +- core/scanner_tossers/activitypub.js | 252 +++++++++++++++--- core/servers/content/web.js | 8 + .../content/web_handlers/activitypub.js | 93 +++---- 9 files changed, 340 insertions(+), 119 deletions(-) diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index d5db4112f..700838d2a 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -49,12 +49,25 @@ module.exports = class Activity extends ActivityPubObject { } static makeCreate(webServer, actor, obj) { - return new Activity({ + const activity = new Activity({ id: Activity.activityObjectId(webServer), + to: obj.to, type: WellKnownActivity.Create, actor, object: obj, }); + + const copy = n => { + if (obj[n]) { + activity[n] = obj[n]; + } + }; + + copy('to'); + copy('cc'); + // :TODO: Others? + + return activity; } static makeTombstone(obj) { @@ -68,7 +81,7 @@ module.exports = class Activity extends ActivityPubObject { }); } - sendTo(actorUrl, fromUser, webServer, cb) { + sendTo(inboxEndpoint, fromUser, webServer, cb) { const privateKey = fromUser.getProperty(UserProps.PrivateActivityPubSigningKey); if (_.isEmpty(privateKey)) { return cb( @@ -91,7 +104,7 @@ module.exports = class Activity extends ActivityPubObject { }; const activityJson = JSON.stringify(this); - return postJson(actorUrl, activityJson, reqOpts, cb); + return postJson(inboxEndpoint, activityJson, reqOpts, cb); } // :TODO: we need dp/support a bit more here... diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index a95753d9b..bd09a16a4 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -12,6 +12,7 @@ const { getJson } = require('../http_util'); // deps const { isString } = require('lodash'); +const Log = require('../logger'); module.exports = class Collection extends ActivityPubObject { constructor(obj) { @@ -260,18 +261,33 @@ module.exports = class Collection extends ActivityPubObject { return cb(err); } - entries = entries || []; + try { + entries = (entries || []).map(e => JSON.parse(e.object_json)); + } catch (e) { + Log.error(`Collection "${collectionId}" error: ${e.message}`); + } + if (mapper && entries.length > 0) { entries = entries.map(mapper); } - const obj = { - id: `${collectionId}/page=${page}`, - type: 'OrderedCollectionPage', - totalItems: entries.length, - orderedItems: entries, - partOf: collectionId, - }; + let obj; + if ('all' === page) { + obj = { + id: collectionId, + type: 'OrderedCollection', + totalItems: entries.length, + orderedItems: entries, + }; + } else { + obj = { + id: `${collectionId}/page=${page}`, + type: 'OrderedCollectionPage', + totalItems: entries.length, + orderedItems: entries, + partOf: collectionId, + }; + } return cb(null, new Collection(obj)); } diff --git a/core/activitypub/note.js b/core/activitypub/note.js index 8904e3397..43af40ece 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -50,7 +50,7 @@ module.exports = class Note extends ActivityPubObject { } // A local Message bound for ActivityPub - static fromLocalOutgoingMessage(message, webServer, cb) { + static fromLocalMessage(message, webServer, cb) { const localUserId = message.getLocalFromUserId(); if (!localUserId) { return cb(Errors.UnexpectedState('Invalid user ID for local user!')); @@ -63,7 +63,7 @@ module.exports = class Note extends ActivityPubObject { } const remoteActorAccount = message.getRemoteToUser(); - if (!remoteActorAccount) { + if (!remoteActorAccount && message.isPrivate()) { return cb( Errors.UnexpectedState('Message does not contain a remote address') ); @@ -80,9 +80,13 @@ module.exports = class Note extends ActivityPubObject { }); }, (fromUser, fromActor, callback) => { - Actor.fromId(remoteActorAccount, (err, remoteActor) => { - return callback(err, fromUser, fromActor, remoteActor); - }); + if (message.isPrivate()) { + Actor.fromId(remoteActorAccount, (err, remoteActor) => { + return callback(err, fromUser, fromActor, remoteActor); + }); + } else { + return callback(null, fromUser, fromActor, null); + } }, (fromUser, fromActor, remoteActor, callback) => { if (!message.replyToMsgId) { diff --git a/core/config_default.js b/core/config_default.js index 60885f90a..1dc75678d 100644 --- a/core/config_default.js +++ b/core/config_default.js @@ -904,10 +904,20 @@ module.exports = () => { name: 'System Bulletins', desc: 'Bulletin messages for all users', }, + }, + }, - activitypub_shared_inbox: { + activity_pub: { + name: 'ActivityPub Shared Inbox', + desc: 'Public and shared ActivityPub messages', + + areas: { + activitypub_shared: { name: 'ActivityPub sharedInbox', desc: 'Public shared inbox for ActivityPub', + alwaysExportExternal: true, + subjectOptional: true, + addressFlavor: 'activitypub', }, }, }, diff --git a/core/fse.js b/core/fse.js index 9a9c1f185..fceb7fac2 100644 --- a/core/fse.js +++ b/core/fse.js @@ -174,6 +174,12 @@ exports.FullScreenEditorModule = ) { // Ignore validation errors if this is the subject field // and it's optional + const areaInfo = getMessageAreaByTag(this.messageAreaTag); + if (true === areaInfo.subjectOptional) { + return cb(null, null); + } + + // private messages are a little different... const toView = this.getView('header', MciViewIds.header.to); const msgInfo = messageInfoFromAddressedToInfo( getAddressedToInfo(toView.getData()) @@ -594,7 +600,11 @@ exports.FullScreenEditorModule = function populateLocalUserInfo(callback) { self.message.setLocalFromUserId(self.client.user.userId); - if (!self.isPrivateMail()) { + const areaInfo = getMessageAreaByTag(self.messageAreaTag); + if ( + !self.isPrivateMail() && + true !== areaInfo.alwaysExportExternal + ) { return callback(null); } @@ -636,7 +646,17 @@ exports.FullScreenEditorModule = self.message.toUserName, (err, toUserId) => { if (err) { - return callback(err); + if (self.message.isPrivate()) { + return callback(err); + } + + if (areaInfo.addressFlavor) { + self.message.setExternalFlavor( + areaInfo.addressFlavor + ); + } + + return callback(null); } self.message.setLocalToUserId(toUserId); diff --git a/core/message_const.js b/core/message_const.js index b67992b83..7769663e0 100644 --- a/core/message_const.js +++ b/core/message_const.js @@ -2,10 +2,13 @@ const WellKnownAreaTags = { Invalid: '', Private: 'private_mail', Bulletin: 'local_bulletin', - ActivityPubSharedInbox: 'activitypub_shared_inbox', + ActivityPubShared: 'activitypub_shared', // sharedInbox -> HERE -> exported as replies (direct) and outbox items (new posts) }; exports.WellKnownAreaTags = WellKnownAreaTags; +const WellKnownExternalAreaTags = [WellKnownAreaTags.ActivityPubShared]; +exports.WellKnownExternalAreaTags = WellKnownExternalAreaTags; + const WellKnownMetaCategories = { System: 'System', FtnProperty: 'FtnProperty', diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index 014222f41..9fd896fb7 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -3,12 +3,18 @@ const Message = require('../message'); const { MessageScanTossModule } = require('../msg_scan_toss_module'); const { getServer } = require('../listening_server'); const Log = require('../logger').log; +const { WellKnownAreaTags, AddressFlavor } = require('../message_const'); +const { Errors } = require('../enig_error'); +const Collection = require('../activitypub/collection'); +const Note = require('../activitypub/note'); +const { makeUserUrl } = require('../activitypub/util'); +const { getAddressedToInfo } = require('../mail_util'); +const { PublicCollectionId } = require('../activitypub/const'); +const Actor = require('../activitypub/actor'); // deps const async = require('async'); const _ = require('lodash'); -const Collection = require('../activitypub/collection'); -const Note = require('../activitypub/note'); exports.moduleInfo = { name: 'ActivityPub', @@ -40,19 +46,83 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule return; } + // + // Private: + // Send Note directly to another remote Actor's inbox + // + // Public: + // - The original message may be addressed to a non-ActivityPub address + // or something like "All" or "Public"; In this case, ignore that entry + // - Additionally, we need to send to the local Actor's followers via their sharedInbox + // + // To achieve the above for Public, we'll collect the followers from the local + // user, query their unique shared inboxes's, update the Note's addressing, + // then deliver and store. + // + async.waterfall( [ callback => { - Note.fromLocalOutgoingMessage( + // Private or addressed to a single AP Actor: + Note.fromLocalMessage(message, this._webServer(), (err, noteInfo) => { + return callback(err, noteInfo); + }); + }, + (noteInfo, callback) => { + if (message.isPrivate()) { + if (!noteInfo.remoteActor) { + return callback( + Errors.UnexpectedState( + 'Private messages should contain a remote Actor!' + ) + ); + } + return callback(null, noteInfo, [noteInfo.remoteActor.id]); + } + + // public: we need to build a list of sharedInbox's + this._collectDeliveryEndpoints( message, - this._webServer(), - (err, noteInfo) => { - return callback(err, noteInfo); + noteInfo.fromUser, + (err, deliveryEndpoints) => { + return callback(err, noteInfo, deliveryEndpoints); } ); }, - (noteInfo, callback) => { - const { note, fromUser, remoteActor } = noteInfo; + (noteInfo, deliveryEndpoints, callback) => { + const { note, fromUser } = noteInfo; + + // + // Update the Note's addressing: + // - Private: + // to: sharedInboxEndpoints[0] + // - Public: + // to: https://www.w3.org/ns/activitystreams#Public + // ... and the message.getRemoteToUser() value *if* + // the flavor is deemed ActivityPub + // cc: [sharedInboxEndpoints] + // + if (message.isPrivate()) { + note.to = deliveryEndpoints.sharedInboxes[0]; + } else { + if (deliveryEndpoints.additionalTo) { + note.to = [ + PublicCollectionId, + deliveryEndpoints.additionalTo, + ]; + } else { + note.to = PublicCollectionId; + } + note.cc = [ + deliveryEndpoints.followers, + ...deliveryEndpoints.sharedInboxes, + ]; + + if (note.to.length < 2 && note.cc.length < 2) { + // If we only have a generic 'followers' endpoint, there is no where to send to + return callback(null, activity, fromUser); + } + } const activity = Activity.makeCreate( this._webServer(), @@ -60,41 +130,59 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule note ); - // :TODO: Implement retry logic (connection issues, retryable HTTP status) ?? - const inbox = remoteActor.inbox; + let allEndpoints = deliveryEndpoints.sharedInboxes; + if (deliveryEndpoints.additionalTo) { + allEndpoints.push(deliveryEndpoints.additionalTo); + } + allEndpoints = Array.from(new Set(allEndpoints)); // unique again - // const inbox = remoteActor.endpoints.sharedInbox; - // activity.object.to = 'https://www.w3.org/ns/activitystreams#Public'; + async.eachLimit( + allEndpoints, + 4, + (inbox, nextInbox) => { + activity.sendTo( + inbox, + fromUser, + this._webServer(), + (err, respBody, res) => { + if (err) { + this.log.warn( + { + inbox, + error: err.message, + }, + 'Failed to send "Note" Activity to Inbox' + ); + } else if ( + res.statusCode === 200 || + res.statusCode === 202 + ) { + this.log.debug( + { inbox, uuid: message.uuid }, + 'Message delivered to Inbox' + ); + } else { + this.log.warn( + { + inbox, + statusCode: res.statusCode, + body: _.truncate(respBody, 128), + }, + 'Unexpected status code' + ); + } - activity.sendTo( - inbox, - fromUser, - this._webServer(), - (err, respBody, res) => { - if (err) { - this.log.warn( - { error: err.message, inbox: remoteActor.inbox }, - 'Failed to send "Note" Activity to Inbox' - ); - } else if (res.statusCode !== 202 && res.statusCode !== 200) { - this.log.warn( - { - inbox: remoteActor.inbox, - statusCode: res.statusCode, - body: _.truncate(respBody, 128), - }, - 'Unexpected status code' - ); - } - - // carry on regardless if we sent and record - // the item in the user's Outbox collection + // If we can't send now, no harm, we'll record to the outbox + return nextInbox(null); + } + ); + }, + () => { return callback(null, activity, fromUser); } ); }, (activity, fromUser, callback) => { - // If we failed to send above, Collection.addOutboxItem( fromUser, activity, @@ -166,6 +254,90 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule ); } + _collectDeliveryEndpoints(message, localUser, cb) { + this._collectFollowersSharedInboxEndpoints( + localUser, + (err, endpoints, followersEndpoint) => { + if (err) { + return cb(err); + } + + // + // Don't inspect the remote address/remote to + // Here; We already know this in a public + // area. Instead, see if the user typed in + // a reasonable AP address here. If so, we'll + // try to send directly to them as well. + // + const addrInfo = getAddressedToInfo(message.toUserName); + if ( + !message.isPrivate() && + AddressFlavor.ActivityPub === addrInfo.flavor + ) { + Actor.fromId(addrInfo.remote, (err, actor) => { + if (err) { + return cb(err); + } + + return cb(null, { + additionalTo: actor.id, + sharedInboxes: endpoints, + followers: followersEndpoint, + }); + }); + } else { + return cb(null, { + sharedInboxes: endpoints, + followers: followersEndpoint, + }); + } + } + ); + } + + _collectFollowersSharedInboxEndpoints(localUser, cb) { + const localFollowersEndpoint = + makeUserUrl(this._webServer(), localUser, '/ap/users/') + '/followers'; + + Collection.followers(localFollowersEndpoint, 'all', (err, collection) => { + if (err) { + return cb(err); + } + + if (!collection.orderedItems || collection.orderedItems.length < 1) { + // no followers :( + return cb(null, []); + } + + async.mapLimit( + collection.orderedItems, + 4, + (actorId, nextActorId) => { + Actor.fromId(actorId, (err, actor) => { + return nextActorId(err, actor); + }); + }, + (err, followerActors) => { + if (err) { + return cb(err); + } + + const sharedInboxEndpoints = Array.from( + new Set( + followerActors + .map(actor => { + return _.get(actor, 'endpoints.sharedInbox'); + }) + .filter(inbox => inbox) // drop nulls + ) + ); + + return cb(null, sharedInboxEndpoints, localFollowersEndpoint); + } + ); + }); + } + _isEnabled() { // :TODO: check config to see if AP integration is enabled/etc. return this._webServer(); @@ -183,7 +355,13 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule return true; } - // :TODO: Implement the area mapping check for public + // Public items do not need a specific 'to'; we'll record to the + // local Actor's outbox and send to any followers we know about + if (message.areaTag === WellKnownAreaTags.ActivityPubShared) { + return true; + } + + // :TODO: Implement the area mapping check for public 'groups' return false; } diff --git a/core/servers/content/web.js b/core/servers/content/web.js index 8042ec474..4c3a551c6 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -326,6 +326,14 @@ exports.getModule = class WebServerModule extends ServerModule { }); } + ok(resp, body = '', headers = { 'Content-Type:': 'text/html' }) { + if (body && !headers['Content-Length']) { + headers['Content-Length'] = Buffer(body).length; + } + resp.writeHead(200, 'OK', body ? headers : null); + return resp.end(body); + } + created(resp, body = '', headers = { 'Content-Type:': 'text/html' }) { resp.writeHead(201, 'Created', body ? headers : null); return resp.end(body); diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 3527233d1..b01fbc8d5 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -189,20 +189,14 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { req.on('end', () => { const activity = Activity.fromJsonString(Buffer.concat(body).toString()); - if (!activity) { + if (!activity || !activity.isValid()) { this.log.error( { url: req.url, method: req.method, endpoint: 'inbox' }, - 'Failed to parse Activity' - ); - return this.webServer.resourceNotFound(resp); - } - - if (!activity.isValid()) { - this.log.warn( - { activity, endpoint: 'inbox' }, 'Invalid or unsupported Activity' ); - return this.webServer.badRequest(resp); + return activity + ? this.webServer.badRequest(resp) + : this.webServer.notImplemented(resp); } switch (activity.type) { @@ -247,7 +241,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { break; } - return this.webServer.resourceNotFound(resp); + return this.webServer.notImplemented(resp); }); } @@ -259,20 +253,14 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { req.on('end', () => { const activity = Activity.fromJsonString(Buffer.concat(body).toString()); - if (!activity) { + if (!activity || !activity.isValid()) { this.log.error( { url: req.url, method: req.method, endpoint: 'sharedInbox' }, - 'Failed to parse Activity' - ); - return this.webServer.resourceNotFound(resp); - } - - if (!activity.isValid()) { - this.log.warn( - { activity, endpoint: 'sharedInbox' }, 'Invalid or unsupported Activity' ); - return this.webServer.badRequest(resp); + return activity + ? this.webServer.badRequest(resp) + : this.webServer.notImplemented(resp); } switch (activity.type) { @@ -287,8 +275,11 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { { type: activity.type }, 'Invalid or unknown Activity type' ); - return this.webServer.resourceNotFound(resp); + break; } + + // don't understand the 'type' + return this.webServer.notImplemented(resp); }); } @@ -309,28 +300,28 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } inboxUpdateObject(inboxType, req, resp, activity) { - const objectIdToUpdate = _.get(activity, 'object.id'); + const updateObjectId = _.get(activity, 'object.id'); const objectType = _.get(activity, 'object.type'); this.log.info( - { inboxType, objectId: objectIdToUpdate, type: objectType }, + { inboxType, objectId: updateObjectId, type: objectType }, 'Inbox Object "Update" request' ); // :TODO: other types... - if (!objectIdToUpdate || !['Note'].includes(objectType)) { - return this.webServer.resourceNotFound(resp); + if (!updateObjectId || !['Note'].includes(objectType)) { + return this.webServer.notImplemented(resp); } // Note's are wrapped in Create Activities - Collection.objectByEmbeddedId(objectIdToUpdate, (err, obj) => { + Collection.objectByEmbeddedId(updateObjectId, (err, obj) => { if (err) { return this.webServer.internalServerError(resp, err); } if (!obj) { - // no match - return this.webServer.resourceNotFound(resp); + // no match, but respond as accepted and hopefully they don't ask again + return this.webServer.accepted(resp); } // OK, the object exists; Does the caller have permission @@ -346,7 +337,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { if (updateTargetUrl.host !== updaterUrl.host) { this.log.warn( { - objectId: objectIdToUpdate, + objectId: updateObjectId, type: objectType, updateTargetHost: updateTargetUrl.host, requestorHost: updaterUrl.host, @@ -358,7 +349,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { Collection.updateCollectionEntry( 'inbox', - objectIdToUpdate, + updateObjectId, activity, err => { if (err) { @@ -367,7 +358,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { this.log.info( { - objectId: objectIdToUpdate, + objectId: updateObjectId, type: objectType, collection: 'inbox', }, @@ -444,7 +435,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this._storeNoteAsMessage( activity.id, 'All', - Message.WellKnownAreaTags.ActivityPubSharedInbox, + Message.WellKnownAreaTags.ActivityPubShared, note, cb ); @@ -527,13 +518,9 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } const body = JSON.stringify(collection); - const headers = { + return this.webServer.ok(resp, body, { 'Content-Type': ActivityStreamMediaType, - 'Content-Length': Buffer(body).length, - }; - - resp.writeHead(200, headers); - return resp.end(body); + }); }); } @@ -568,8 +555,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { // :TODO: support a template here - resp.writeHead(200, { 'Content-Type': 'text/html' }); - return resp.end(note.content); + return this.webServer.ok(resp, note.content); }); } @@ -619,11 +605,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { 'Follow request' ); - const ok = () => { - resp.writeHead(200, { 'Content-Type': 'text/html' }); - return resp.end(''); - }; - // // If the user blindly accepts Followers, we can persist // and send an 'Accept' now. Otherwise, we need to queue this @@ -633,7 +614,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { const activityPubSettings = ActivityPubSettings.fromUser(localUser); if (!activityPubSettings.manuallyApproveFollowers) { this._recordAcceptedFollowRequest(localUser, remoteActor, activity); - return ok(); + return this.webServer.ok(resp); } else { Collection.addFollowRequest( localUser, @@ -645,7 +626,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.internalServerError(resp, err); } - return ok(); + return this.webServer.ok(resp); } ); } @@ -836,13 +817,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { const body = JSON.stringify(localActor); - const headers = { - 'Content-Type': ActivityStreamMediaType, - 'Content-Length': Buffer(body).length, - }; - - resp.writeHead(200, headers); - return resp.end(body); + return this.webServer.ok(resp, body, { 'Content-Type': ActivityStreamMediaType }); } _standardSelfHandler(localUser, localActor, req, resp) { @@ -872,13 +847,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { `Serving ActivityPub Profile for "${localUser.username}"` ); - const headers = { - 'Content-Type': contentType, - 'Content-Length': Buffer(body).length, - }; - - resp.writeHead(200, headers); - return resp.end(body); + return this.webServer.ok(resp, body, { 'Content-Type': contentType }); } ); } From 27da2bb108a8e0705b5343e99e9563d1759308c6 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 5 Feb 2023 21:13:34 -0700 Subject: [PATCH 122/233] Don't log entire JSON payloads --- core/http_util.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/core/http_util.js b/core/http_util.js index f9dd540e5..0692e3f0e 100644 --- a/core/http_util.js +++ b/core/http_util.js @@ -5,7 +5,6 @@ const { isString, isObject, truncate } = require('lodash'); const https = require('https'); const httpSignature = require('http-signature'); const crypto = require('crypto'); -const Log = require('./logger').log; exports.getJson = getJson; exports.postJson = postJson; @@ -29,7 +28,6 @@ function getJson(url, options, cb) { } } - Log.debug({ url: url, body: body }, 'Response from getJson'); let parsed; try { parsed = JSON.parse(body); From 834dfd693fdce7a05a9c00e79d7225536ed9e78e Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 5 Feb 2023 21:17:57 -0700 Subject: [PATCH 123/233] Fix a dumb typo --- core/scanner_tossers/activitypub.js | 6 +++--- core/servers/content/web.js | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index 9fd896fb7..8655dcdcd 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -178,11 +178,11 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule ); }, () => { - return callback(null, activity, fromUser); + return callback(null, activity, fromUser, note); } ); }, - (activity, fromUser, callback) => { + (activity, fromUser, note, callback) => { Collection.addOutboxItem( fromUser, activity, @@ -192,7 +192,7 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule (err, localId) => { if (!err) { this.log.debug( - { localId, activityId: activity.id }, + { localId, activityId: activity.id, noteId: note.id }, 'Note Activity persisted to "outbox" collection"' ); } diff --git a/core/servers/content/web.js b/core/servers/content/web.js index 4c3a551c6..92a38dbb7 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -326,7 +326,7 @@ exports.getModule = class WebServerModule extends ServerModule { }); } - ok(resp, body = '', headers = { 'Content-Type:': 'text/html' }) { + ok(resp, body = '', headers = { 'Content-Type': 'text/html' }) { if (body && !headers['Content-Length']) { headers['Content-Length'] = Buffer(body).length; } @@ -334,12 +334,12 @@ exports.getModule = class WebServerModule extends ServerModule { return resp.end(body); } - created(resp, body = '', headers = { 'Content-Type:': 'text/html' }) { + created(resp, body = '', headers = { 'Content-Type': 'text/html' }) { resp.writeHead(201, 'Created', body ? headers : null); return resp.end(body); } - accepted(resp, body = '', headers = { 'Content-Type:': 'text/html' }) { + accepted(resp, body = '', headers = { 'Content-Type': 'text/html' }) { resp.writeHead(202, 'Accepted', body ? headers : null); return resp.end(body); } From 926f45b917ed6e7503835a345346b25850f12554 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 6 Feb 2023 14:34:18 -0700 Subject: [PATCH 124/233] Clean up URLs to use central area, less confusion --- core/activitypub/activity.js | 4 +- core/activitypub/actor.js | 22 +++----- core/activitypub/collection.js | 17 +++---- core/activitypub/endpoint.js | 51 +++++++++++++++++++ core/activitypub/util.js | 40 +++++++-------- core/scanner_tossers/activitypub.js | 5 +- .../content/web_handlers/activitypub.js | 8 ++- .../servers/content/web_handlers/webfinger.js | 7 ++- 8 files changed, 94 insertions(+), 60 deletions(-) create mode 100644 core/activitypub/endpoint.js diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index 700838d2a..5f51c0bd7 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -1,4 +1,3 @@ -const { localActorId } = require('./util'); const { ActivityStreamMediaType, WellKnownActivityTypes, @@ -6,6 +5,7 @@ const { WellKnownRecipientFields, HttpSignatureSignHeaders, } = require('./const'); +const Endpoints = require('./endpoint'); const ActivityPubObject = require('./object'); const { Errors } = require('../enig_error'); const UserProps = require('../user_property'); @@ -97,7 +97,7 @@ module.exports = class Activity extends ActivityPubObject { }, sign: { key: privateKey, - keyId: localActorId(webServer, fromUser) + '#main-key', + keyId: Endpoints.actorId(webServer, fromUser) + '#main-key', authorizationHeaderName: 'Signature', headers: HttpSignatureSignHeaders, }, diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 01d2ccdc2..1352a8b0c 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -4,14 +4,8 @@ // ENiGMA½ const { Errors } = require('../enig_error.js'); const UserProps = require('../user_property'); -const { - ActivityStreamsContext, - webFingerProfileUrl, - makeUserUrl, - isValidLink, - makeSharedInboxUrl, - userNameFromSubject, -} = require('./util'); +const { ActivityStreamsContext, isValidLink, userNameFromSubject } = require('./util'); +const Endpoints = require('./endpoint'); const Log = require('../logger').log; const { queryWebFinger } = require('../webfinger'); const EnigAssert = require('../enigma_assert'); @@ -113,14 +107,14 @@ module.exports = class Actor extends ActivityPubObject { ? user.getSanitizedName('real') : user.username, endpoints: { - sharedInbox: makeSharedInboxUrl(webServer), + sharedInbox: Endpoints.sharedInbox(webServer), }, - inbox: makeUserUrl(webServer, user, '/ap/users/') + '/inbox', - outbox: makeUserUrl(webServer, user, '/ap/users/') + '/outbox', - followers: makeUserUrl(webServer, user, '/ap/users/') + '/followers', - following: makeUserUrl(webServer, user, '/ap/users/') + '/following', + inbox: Endpoints.inbox(webServer, user), + outbox: Endpoints.outbox(webServer, user), + followers: Endpoints.followers(webServer, user), + following: Endpoints.following(webServer, user), summary: user.getProperty(UserProps.AutoSignature) || '', - url: webFingerProfileUrl(webServer, user), + url: Endpoints.profile(webServer, user), manuallyApprovesFollowers: userSettings.manuallyApprovesFollowers, discoverable: userSettings.discoverable, // :TODO: we can start to define BBS related stuff with the community perhaps diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index bd09a16a4..d31c32d50 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -1,4 +1,5 @@ -const { makeUserUrl, parseTimestampOrNow } = require('./util'); +const { parseTimestampOrNow } = require('./util'); +const Endpoints = require('./endpoint'); const ActivityPubObject = require('./object'); const apDb = require('../database').dbs.activitypub; const { getISOTimestampString } = require('../database'); @@ -73,8 +74,7 @@ module.exports = class Collection extends ActivityPubObject { } static addFollower(owningUser, followingActor, webServer, ignoreDupes, cb) { - const collectionId = - makeUserUrl(webServer, owningUser, '/ap/users/') + '/followers'; + const collectionId = Endpoints.followers(webServer, owningUser); return Collection.addToCollection( 'followers', owningUser, @@ -89,7 +89,7 @@ module.exports = class Collection extends ActivityPubObject { static addFollowRequest(owningUser, requestingActor, webServer, ignoreDupes, cb) { const collectionId = - makeUserUrl(webServer, owningUser, '/ap/users/') + '/follow-requests'; + Endpoints.makeUserUrl(webServer, owningUser) + 'follow-requests'; return Collection.addToCollection( 'follow-requests', owningUser, @@ -103,8 +103,7 @@ module.exports = class Collection extends ActivityPubObject { } static addFollowing(owningUser, followingActor, webServer, ignoreDupes, cb) { - const collectionId = - makeUserUrl(webServer, owningUser, '/ap/users/') + '/following'; + const collectionId = Endpoints.following(webServer, owningUser); return Collection.addToCollection( 'following', owningUser, @@ -122,7 +121,7 @@ module.exports = class Collection extends ActivityPubObject { } static addOutboxItem(owningUser, outboxItem, isPrivate, webServer, ignoreDupes, cb) { - const collectionId = makeUserUrl(webServer, owningUser, '/ap/users/') + '/outbox'; + const collectionId = Endpoints.outbox(webServer, owningUser); return Collection.addToCollection( 'outbox', owningUser, @@ -136,7 +135,7 @@ module.exports = class Collection extends ActivityPubObject { } static addInboxItem(inboxItem, owningUser, webServer, ignoreDupes, cb) { - const collectionId = makeUserUrl(webServer, owningUser, '/ap/users/') + '/inbox'; + const collectionId = Endpoints.inbox(webServer, owningUser); return Collection.addToCollection( 'inbox', owningUser, @@ -315,7 +314,7 @@ module.exports = class Collection extends ActivityPubObject { // e.g. http://somewhere.com/_enig/ap/users/NuSkooler/followers const collectionId = - makeUserUrl(webServer, owningUser, '/ap/users/') + `/${collectionName}`; + Endpoints.makeUserUrl(webServer, owningUser) + `/${collectionName}`; if (!page) { return apDb.get( diff --git a/core/activitypub/endpoint.js b/core/activitypub/endpoint.js new file mode 100644 index 000000000..8e2deff52 --- /dev/null +++ b/core/activitypub/endpoint.js @@ -0,0 +1,51 @@ +const { WellKnownLocations } = require('../servers/content/web'); + +exports.makeUserUrl = makeUserUrl; +exports.inbox = inbox; +exports.outbox = outbox; +exports.followers = followers; +exports.following = following; +exports.actorId = actorId; +exports.profile = profile; +exports.avatar = avatar; +exports.sharedInbox = sharedInbox; + +const ActivityPubUsersPrefix = '/ap/users/'; + +function makeUserUrl(webServer, user, relPrefix = ActivityPubUsersPrefix) { + return webServer.buildUrl( + WellKnownLocations.Internal + `${relPrefix}${user.username}` + ); +} + +function inbox(webServer, user) { + return makeUserUrl(webServer, user, ActivityPubUsersPrefix) + '/inbox'; +} + +function outbox(webServer, user) { + return makeUserUrl(webServer, user, ActivityPubUsersPrefix) + '/outbox'; +} + +function followers(webServer, user) { + return makeUserUrl(webServer, user, ActivityPubUsersPrefix) + '/followers'; +} + +function following(webServer, user) { + return makeUserUrl(webServer, user, ActivityPubUsersPrefix) + '/following'; +} + +function actorId(webServer, user) { + return makeUserUrl(webServer, user, ActivityPubUsersPrefix); +} + +function profile(webServer, user) { + return webServer.buildUrl(WellKnownLocations.Internal + `/wf/@${user.username}`); +} + +function avatar(webServer, user, filename) { + return makeUserUrl(this.webServer, user, '/users/') + `/avatar/${filename}`; +} + +function sharedInbox(webServer) { + return webServer.buildUrl(WellKnownLocations.Internal + '/ap/shared-inbox'); +} diff --git a/core/activitypub/util.js b/core/activitypub/util.js index a753eec59..ae7bd8df2 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -1,4 +1,3 @@ -const { WellKnownLocations } = require('../servers/content/web'); const User = require('../user'); const { Errors, ErrorReasons } = require('../enig_error'); const UserProps = require('../user_property'); @@ -21,16 +20,13 @@ exports.ActivityStreamsContext = 'https://www.w3.org/ns/activitystreams'; exports.parseTimestampOrNow = parseTimestampOrNow; exports.isValidLink = isValidLink; -exports.makeSharedInboxUrl = makeSharedInboxUrl; -exports.makeUserUrl = makeUserUrl; -exports.webFingerProfileUrl = webFingerProfileUrl; -exports.localActorId = localActorId; exports.userFromActorId = userFromActorId; exports.getUserProfileTemplatedBody = getUserProfileTemplatedBody; exports.messageBodyToHtml = messageBodyToHtml; exports.messageToHtml = messageToHtml; exports.htmlToMessageBody = htmlToMessageBody; exports.userNameFromSubject = userNameFromSubject; +exports.extractMessageMetadata = extractMessageMetadata; // :TODO: more info in default // this profile template is the *default* for both WebFinger @@ -58,24 +54,6 @@ function isValidLink(l) { return /^https?:\/\/.+$/.test(l); } -function makeSharedInboxUrl(webServer) { - return webServer.buildUrl(WellKnownLocations.Internal + '/ap/shared-inbox'); -} - -function makeUserUrl(webServer, user, relPrefix) { - return webServer.buildUrl( - WellKnownLocations.Internal + `${relPrefix}${user.username}` - ); -} - -function webFingerProfileUrl(webServer, user) { - return webServer.buildUrl(WellKnownLocations.Internal + `/wf/@${user.username}`); -} - -function localActorId(webServer, user) { - return makeUserUrl(webServer, user, '/ap/users/'); -} - function userFromActorId(actorId, cb) { User.getUserIdsWithProperty(UserProps.ActivityPubActorId, actorId, (err, userId) => { if (err) { @@ -247,3 +225,19 @@ function htmlToMessageBody(html) { function userNameFromSubject(subject) { return subject.replace(/^acct:(.+)$/, '$1'); } + +function extractMessageMetadata(body) { + const metadata = { mentions: new Set(), hashTags: new Set() }; + + const re = /(@\w+)|(#[A-Za-z0-9_]+)/g; + const matches = body.matchAll(re); + for (const m of matches) { + if (m[1]) { + metadata.mentions.add(m[1]); + } else if (m[2]) { + metadata.hashTags.add(m[2]); + } + } + + return metadata; +} diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index 8655dcdcd..795da9591 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -7,7 +7,7 @@ const { WellKnownAreaTags, AddressFlavor } = require('../message_const'); const { Errors } = require('../enig_error'); const Collection = require('../activitypub/collection'); const Note = require('../activitypub/note'); -const { makeUserUrl } = require('../activitypub/util'); +const Endpoints = require('../activitypub/endpoint'); const { getAddressedToInfo } = require('../mail_util'); const { PublicCollectionId } = require('../activitypub/const'); const Actor = require('../activitypub/actor'); @@ -296,8 +296,7 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule } _collectFollowersSharedInboxEndpoints(localUser, cb) { - const localFollowersEndpoint = - makeUserUrl(this._webServer(), localUser, '/ap/users/') + '/followers'; + const localFollowersEndpoint = Endpoints.followers(this._webServer(), localUser); Collection.followers(localFollowersEndpoint, 'all', (err, collection) => { if (err) { diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index b01fbc8d5..5ee96c8ae 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -3,9 +3,8 @@ const { userFromActorId, getUserProfileTemplatedBody, DefaultProfileTemplate, - makeUserUrl, - localActorId, } = require('../../../activitypub/util'); +const Endpoints = require('../../../activitypub/endpoint'); const { ActivityStreamMediaType } = require('../../../activitypub/const'); const Config = require('../../../config').get; const Activity = require('../../../activitypub/activity'); @@ -858,7 +857,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { `Preparing ActivityPub settings for "${user.username}"` ); - const actorId = localActorId(this.webServer, user); + const actorId = Endpoints.actorId(this.webServer, user); user.setProperty(UserProps.ActivityPubActorId, actorId); user.updateActivityPubKeyPairProperties(err => { @@ -882,8 +881,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { const apSettings = ActivityPubSettings.fromUser(user); const filename = paths.basename(outPath); - const avatarUrl = - makeUserUrl(this.webServer, user, '/users/') + `/avatar/${filename}`; + const avatarUrl = Endpoints.avatar(this.webServer, user, filename); apSettings.image = avatarUrl; apSettings.icon = avatarUrl; diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index 1f32150a8..9326946b5 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -3,11 +3,10 @@ const Config = require('../../../config').get; const { Errors, ErrorReasons } = require('../../../enig_error'); const { WellKnownLocations } = require('../web'); const { - localActorId, - webFingerProfileUrl, getUserProfileTemplatedBody, DefaultProfileTemplate, } = require('../../../activitypub/util'); +const Endpoints = require('../../../activitypub/endpoint'); const EngiAssert = require('../../../enigma_assert'); const User = require('../../../user'); const UserProps = require('../../../user_property'); @@ -220,7 +219,7 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { } _profileUrl(user) { - return webFingerProfileUrl(this.webServer, user); + return Endpoints.profile(this.webServer, user); } _profilePageLink(user) { @@ -233,7 +232,7 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { } _userActorId(user) { - return localActorId(this.webServer, user); + return Endpoints.actorId(this.webServer, user); } // :TODO: only if ActivityPub is enabled From 1b684e2f2be94a63905ab458824d76d7b47b425e Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 6 Feb 2023 18:27:12 -0700 Subject: [PATCH 125/233] Clean up contexts in objects --- core/activitypub/activity.js | 23 ++++++++------- core/activitypub/actor.js | 23 +++++++-------- core/activitypub/endpoint.js | 10 +++++++ core/activitypub/note.js | 19 +++++++----- core/activitypub/object.js | 46 +++++++++++++++++++++-------- core/scanner_tossers/activitypub.js | 5 ++-- 6 files changed, 81 insertions(+), 45 deletions(-) diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index 5f51c0bd7..2d774d06b 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -16,8 +16,8 @@ const { getISOTimestampString } = require('../database'); const _ = require('lodash'); module.exports = class Activity extends ActivityPubObject { - constructor(obj) { - super(obj); + constructor(obj, withContext = ActivityPubObject.DefaultContext) { + super(obj, withContext); } static get ActivityTypes() { @@ -48,14 +48,17 @@ module.exports = class Activity extends ActivityPubObject { }); } - static makeCreate(webServer, actor, obj) { - const activity = new Activity({ - id: Activity.activityObjectId(webServer), - to: obj.to, - type: WellKnownActivity.Create, - actor, - object: obj, - }); + static makeCreate(webServer, actor, obj, context) { + const activity = new Activity( + { + id: Activity.activityObjectId(webServer), + to: obj.to, + type: WellKnownActivity.Create, + actor, + object: obj, + }, + context + ); const copy = n => { if (obj[n]) { diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 1352a8b0c..db54a5d95 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -4,8 +4,8 @@ // ENiGMA½ const { Errors } = require('../enig_error.js'); const UserProps = require('../user_property'); -const { ActivityStreamsContext, isValidLink, userNameFromSubject } = require('./util'); const Endpoints = require('./endpoint'); +const { userNameFromSubject, isValidLink } = require('./util'); const Log = require('../logger').log; const { queryWebFinger } = require('../webfinger'); const EnigAssert = require('../enigma_assert'); @@ -24,10 +24,17 @@ const paths = require('path'); const ActorCacheTTL = moment.duration(120, 'days'); +// default context for Actor's +const DefaultContext = ActivityPubObject.makeContext(['https://w3id.org/security/v1'], { + toot: 'http://joinmastodon.org/ns#', + discoverable: 'toot:discoverable', + manuallyApprovesFollowers: 'as:manuallyApprovesFollowers', +}); + // https://www.w3.org/TR/activitypub/#actor-objects module.exports = class Actor extends ActivityPubObject { - constructor(obj) { - super(obj); + constructor(obj, withContext = DefaultContext) { + super(obj, withContext); } isValid() { @@ -90,16 +97,6 @@ module.exports = class Actor extends ActivityPubObject { }; const obj = { - '@context': [ - ActivityStreamsContext, - 'https://w3id.org/security/v1', // :TODO: add support - { - bbsInfo: { - '@id': 'bbs:bbsInfo', - '@type': '@id', - }, - }, - ], id: userActorId, type: 'Person', preferredUsername: user.username, diff --git a/core/activitypub/endpoint.js b/core/activitypub/endpoint.js index 8e2deff52..5e9816940 100644 --- a/core/activitypub/endpoint.js +++ b/core/activitypub/endpoint.js @@ -1,5 +1,8 @@ const { WellKnownLocations } = require('../servers/content/web'); +// deps +const { v4: UUIDv4 } = require('uuid'); + exports.makeUserUrl = makeUserUrl; exports.inbox = inbox; exports.outbox = outbox; @@ -9,6 +12,7 @@ exports.actorId = actorId; exports.profile = profile; exports.avatar = avatar; exports.sharedInbox = sharedInbox; +exports.objectId = objectId; const ActivityPubUsersPrefix = '/ap/users/'; @@ -49,3 +53,9 @@ function avatar(webServer, user, filename) { function sharedInbox(webServer) { return webServer.buildUrl(WellKnownLocations.Internal + '/ap/shared-inbox'); } + +function objectId(webServer, objectType) { + return webServer.buildUrl( + WellKnownLocations.Internal + `/ap/${UUIDv4()}/${objectType}` + ); +} diff --git a/core/activitypub/note.js b/core/activitypub/note.js index 43af40ece..ec908d64d 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -18,7 +18,7 @@ const APDefaultSummary = '[ActivityPub]'; module.exports = class Note extends ActivityPubObject { constructor(obj) { - super(obj); + super(obj, null); // Note are wrapped } isValid() { @@ -127,24 +127,29 @@ module.exports = class Note extends ActivityPubObject { published: getISOTimestampString(message.modTimestamp), to, attributedTo: fromActor.id, + summary: message.subject.trim(), content: messageToHtml(message), source: { content: message.message, mediaType: sourceMediaType, }, + sensitive: message.subject.startsWith('[NSFW]'), }; if (replyToNoteId) { obj.inReplyTo = replyToNoteId; } - // ignore the subject if it's our default summary value for replies - if (message.subject !== `RE: ${APDefaultSummary}`) { - obj.summary = message.subject; - } - const note = new Note(obj); - return callback(null, { note, fromUser, remoteActor }); + const context = ActivityPubObject.makeContext([], { + sensitive: 'as:sensitive', + }); + return callback(null, { + note, + fromUser, + remoteActor, + context, + }); }, ], (err, noteInfo) => { diff --git a/core/activitypub/object.js b/core/activitypub/object.js index d2286f45f..50fa04f27 100644 --- a/core/activitypub/object.js +++ b/core/activitypub/object.js @@ -1,16 +1,32 @@ const { ActivityStreamsContext } = require('./util'); -const { WellKnownLocations } = require('../servers/content/web'); +const Endpoints = require('./endpoint'); // deps -const { isString } = require('lodash'); -const { v4: UUIDv4 } = require('uuid'); +const { isString, isObject } = require('lodash'); module.exports = class ActivityPubObject { - constructor(obj) { - this['@context'] = ActivityStreamsContext; + constructor(obj, withContext = [ActivityStreamsContext]) { + if (withContext) { + this.setContext(withContext); + } Object.assign(this, obj); } + static get DefaultContext() { + return [ActivityStreamsContext]; + } + + static makeContext(namespaceUrls, aliases = null) { + const context = [ActivityStreamsContext]; + if (Array.isArray(namespaceUrls)) { + context.push(...namespaceUrls); + } + if (isObject(aliases)) { + context.push(aliases); + } + return context; + } + static fromJsonString(s) { let obj; try { @@ -23,23 +39,27 @@ module.exports = class ActivityPubObject { } isValid() { - const nes = s => isString(s) && s.length > 1; + const nonEmpty = s => isString(s) && s.length > 1; // :TODO: Additional validation if ( (this['@context'] === ActivityStreamsContext || this['@context'][0] === ActivityStreamsContext) && - nes(this.id) && - nes(this.type) + nonEmpty(this.id) && + nonEmpty(this.type) ) { return true; } return false; } - static makeObjectId(webServer, suffix) { - // e.g. http://some.host/_enig/ap/bf81a22e-cb3e-41c8-b114-21f375b61124/activity - return webServer.buildUrl( - WellKnownLocations.Internal + `/ap/${UUIDv4()}/${suffix}` - ); + setContext(context) { + if (!Array.isArray(context)) { + context = [context]; + } + this['@context'] = context; + } + + static makeObjectId(webServer, objectType) { + return Endpoints.objectId(webServer, objectType); } }; diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index 795da9591..9e0da50c7 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -90,7 +90,7 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule ); }, (noteInfo, deliveryEndpoints, callback) => { - const { note, fromUser } = noteInfo; + const { note, fromUser, context } = noteInfo; // // Update the Note's addressing: @@ -127,7 +127,8 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule const activity = Activity.makeCreate( this._webServer(), note.attributedTo, - note + note, + context ); let allEndpoints = deliveryEndpoints.sharedInboxes; From c9b3c9bc412f807fe09a87b4a7794e39654fa2ac Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 6 Feb 2023 22:18:09 -0700 Subject: [PATCH 126/233] Better context check --- core/activitypub/object.js | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/core/activitypub/object.js b/core/activitypub/object.js index 50fa04f27..018dabcac 100644 --- a/core/activitypub/object.js +++ b/core/activitypub/object.js @@ -4,6 +4,8 @@ const Endpoints = require('./endpoint'); // deps const { isString, isObject } = require('lodash'); +const Context = '@context'; + module.exports = class ActivityPubObject { constructor(obj, withContext = [ActivityStreamsContext]) { if (withContext) { @@ -39,16 +41,31 @@ module.exports = class ActivityPubObject { } isValid() { - const nonEmpty = s => isString(s) && s.length > 1; - // :TODO: Additional validation - if ( - (this['@context'] === ActivityStreamsContext || - this['@context'][0] === ActivityStreamsContext) && - nonEmpty(this.id) && - nonEmpty(this.type) - ) { - return true; + // + // If @context is present, it must be valid; + // child objects generally inherit, so they may not have one + // + if (this[Context]) { + if (!this.isContextValid()) { + return false; + } + } + + const checkString = s => isString(s) && s.length > 1; + return checkString(this.id) && checkString(this.type); + } + + isContextValid() { + if (Array.isArray(this[Context])) { + if (this[Context][0] === ActivityStreamsContext) { + return true; + } + } else if (isString(this[Context])) { + if (ActivityStreamsContext === this[Context]) { + return true; + } } + return false; } From 39a49f00bede5f77836fed4358df6ff00747abb2 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 6 Feb 2023 22:45:01 -0700 Subject: [PATCH 127/233] Cleanup --- core/activitypub/collection.js | 13 ++++++++++++- core/activitypub/endpoint.js | 2 +- core/servers/content/web_handlers/activitypub.js | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index d31c32d50..9b821c87a 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -457,7 +457,7 @@ module.exports = class Collection extends ActivityPubObject { ); } - static removeById(collectionName, owningUser, objectId, cb) { + static removeOwnedById(collectionName, owningUser, objectId, cb) { const actorId = owningUser.getProperty(UserProps.ActivityPubActorId); if (!actorId) { return cb( @@ -476,6 +476,17 @@ module.exports = class Collection extends ActivityPubObject { ); } + static removeById(collectionName, objectId, cb) { + apDb.run( + `DELETE FROM collection + WHERE name = ? AND object_id = ?;`, + [collectionName, objectId], + err => { + return cb(err); + } + ); + } + static _rowToObjectInfo(row) { return { name: row.name, diff --git a/core/activitypub/endpoint.js b/core/activitypub/endpoint.js index 5e9816940..53dabadb2 100644 --- a/core/activitypub/endpoint.js +++ b/core/activitypub/endpoint.js @@ -47,7 +47,7 @@ function profile(webServer, user) { } function avatar(webServer, user, filename) { - return makeUserUrl(this.webServer, user, '/users/') + `/avatar/${filename}`; + return makeUserUrl(webServer, user, '/users/') + `/avatar/${filename}`; } function sharedInbox(webServer) { diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 5ee96c8ae..546935bbf 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -654,7 +654,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.notImplemented(resp); } - Collection.removeById('followers', localUser, remoteActor.id, err => { + Collection.removeOwnedById('followers', localUser, remoteActor.id, err => { if (err) { return this.webServer.internalServerError(resp, err); } From c5f0e0e6ef62ff84530ea7b9fe96fea5b4ba59b2 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 8 Feb 2023 12:53:56 -0700 Subject: [PATCH 128/233] Rework most of the ActivityPub routing handling --- core/activitypub/activity.js | 17 +- core/activitypub/collection.js | 8 +- core/activitypub/note.js | 15 +- core/activitypub/util.js | 18 + core/http_util.js | 4 +- .../content/web_handlers/activitypub.js | 789 +++++++++--------- 6 files changed, 443 insertions(+), 408 deletions(-) diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index 2d774d06b..809e8dc80 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -2,9 +2,9 @@ const { ActivityStreamMediaType, WellKnownActivityTypes, WellKnownActivity, - WellKnownRecipientFields, HttpSignatureSignHeaders, } = require('./const'); +const { recipientIdsFromObject } = require('./util'); const Endpoints = require('./endpoint'); const ActivityPubObject = require('./object'); const { Errors } = require('../enig_error'); @@ -110,21 +110,8 @@ module.exports = class Activity extends ActivityPubObject { return postJson(inboxEndpoint, activityJson, reqOpts, cb); } - // :TODO: we need dp/support a bit more here... recipientIds() { - const ids = []; - - WellKnownRecipientFields.forEach(field => { - let v = this[field]; - if (v) { - if (!Array.isArray(v)) { - v = [v]; - } - ids.push(...v); - } - }); - - return Array.from(new Set(ids)); + return recipientIdsFromObject(this); } static activityObjectId(webServer) { diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index 9b821c87a..d613a0b9d 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -73,6 +73,10 @@ module.exports = class Collection extends ActivityPubObject { ); } + static outbox(collectionId, page, cb) { + return Collection.publicOrderedById('outbox', collectionId, page, null, cb); + } + static addFollower(owningUser, followingActor, webServer, ignoreDupes, cb) { const collectionId = Endpoints.followers(webServer, owningUser); return Collection.addToCollection( @@ -116,10 +120,6 @@ module.exports = class Collection extends ActivityPubObject { ); } - static outbox(collectionId, page, cb) { - return Collection.publicOrderedById('outbox', collectionId, page, null, cb); - } - static addOutboxItem(owningUser, outboxItem, isPrivate, webServer, ignoreDupes, cb) { const collectionId = Endpoints.outbox(webServer, owningUser); return Collection.addToCollection( diff --git a/core/activitypub/note.js b/core/activitypub/note.js index ec908d64d..9b4e57159 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -3,7 +3,12 @@ const ActivityPubObject = require('./object'); const { Errors } = require('../enig_error'); const { getISOTimestampString } = require('../database'); const User = require('../user'); -const { parseTimestampOrNow, messageToHtml, htmlToMessageBody } = require('./util'); +const { + parseTimestampOrNow, + messageToHtml, + htmlToMessageBody, + recipientIdsFromObject, +} = require('./util'); const { isAnsi } = require('../string_util'); // deps @@ -26,11 +31,19 @@ module.exports = class Note extends ActivityPubObject { return false; } + if (this.type !== 'Note') { + return false; + } + // :TODO: validate required properties return true; } + recipientIds() { + return recipientIdsFromObject(this); + } + static fromPublicNoteId(noteId, cb) { Collection.objectByEmbeddedId(noteId, (err, obj, objInfo) => { if (err) { diff --git a/core/activitypub/util.js b/core/activitypub/util.js index ae7bd8df2..05002aa26 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -3,6 +3,7 @@ const { Errors, ErrorReasons } = require('../enig_error'); const UserProps = require('../user_property'); const ActivityPubSettings = require('./settings'); const { stripAnsiControlCodes } = require('../string_util'); +const { WellKnownRecipientFields } = require('./const'); // deps const _ = require('lodash'); @@ -27,6 +28,7 @@ exports.messageToHtml = messageToHtml; exports.htmlToMessageBody = htmlToMessageBody; exports.userNameFromSubject = userNameFromSubject; exports.extractMessageMetadata = extractMessageMetadata; +exports.recipientIdsFromObject = recipientIdsFromObject; // :TODO: more info in default // this profile template is the *default* for both WebFinger @@ -241,3 +243,19 @@ function extractMessageMetadata(body) { return metadata; } + +function recipientIdsFromObject(obj) { + const ids = []; + + WellKnownRecipientFields.forEach(field => { + let v = obj[field]; + if (v) { + if (!Array.isArray(v)) { + v = [v]; + } + ids.push(...v); + } + }); + + return Array.from(new Set(ids)); +} diff --git a/core/http_util.js b/core/http_util.js index 0692e3f0e..53654b325 100644 --- a/core/http_util.js +++ b/core/http_util.js @@ -78,7 +78,9 @@ function _makeRequest(url, options, cb) { if (res.statusCode < 200 || res.statusCode > 299) { return cb( Errors.HttpError( - `HTTP error ${res.statusCode}: ${truncate(body, { length: 128 })}` + `URL ${url} HTTP error ${res.statusCode}: ${truncate(body, { + length: 128, + })}` ) ); } diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 546935bbf..44802e73b 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -5,7 +5,10 @@ const { DefaultProfileTemplate, } = require('../../../activitypub/util'); const Endpoints = require('../../../activitypub/endpoint'); -const { ActivityStreamMediaType } = require('../../../activitypub/const'); +const { + ActivityStreamMediaType, + WellKnownActivity, +} = require('../../../activitypub/const'); const Config = require('../../../config').get; const Activity = require('../../../activitypub/activity'); const ActivityPubSettings = require('../../../activitypub/settings'); @@ -57,10 +60,12 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { method: 'POST', path: /^\/_enig\/ap\/users\/.+\/inbox$/, handler: (req, resp) => { - return this._enforceSigningPolicy( + return this._enforceMainKeySignatureValidity( req, resp, - this._inboxPostHandler.bind(this) + (req, resp, signature) => { + return this._inboxPostHandler(req, resp, signature, 'inbox'); + } ); }, }); @@ -68,14 +73,27 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { this.webServer.addRoute({ method: 'POST', path: /^\/_enig\/ap\/shared-inbox$/, - handler: this._sharedInboxPostHandler.bind(this), + handler: (req, resp) => { + return this._enforceMainKeySignatureValidity( + req, + resp, + (req, resp, signature) => { + return this._inboxPostHandler( + req, + resp, + signature, + 'sharedInbox' + ); + } + ); + }, }); this.webServer.addRoute({ method: 'GET', path: /^\/_enig\/ap\/users\/.+\/outbox(\?page=[0-9]+)?$/, handler: (req, resp) => { - return this._enforceSigningPolicy( + return this._enforceMainKeySignatureValidity( req, resp, this._outboxGetHandler.bind(this) @@ -87,7 +105,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { method: 'GET', path: /^\/_enig\/ap\/users\/.+\/followers(\?page=[0-9]+)?$/, handler: (req, resp) => { - return this._enforceSigningPolicy( + return this._enforceMainKeySignatureValidity( req, resp, this._followersGetHandler.bind(this) @@ -99,7 +117,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { method: 'GET', path: /^\/_enig\/ap\/users\/.+\/following(\?page=[0-9]+)?$/, handler: (req, resp) => { - return this._enforceSigningPolicy( + return this._enforceMainKeySignatureValidity( req, resp, this._followingGetHandler.bind(this) @@ -124,7 +142,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return cb(null); } - _enforceSigningPolicy(req, resp, next) { + _enforceMainKeySignatureValidity(req, resp, next) { // the request must be signed, and the signature must be valid const signature = this._parseAndValidateSignature(req); if (!signature) { @@ -134,6 +152,28 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return next(req, resp, signature); } + _parseAndValidateSignature(req) { + let signature; + try { + // :TODO: validate options passed to parseRequest() + signature = httpSignature.parseRequest(req); + } catch (e) { + this.log.warn( + { error: e.message, url: req.url, method: req.method }, + 'Failed to parse HTTP signature' + ); + return null; + } + + // quick check up front + const keyId = signature.keyId; + if (!keyId || !keyId.endsWith('#main-key')) { + return null; + } + + return signature; + } + _selfUrlRequestHandler(req, resp) { this.log.trace({ url: req.url }, 'Request for "self"'); @@ -172,14 +212,15 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { if (sendActor) { return this._selfAsActorHandler(localUser, localActor, req, resp); } else { - return this._standardSelfHandler(localUser, localActor, req, resp); + return this._selfAsProfileHandler(localUser, localActor, req, resp); } }); }); } - _inboxPostHandler(req, resp, signature) { + _inboxPostHandler(req, resp, signature, inboxType) { EnigAssert(signature, 'Called without signature!'); + EnigAssert(signature.keyId, 'No keyId in signature!'); const body = []; req.on('data', d => { @@ -187,107 +228,113 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); req.on('end', () => { + // Collect and validate the posted Activity const activity = Activity.fromJsonString(Buffer.concat(body).toString()); if (!activity || !activity.isValid()) { this.log.error( - { url: req.url, method: req.method, endpoint: 'inbox' }, + { url: req.url, method: req.method, inboxType }, 'Invalid or unsupported Activity' ); + return activity ? this.webServer.badRequest(resp) : this.webServer.notImplemented(resp); } - switch (activity.type) { - case 'Follow': - return this._collectionRequestHandler( - signature, - 'inbox', - activity, - this._inboxFollowRequestHandler.bind(this), - req, - resp - ); + // + // Delete is a special beast: + // We will *likely* get a 410, 404, or a Tombstone when fetching the Actor + // Thus, we need some short circuiting + // + if (WellKnownActivity.Delete === activity.type) { + return this._inboxDeleteActivity(inboxType, signature, resp, activity); + } - case 'Delete': - return this._collectionRequestHandler( - signature, - 'inbox', - activity, - this._inboxDeleteRequestHandler.bind(this), - req, - resp - ); + // Fetch and validate the signature of the remote Actor + Actor.fromId(activity.actor, (err, remoteActor) => { + if (err) { + return this.webServer.internalServerError(resp, err); + } - case 'Update': - return this.inboxUpdateObject('inbox', req, resp, activity); - - case 'Undo': - return this._collectionRequestHandler( - signature, - 'inbox', - activity, - this._inboxUndoRequestHandler.bind(this), - req, - resp - ); + if (!this._validateActorSignature(remoteActor, signature)) { + return this.webServer.accessDenied(resp); + } - default: - this.log.warn( - { type: activity.type }, - `Unsupported Activity type "${activity.type}"` - ); - break; - } + switch (activity.type) { + case WellKnownActivity.Accept: + break; - return this.webServer.notImplemented(resp); - }); - } + case WellKnownActivity.Add: + break; - _sharedInboxPostHandler(req, resp) { - const body = []; - req.on('data', d => { - body.push(d); - }); + case WellKnownActivity.Create: + return this._inboxCreateActivity(resp, activity); - req.on('end', () => { - const activity = Activity.fromJsonString(Buffer.concat(body).toString()); - if (!activity || !activity.isValid()) { - this.log.error( - { url: req.url, method: req.method, endpoint: 'sharedInbox' }, - 'Invalid or unsupported Activity' - ); - return activity - ? this.webServer.badRequest(resp) - : this.webServer.notImplemented(resp); - } + case WellKnownActivity.Update: + { + // Only Notes currently supported + const type = _.get(activity, 'object.type'); + if ('Note' === type) { + return this._inboxMutateExistingObject( + inboxType, + signature, + resp, + activity, + this._inboxUpdateObjectMutator.bind(this) + ); + } else { + this.log.warn( + `Unsupported Inbox Update for type "${type}"` + ); + } + } + break; - switch (activity.type) { - case 'Create': - return this._sharedInboxCreateActivity(req, resp, activity); + case WellKnownActivity.Follow: + // Follow requests are only allowed directly + if ('inbox' === inboxType) { + return this._inboxFollowActivity(resp, remoteActor, activity); + } + break; - case 'Update': - return this.inboxUpdateObject('sharedInbox', req, resp, activity); + case WellKnownActivity.Reject: + break; - default: - this.log.warn( - { type: activity.type }, - 'Invalid or unknown Activity type' - ); - break; - } + case WellKnownActivity.Undo: + // We only Undo from private inboxes + if ('inbox' === inboxType) { + // Only Follow Undo's currently supported + const type = _.get(activity, 'object.type'); + if (WellKnownActivity.Follow === type) { + return this._inboxUndoActivity( + resp, + remoteActor, + activity + ); + } else { + this.log.warn(`Unsupported Undo for type "${type}`); + } + } + break; - // don't understand the 'type' - return this.webServer.notImplemented(resp); + default: + this.log.warn( + { type: activity.type, inboxType }, + `Unsupported Activity type "${activity.type}"` + ); + break; + } + + return this.webServer.notImplemented(resp); + }); }); } - _sharedInboxCreateActivity(req, resp, activity) { - const deliverTo = activity.recipientIds(); + _inboxCreateActivity(resp, activity) { const createWhat = _.get(activity, 'object.type'); switch (createWhat) { case 'Note': - return this._deliverSharedInboxNote(req, resp, deliverTo, activity); + return this._inboxCreateNoteActivity(resp, activity); default: this.log.warn( @@ -298,134 +345,252 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } } - inboxUpdateObject(inboxType, req, resp, activity) { - const updateObjectId = _.get(activity, 'object.id'); - const objectType = _.get(activity, 'object.type'); + _inboxCreateNoteActivity(resp, activity) { + const note = new Note(activity.object); + if (!note.isValid()) { + this.log.warn({ note }, 'Invalid Note'); + return this.webServer.notImplemented(); + } + + const recipientActorIds = note.recipientIds(); + async.forEach( + recipientActorIds, + (actorId, nextActorId) => { + switch (actorId) { + case Collection.PublicCollectionId: + this._deliverNoteToSharedInbox(activity, note, err => { + return nextActorId(err); + }); + break; + + default: + this._deliverNoteToLocalActor(actorId, activity, note, err => { + return nextActorId(err); + }); + break; + } + }, + err => { + if (err && err.code !== 'SQLITE_CONSTRAINT') { + return this.webServer.internalServerError(resp, err); + } + + return this.webServer.created(resp); + } + ); + } + + _inboxDeleteActivity(inboxType, signature, resp /*, activity*/) { + // :TODO: Implement me! + // :TODO: we need to DELETE the existing stored Message object if this is a Note, or associated if this is an Actor + // :TODO: delete / invalidate any actor cache if actor + return this.webServer.accepted(resp); + } + + _inboxFollowActivity(resp, remoteActor, activity) { + this.log.info( + { remoteActorId: remoteActor.id, localActorId: activity.object }, + 'Incoming Follow Activity' + ); + + userFromActorId(activity.object, (err, localUser) => { + if (err) { + return this.webServer.resourceNotFound(resp); + } + + // User accepts any followers automatically + const activityPubSettings = ActivityPubSettings.fromUser(localUser); + if (!activityPubSettings.manuallyApproveFollowers) { + this._recordAcceptedFollowRequest(localUser, remoteActor, activity); + return this.webServer.ok(resp); + } + + // User manually approves requests; add them to their requests collection + Collection.addFollowRequest( + localUser, + remoteActor, + this.webServer, + true, // ignore dupes + err => { + if (err) { + return this.internalServerError(resp, err); + } + + return this.webServer.ok(resp); + } + ); + }); + } + + _inboxUndoActivity(resp, remoteActor, activity) { + const localActorId = _.get(activity, 'object.object'); this.log.info( - { inboxType, objectId: updateObjectId, type: objectType }, - 'Inbox Object "Update" request' + { remoteActorId: remoteActor.id, localActorId }, + 'Incoming Undo Activity' ); - // :TODO: other types... - if (!updateObjectId || !['Note'].includes(objectType)) { - return this.webServer.notImplemented(resp); + userFromActorId(localActorId, (err, localUser) => { + if (err) { + return this.webServer.resourceNotFound(resp); + } + + Collection.removeOwnedById('followers', localUser, remoteActor.id, err => { + if (err) { + return this.webServer.internalServerError(resp, err); + } + + this.log.info( + { + username: localUser.username, + userId: localUser.userId, + remoteActorId: remoteActor.id, + }, + 'Undo "Follow" (un-follow) success' + ); + + return this.webServer.accepted(resp); + }); + }); + } + + _localUserFromCollectionEndpoint(req, collectionName, cb) { + // turn a collection URL to a Actor ID + let actorId = this.webServer.fullUrl(req).toString(); + const suffix = `/${collectionName}`; + if (actorId.endsWith(suffix)) { + actorId = actorId.slice(0, -suffix.length); + } + + userFromActorId(actorId, (err, localUser) => { + return cb(err, localUser); + }); + } + + _validateActorSignature(actor, signature) { + const pubKey = actor.publicKey; + if (!_.isObject(pubKey)) { + this.log.debug('Expected object of "pubKey"'); + return false; + } + + if (signature.keyId !== pubKey.id) { + this.log.warn( + { + actorId: actor.id, + signatureKeyId: signature.keyId, + actorPubKeyId: pubKey.id, + }, + 'Key ID mismatch' + ); + return false; + } + + if (!httpSignature.verifySignature(signature, pubKey.publicKeyPem)) { + this.log.warn( + { + actorId: actor.id, + keyId: signature.keyId, + }, + 'Actor signature verification failed' + ); + return false; } - // Note's are wrapped in Create Activities - Collection.objectByEmbeddedId(updateObjectId, (err, obj) => { + return true; + } + + _inboxMutateExistingObject(inboxType, signature, resp, activity, mutator) { + const targetObjectId = _.get(activity, 'object.id'); + const objectType = _.get(activity, 'object.type'); + + Collection.objectByEmbeddedId(targetObjectId, (err, obj) => { if (err) { return this.webServer.internalServerError(resp, err); } if (!obj) { - // no match, but respond as accepted and hopefully they don't ask again - return this.webServer.accepted(resp); + this.log.warn( + { targetObjectId, type: objectType, activityType: activity.type }, + `Could not ${activity.type} Object; Not found` + ); + return this.webServer.resourceNotFound(resp); } - // OK, the object exists; Does the caller have permission - // to update? The origin must match // - // "The receiving server MUST take care to be sure that the Update is authorized - // to modify its object. At minimum, this may be done by ensuring that the Update - // and its object are of same origin." + // Object exists; Validate we allow the action by origin + // comparing the request's keyId origin to the object's + // try { - const updateTargetUrl = new URL(obj.object.id); - const updaterUrl = new URL(activity.actor); + const updateTargetHost = new URL(obj.object.id).host; + const keyIdHost = new URL(signature.keyId).host; - if (updateTargetUrl.host !== updaterUrl.host) { + if (updateTargetHost !== keyIdHost) { this.log.warn( { - objectId: updateObjectId, + targetObjectId, type: objectType, - updateTargetHost: updateTargetUrl.host, - requestorHost: updaterUrl.host, + updateTargetHost, + keyIdHost, + activityType: activity.type, }, - 'Attempt to update object from another origin' + `Attempt to ${activity.type} Object of non-matching origin` ); return this.webServer.accessDenied(resp); } - Collection.updateCollectionEntry( - 'inbox', - updateObjectId, - activity, - err => { - if (err) { - return this.webServer.internalServerError(resp, err); - } - - this.log.info( - { - objectId: updateObjectId, - type: objectType, - collection: 'inbox', - }, - 'Object updated' - ); - return this.webServer.accepted(resp); - } - ); + return mutator(inboxType, resp, objectType, targetObjectId, activity); } catch (e) { return this.webServer.internalServerError(resp, e); } }); } - _deliverSharedInboxNote(req, resp, deliverTo, activity) { - // When an object is being delivered to the originating actor's followers, - // a server MAY reduce the number of receiving actors delivered to by - // identifying all followers which share the same sharedInbox who would - // otherwise be individual recipients and instead deliver objects to said - // sharedInbox. Thus in this scenario, the remote/receiving server participates - // in determining targeting and performing delivery to specific inboxes. - const note = new Note(activity.object); - if (!note.isValid()) { - // :TODO: Log me - return this.webServer.notImplemented(); - } + // _inboxDeleteActivityMutator(inboxType, resp, objectType, targetObjectId) { + // Collection.removeById(inboxType, targetObjectId, err => { + // if (err) { + // return this.webServer.internalServerError(resp, err); + // } + + // this.log.info( + // { + // inboxType, + // objectId: targetObjectId, + // objectType, + // }, + // `${objectType} Deleted` + // ); + + // // :TODO: we need to DELETE the existing stored Message object if this is a Note + + // return this.webServer.accepted(resp); + // }); + // } + + _inboxUpdateObjectMutator(inboxType, resp, objectType, targetObjectId, activity) { + Collection.updateCollectionEntry(inboxType, targetObjectId, activity, err => { + if (err) { + return this.webServer.internalServerError(resp, err); + } - async.forEach( - deliverTo, - (actorId, nextActor) => { - switch (actorId) { - case Collection.PublicCollectionId: - this._deliverInboxNoteToSharedInbox( - req, - resp, - activity, - note, - err => { - return nextActor(err); - } - ); - break; + this.log.info( + { + inboxType, + objectId: targetObjectId, + objectType, + }, + `${objectType} Updated` + ); - default: - this._deliverInboxNoteToLocalActor( - req, - resp, - actorId, - activity, - note, - err => { - return nextActor(err); - } - ); - break; - } - }, - err => { - if (err && err.code !== 'SQLITE_CONSTRAINT') { - return this.webServer.internalServerError(resp, err); - } + // :TODO: we need to UPDATE the existing stored Message object if this is a Note - return this.webServer.created(resp); - } - ); + return this.webServer.accepted(resp); + }); } - _deliverInboxNoteToSharedInbox(req, resp, activity, note, cb) { + _deliverNoteToSharedInbox(activity, note, cb) { + this.log.info({ noteId: note.id }, 'Delivering Note to Public inbox'); + Collection.addSharedInboxItem(activity, true, err => { if (err) { return cb(err); @@ -441,6 +606,33 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } + _deliverNoteToLocalActor(actorId, activity, note, cb) { + this.log.info( + { noteId: note.id, actorId }, + 'Delivering Note to local Actor Private inbox' + ); + + userFromActorId(actorId, (err, localUser) => { + if (err) { + return cb(null); // not found/etc., just bail + } + + Collection.addInboxItem(activity, localUser, this.webServer, false, err => { + if (err) { + return cb(err); + } + + return this._storeNoteAsMessage( + activity.id, + localUser, + Message.WellKnownAreaTags.Private, + note, + cb + ); + }); + }); + } + _storeNoteAsMessage(activityId, localAddressedTo, areaTag, note, cb) { // // Import the item to the user's private mailbox @@ -478,31 +670,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } - _deliverInboxNoteToLocalActor(req, resp, actorId, activity, note, cb) { - userFromActorId(actorId, (err, localUser) => { - if (err) { - return cb(null); // not found/etc., just bail - } - - Collection.addInboxItem(activity, localUser, this.webServer, false, err => { - if (err) { - return cb(err); - } - - return this._storeNoteAsMessage( - activity.id, - localUser, - Message.WellKnownAreaTags.Private, - note, - cb - ); - }); - }); - } - - _getCollectionHandler(collectionName, req, resp, signature) { - EnigAssert(signature, 'Missing signature!'); - + _actorCollectionRequest(collectionName, req, resp) { const getCollection = Collection[collectionName]; if (!getCollection) { return this.webServer.resourceNotFound(resp); @@ -511,32 +679,51 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { const url = this.webServer.fullUrl(req); const page = url.searchParams.get('page'); const collectionId = url.toString(); - getCollection(collectionId, page, (err, collection) => { + + this._localUserFromCollectionEndpoint(req, collectionName, (err, localUser) => { if (err) { - return this.webServer.internalServerError(resp, err); + return this.webServer.resourceNotFound(resp); } - const body = JSON.stringify(collection); - return this.webServer.ok(resp, body, { - 'Content-Type': ActivityStreamMediaType, + const apSettings = ActivityPubSettings.fromUser(localUser); + if (apSettings.hideSocialGraph) { + this.log.info( + { user: localUser.username }, + `User has ${collectionName} hidden` + ); + return this.webServer.accessDenied(resp); + } + + // :TODO: these getters should take a owningUser; they are not strictly public + getCollection(collectionId, page, (err, collection) => { + if (err) { + return this.webServer.internalServerError(resp, err); + } + + const body = JSON.stringify(collection); + return this.webServer.ok(resp, body, { + 'Content-Type': ActivityStreamMediaType, + }); }); }); + + // :TODO: we need to validate the local user allows access to the particular collection } - _followingGetHandler(req, resp, signature) { + _followingGetHandler(req, resp) { this.log.debug({ url: req.url }, 'Request for "following"'); - return this._getCollectionHandler('following', req, resp, signature); + return this._actorCollectionRequest('following', req, resp); } - _followersGetHandler(req, resp, signature) { + _followersGetHandler(req, resp) { this.log.debug({ url: req.url }, 'Request for "followers"'); - return this._getCollectionHandler('followers', req, resp, signature); + return this._actorCollectionRequest('followers', req, resp); } // https://docs.gotosocial.org/en/latest/federation/behaviors/outbox/ - _outboxGetHandler(req, resp, signature) { + _outboxGetHandler(req, resp) { this.log.debug({ url: req.url }, 'Request for "outbox"'); - return this._getCollectionHandler('outbox', req, resp, signature); + return this._actorCollectionRequest('outbox', req, resp); } _singlePublicNoteGetHandler(req, resp) { @@ -558,173 +745,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } - _accountNameFromUserPath(url, suffix) { - const re = new RegExp(`^/_enig/ap/users/(.+)/${suffix}(\\?page=[0-9]+)?$`); - const m = url.pathname.match(re); - if (!m || !m[1]) { - return null; - } - return m[1]; - } - - _parseAndValidateSignature(req) { - let signature; - try { - // :TODO: validate options passed to parseRequest() - signature = httpSignature.parseRequest(req); - } catch (e) { - this.log.warn( - { error: e.message, url: req.url, method: req.method }, - 'Failed to parse HTTP signature' - ); - return null; - } - - // quick check up front - const keyId = signature.keyId; - if (!this._validateKeyId(keyId)) { - return null; - } - - return signature; - } - - _validateKeyId(keyId) { - if (!keyId) { - return false; - } - - // we only accept main-key currently - return keyId.endsWith('#main-key'); - } - - _inboxFollowRequestHandler(activity, remoteActor, localUser, resp) { - this.log.info( - { user_id: localUser.userId, actor: activity.actor }, - 'Follow request' - ); - - // - // If the user blindly accepts Followers, we can persist - // and send an 'Accept' now. Otherwise, we need to queue this - // request for the user to review and decide what to do with - // at a later time. - // - const activityPubSettings = ActivityPubSettings.fromUser(localUser); - if (!activityPubSettings.manuallyApproveFollowers) { - this._recordAcceptedFollowRequest(localUser, remoteActor, activity); - return this.webServer.ok(resp); - } else { - Collection.addFollowRequest( - localUser, - remoteActor, - this.webServer, - true, // ignore dupes - err => { - if (err) { - return this.internalServerError(resp, err); - } - - return this.webServer.ok(resp); - } - ); - } - } - - // :TODO: DRY: update/delete are mostly the same code other than the final operation - _inboxDeleteRequestHandler(activity, remoteActor, localUser, resp) { - this.log.info( - { user_id: localUser.userId, actor: activity.actor }, - 'Delete request' - ); - - // :TODO:only delete if it's owned by the sender - - return this.webServer.accepted(resp); - } - - _inboxUndoRequestHandler(activity, remoteActor, localUser, resp) { - this.log.info( - { user: localUser.username, actor: remoteActor.id }, - 'Undo Activity request' - ); - - // we only understand Follow right now - if (!activity.object || activity.object.type !== 'Follow') { - return this.webServer.notImplemented(resp); - } - - Collection.removeOwnedById('followers', localUser, remoteActor.id, err => { - if (err) { - return this.webServer.internalServerError(resp, err); - } - - this.log.info( - { - username: localUser.username, - userId: localUser.userId, - actor: remoteActor.id, - }, - 'Undo "Follow" (un-follow) success' - ); - - return this.webServer.accepted(resp); - }); - } - - _collectionRequestHandler( - signature, - collectionName, - activity, - activityHandler, - req, - resp - ) { - // turn a collection URL to a Actor ID - let actorId = this.webServer.fullUrl(req).toString(); - const suffix = `/${collectionName}`; - if (actorId.endsWith(suffix)) { - actorId = actorId.slice(0, -suffix.length); - } - - userFromActorId(actorId, (err, localUser) => { - if (err) { - return this.webServer.resourceNotFound(resp); - } - - Actor.fromId(activity.actor, (err, actor) => { - if (err) { - return this.webServer.internalServerError(resp, err); - } - - const pubKey = actor.publicKey; - if (!_.isObject(pubKey)) { - // Log me - return this.webServer.accessDenied(); - } - - if (signature.keyId !== pubKey.id) { - // :TODO: Log me - return this.webServer.accessDenied(resp); - } - - if (!httpSignature.verifySignature(signature, pubKey.publicKeyPem)) { - this.log.warn( - { - actor: activity.actor, - keyId: signature.keyId, - signature: req.headers['signature'] || '', - }, - 'Invalid signature supplied for Follow request' - ); - return this.webServer.accessDenied(resp); - } - - return activityHandler(activity, actor, localUser, resp); - }); - }); - } - _recordAcceptedFollowRequest(localUser, remoteActor, requestActivity) { async.series( [ @@ -803,11 +823,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { ); } - _authorizeInteractionHandler(req, resp) { - console.log(req); - console.log(resp); - } - _selfAsActorHandler(localUser, localActor, req, resp) { this.log.info( { username: localUser.username }, @@ -819,7 +834,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.ok(resp, body, { 'Content-Type': ActivityStreamMediaType }); } - _standardSelfHandler(localUser, localActor, req, resp) { + _selfAsProfileHandler(localUser, localActor, req, resp) { let templateFile = _.get( Config(), 'contentServers.web.handlers.activityPub.selfTemplate' From 9b08cf827b39d6a22432d96ac76a606d049425b5 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 8 Feb 2023 17:19:12 -0700 Subject: [PATCH 129/233] Clean up Actor cache --- core/activitypub/actor.js | 70 +++++++++++++++++++++++++++------------ core/config_default.js | 6 ++++ 2 files changed, 54 insertions(+), 22 deletions(-) diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index db54a5d95..735dcbf60 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -13,6 +13,7 @@ const ActivityPubSettings = require('./settings'); const ActivityPubObject = require('./object'); const { ActivityStreamMediaType } = require('./const'); const apDb = require('../database').dbs.activitypub; +const Config = require('../config').get; // deps const _ = require('lodash'); @@ -22,7 +23,8 @@ const { getISOTimestampString } = require('../database.js'); const moment = require('moment'); const paths = require('path'); -const ActorCacheTTL = moment.duration(120, 'days'); +const ActorCacheExpiration = moment.duration(15, 'days'); +const ActorCacheMaxAgeDays = 125; // hasn't been used in >= 125 days, nuke it. // default context for Actor's const DefaultContext = ActivityPubObject.makeContext(['https://w3id.org/security/v1'], { @@ -157,16 +159,28 @@ module.exports = class Actor extends ActivityPubObject { } static fromId(id, cb) { - Actor._fromCache(id, (err, actor, subject) => { + let delivered = false; + const callback = (e, a, s) => { + if (!delivered) { + delivered = true; + return cb(e, a, s); + } + }; + + Actor._fromCache(id, (err, actor, subject, needsRefresh) => { if (!err) { // cache hit - return cb(null, actor, subject); + callback(null, actor, subject); + + if (!needsRefresh) { + return; + } } - // cache miss: attempt to fetch & populate + // Cache miss or needs refreshed; Try to do so now Actor._fromWebFinger(id, (err, actor, subject) => { if (err) { - return cb(err); + return callback(err); } if (subject) { @@ -176,7 +190,7 @@ module.exports = class Actor extends ActivityPubObject { } // deliver result to caller - cb(err, actor, subject); + callback(err, actor, subject); // cache our entry if (actor) { @@ -195,6 +209,28 @@ module.exports = class Actor extends ActivityPubObject { }); } + static actorCacheMaintenanceTask(args, cb) { + const enabled = _.get( + Config(), + 'contentServers.web.handlers.activityPub.enabled' + ); + if (!enabled) { + return; + } + + apDb.run( + `DELETE FROM actor_cache + WHERE DATETIME(timestamp) > DATETIME("now", "+${ActorCacheMaxAgeDays}");`, + err => { + if (err) { + // :TODO: log me + } + + return cb(null); // always non-fatal + } + ); + } + static _fromRemoteQuery(id, cb) { const headers = { Accept: ActivityStreamMediaType, @@ -215,13 +251,13 @@ module.exports = class Actor extends ActivityPubObject { }); } - static _fromCache(id, cb) { + static _fromCache(actorIdOrSubject, cb) { apDb.get( `SELECT rowid, actor_json, subject, timestamp, FROM actor_cache WHERE actor_id = ? OR subject = ? LIMIT 1;`, - [id, id], + [actorIdOrSubject, actorIdOrSubject], (err, row) => { if (err) { return cb(err); @@ -232,19 +268,9 @@ module.exports = class Actor extends ActivityPubObject { } const timestamp = moment(row.timestamp); - if (moment().isAfter(timestamp.add(ActorCacheTTL))) { - apDb.run( - `DELETE FROM actor_cache - WHERE rowid = ?;`, - [row.rowid], - err => { - if (err) { - // :TODO: Log me - } - return cb(Errors.Expired('The cache entry is expired')); - } - ); - } + const needsRefresh = moment().isAfter( + timestamp.add(ActorCacheExpiration) + ); const obj = ActivityPubObject.fromJsonString(row.actor_json); if (!obj || !obj.isValid()) { @@ -257,7 +283,7 @@ module.exports = class Actor extends ActivityPubObject { } const subject = row.subject || actor.id; - return cb(null, actor, subject); + return cb(null, actor, subject, needsRefresh); } ); } diff --git a/core/config_default.js b/core/config_default.js index 1dc75678d..4908b755a 100644 --- a/core/config_default.js +++ b/core/config_default.js @@ -1082,6 +1082,12 @@ module.exports = () => { ], }, + // Removes old Actor records + activityPubActorCacheMaintenance: { + schedule: 'every 24 hours', + action: '@method:/core/activitypub/actor.js:actorCacheMaintenanceTask', + }, + // // Enable the following entry in your config.hjson to periodically create/update // DESCRIPT.ION files for your file base From fb039c1abc0b5a0add2bf427c242b9902b80b5c9 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 8 Feb 2023 20:10:50 -0700 Subject: [PATCH 130/233] Fix dumb bugs --- core/scanner_tossers/activitypub.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index 9e0da50c7..62dee319f 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -77,7 +77,7 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule ) ); } - return callback(null, noteInfo, [noteInfo.remoteActor.id]); + return callback(null, noteInfo, [noteInfo.remoteActor.inbox]); } // public: we need to build a list of sharedInbox's @@ -103,7 +103,7 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule // cc: [sharedInboxEndpoints] // if (message.isPrivate()) { - note.to = deliveryEndpoints.sharedInboxes[0]; + note.to = deliveryEndpoints; } else { if (deliveryEndpoints.additionalTo) { note.to = [ @@ -131,7 +131,9 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule context ); - let allEndpoints = deliveryEndpoints.sharedInboxes; + let allEndpoints = Array.isArray(deliveryEndpoints) + ? deliveryEndpoints + : deliveryEndpoints.sharedInboxes; if (deliveryEndpoints.additionalTo) { allEndpoints.push(deliveryEndpoints.additionalTo); } @@ -247,8 +249,8 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule } } else { this.log.info( - { id: activity.id }, - 'Note Activity exported (published) successfully' + { activityId: activity.id, noteId: activity.object.id }, + 'Note Activity published successfully' ); } } From c0914af002980222196d8760cecffc89b1587e9c Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 8 Feb 2023 21:32:54 -0700 Subject: [PATCH 131/233] Fix a few more inbox/addressing bugs, cleanup, add methtod to request follow --- core/activitypub/activity.js | 40 +---------------------------- core/activitypub/actor.js | 2 +- core/activitypub/object.js | 37 ++++++++++++++++++++++++-- core/activitypub/util.js | 28 +++++++++++++++++--- core/http_util.js | 2 +- core/scanner_tossers/activitypub.js | 2 +- 6 files changed, 63 insertions(+), 48 deletions(-) diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index 809e8dc80..c5b5dbcd7 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -1,20 +1,8 @@ -const { - ActivityStreamMediaType, - WellKnownActivityTypes, - WellKnownActivity, - HttpSignatureSignHeaders, -} = require('./const'); +const { WellKnownActivityTypes, WellKnownActivity } = require('./const'); const { recipientIdsFromObject } = require('./util'); -const Endpoints = require('./endpoint'); const ActivityPubObject = require('./object'); -const { Errors } = require('../enig_error'); -const UserProps = require('../user_property'); -const { postJson } = require('../http_util'); const { getISOTimestampString } = require('../database'); -// deps -const _ = require('lodash'); - module.exports = class Activity extends ActivityPubObject { constructor(obj, withContext = ActivityPubObject.DefaultContext) { super(obj, withContext); @@ -84,32 +72,6 @@ module.exports = class Activity extends ActivityPubObject { }); } - sendTo(inboxEndpoint, fromUser, webServer, cb) { - const privateKey = fromUser.getProperty(UserProps.PrivateActivityPubSigningKey); - if (_.isEmpty(privateKey)) { - return cb( - Errors.MissingProperty( - `User "${fromUser.username}" is missing the '${UserProps.PrivateActivityPubSigningKey}' property` - ) - ); - } - - const reqOpts = { - headers: { - 'Content-Type': ActivityStreamMediaType, - }, - sign: { - key: privateKey, - keyId: Endpoints.actorId(webServer, fromUser) + '#main-key', - authorizationHeaderName: 'Signature', - headers: HttpSignatureSignHeaders, - }, - }; - - const activityJson = JSON.stringify(this); - return postJson(inboxEndpoint, activityJson, reqOpts, cb); - } - recipientIds() { return recipientIdsFromObject(this); } diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 735dcbf60..c2d94caa0 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -253,7 +253,7 @@ module.exports = class Actor extends ActivityPubObject { static _fromCache(actorIdOrSubject, cb) { apDb.get( - `SELECT rowid, actor_json, subject, timestamp, + `SELECT actor_json, subject, timestamp FROM actor_cache WHERE actor_id = ? OR subject = ? LIMIT 1;`, diff --git a/core/activitypub/object.js b/core/activitypub/object.js index 018dabcac..21e4217b4 100644 --- a/core/activitypub/object.js +++ b/core/activitypub/object.js @@ -1,8 +1,15 @@ -const { ActivityStreamsContext } = require('./util'); +const { + ActivityStreamsContext, + ActivityStreamMediaType, + HttpSignatureSignHeaders, +} = require('./const'); const Endpoints = require('./endpoint'); +const UserProps = require('../user_property'); +const { Errors } = require('../enig_error'); +const { postJson } = require('../http_util'); // deps -const { isString, isObject } = require('lodash'); +const { isString, isObject, isEmpty } = require('lodash'); const Context = '@context'; @@ -79,4 +86,30 @@ module.exports = class ActivityPubObject { static makeObjectId(webServer, objectType) { return Endpoints.objectId(webServer, objectType); } + + sendTo(inboxEndpoint, fromUser, webServer, cb) { + const privateKey = fromUser.getProperty(UserProps.PrivateActivityPubSigningKey); + if (isEmpty(privateKey)) { + return cb( + Errors.MissingProperty( + `User "${fromUser.username}" is missing the '${UserProps.PrivateActivityPubSigningKey}' property` + ) + ); + } + + const reqOpts = { + headers: { + 'Content-Type': ActivityStreamMediaType, + }, + sign: { + key: privateKey, + keyId: Endpoints.actorId(webServer, fromUser) + '#main-key', + authorizationHeaderName: 'Signature', + headers: HttpSignatureSignHeaders, + }, + }; + + const activityJson = JSON.stringify(this); + return postJson(inboxEndpoint, activityJson, reqOpts, cb); + } }; diff --git a/core/activitypub/util.js b/core/activitypub/util.js index 05002aa26..88e249ff2 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -3,7 +3,9 @@ const { Errors, ErrorReasons } = require('../enig_error'); const UserProps = require('../user_property'); const ActivityPubSettings = require('./settings'); const { stripAnsiControlCodes } = require('../string_util'); -const { WellKnownRecipientFields } = require('./const'); +const { WellKnownRecipientFields, WellKnownActivity } = require('./const'); +const ActivityPubObject = require('./object'); +const Log = require('../logger').log; // deps const _ = require('lodash'); @@ -15,9 +17,6 @@ const moment = require('moment'); const { striptags } = require('striptags'); const { encode, decode } = require('html-entities'); const { isString } = require('lodash'); -const Log = require('../logger').log; - -exports.ActivityStreamsContext = 'https://www.w3.org/ns/activitystreams'; exports.parseTimestampOrNow = parseTimestampOrNow; exports.isValidLink = isValidLink; @@ -29,6 +28,7 @@ exports.htmlToMessageBody = htmlToMessageBody; exports.userNameFromSubject = userNameFromSubject; exports.extractMessageMetadata = extractMessageMetadata; exports.recipientIdsFromObject = recipientIdsFromObject; +exports.sendFollowRequest = sendFollowRequest; // :TODO: more info in default // this profile template is the *default* for both WebFinger @@ -259,3 +259,23 @@ function recipientIdsFromObject(obj) { return Array.from(new Set(ids)); } + +function sendFollowRequest(fromUser, toActor, webServer, cb) { + const fromActorId = fromUser.getProperty(UserProps.ActivityPubActorId); + if (!fromActorId) { + return cb( + Errors.MissingProperty( + `User missing "${UserProps.ActivityPubActorId}" property` + ) + ); + } + + const followRequest = new ActivityPubObject({ + id: ActivityPubObject.makeObjectId(webServer, 'follow'), + type: WellKnownActivity.Follow, + actor: fromActorId, + object: toActor.id, + }); + + return followRequest.sendTo(toActor.inbox, fromUser, webServer, cb); +} diff --git a/core/http_util.js b/core/http_util.js index 53654b325..d7bf57a85 100644 --- a/core/http_util.js +++ b/core/http_util.js @@ -57,7 +57,7 @@ function postJson(url, json, options, cb) { function _makeRequest(url, options, cb) { if (options.body) { - options.headers['Content-Length'] = Buffer(options.body).length; + options.headers['Content-Length'] = Buffer.from(options.body).length; if (options?.sign?.headers?.includes('digest')) { options.headers['Digest'] = diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index 62dee319f..22d32d580 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -283,7 +283,7 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule } return cb(null, { - additionalTo: actor.id, + additionalTo: actor.inbox, sharedInboxes: endpoints, followers: followersEndpoint, }); From 1fcadef8d0e54ed594c24e904af8dd614eefe86e Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 9 Feb 2023 20:36:11 -0700 Subject: [PATCH 132/233] Fix local-to-local user in public area --- core/activitypub/note.js | 6 ------ core/scanner_tossers/activitypub.js | 4 ++-- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/core/activitypub/note.js b/core/activitypub/note.js index 9b4e57159..1d80ed790 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -69,12 +69,6 @@ module.exports = class Note extends ActivityPubObject { return cb(Errors.UnexpectedState('Invalid user ID for local user!')); } - if (Message.AddressFlavor.ActivityPub !== message.getAddressFlavor()) { - return cb( - Errors.Invalid('Cannot build note for non-ActivityPub addressed message') - ); - } - const remoteActorAccount = message.getRemoteToUser(); if (!remoteActorAccount && message.isPrivate()) { return cb( diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index 22d32d580..35e23ed40 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -63,7 +63,6 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule async.waterfall( [ callback => { - // Private or addressed to a single AP Actor: Note.fromLocalMessage(message, this._webServer(), (err, noteInfo) => { return callback(err, noteInfo); }); @@ -95,7 +94,8 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule // // Update the Note's addressing: // - Private: - // to: sharedInboxEndpoints[0] + // to: Directly to addressed-to Actor inbox + // // - Public: // to: https://www.w3.org/ns/activitystreams#Public // ... and the message.getRemoteToUser() value *if* From 87034967ae9574ff468e665ae30fc06afcceb793 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Fri, 10 Feb 2023 16:51:50 -0600 Subject: [PATCH 133/233] First steps toward search --- core/activitypub/actor.js | 144 +- core/database.js | 22 +- package-lock.json | 1166 +++++++- package.json | 1 + yarn.lock | 5872 ++++++++++++++++++------------------- 5 files changed, 4234 insertions(+), 2971 deletions(-) diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index c2d94caa0..9a65b767c 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -14,17 +14,17 @@ const ActivityPubObject = require('./object'); const { ActivityStreamMediaType } = require('./const'); const apDb = require('../database').dbs.activitypub; const Config = require('../config').get; +const parseFullName = require('parse-full-name').parseFullName; // deps const _ = require('lodash'); const mimeTypes = require('mime-types'); const { getJson } = require('../http_util.js'); const { getISOTimestampString } = require('../database.js'); -const moment = require('moment'); const paths = require('path'); -const ActorCacheExpiration = moment.duration(15, 'days'); const ActorCacheMaxAgeDays = 125; // hasn't been used in >= 125 days, nuke it. +const MaxSearchResults = 10; // Maximum number of results to show for a search // default context for Actor's const DefaultContext = ActivityPubObject.makeContext(['https://w3id.org/security/v1'], { @@ -167,14 +167,10 @@ module.exports = class Actor extends ActivityPubObject { } }; - Actor._fromCache(id, (err, actor, subject, needsRefresh) => { + Actor._fromCache(id, (err, actor, subject) => { if (!err) { // cache hit callback(null, actor, subject); - - if (!needsRefresh) { - return; - } } // Cache miss or needs refreshed; Try to do so now @@ -194,21 +190,76 @@ module.exports = class Actor extends ActivityPubObject { // cache our entry if (actor) { + apDb.run( + 'DELETE FROM actor_cache_search WHERE actor_id=?', + [id], + err => { + if (err) { + Log.warn( + { err: err }, + 'Error deleting previous actor_cache_search' + ); + } + } + ); + apDb.run( `REPLACE INTO actor_cache (actor_id, actor_json, subject, timestamp) VALUES (?, ?, ?, ?);`, [id, JSON.stringify(actor), subject, getISOTimestampString()], err => { if (err) { - // :TODO: log me + Log.warn( + { err: err }, + 'Error replacing into the actor cache' + ); } } ); + + const searchNames = this._parseSearchNames(actor); + if (searchNames.length > 0) { + const searchStatement = apDb.prepare( + 'INSERT INTO actor_cache_search (actor_id, search_name) VALUES (?, ?)' + ); + searchNames.forEach(name => { + searchStatement.run([id, name], err => { + if (err) { + Log.warn( + { err: err }, + 'Error inserting into actor cache search' + ); + } + }); + }); + } } }); }); } + static _parseSearchNames(actor) { + const searchNames = []; + + if (!_.isEmpty(actor.preferredUsername)) { + searchNames.push(actor.preferredUsername); + } + const name = parseFullName(actor.name); + if (!_.isEmpty(name.first)) { + searchNames.push(name.first); + } + + if (!_.isEmpty(name.last)) { + searchNames.push(name.last); + } + + if (!_.isEmpty(name.nick)) { + searchNames.push(name.nick); + } + + return searchNames; + } + static actorCacheMaintenanceTask(args, cb) { const enabled = _.get( Config(), @@ -220,10 +271,10 @@ module.exports = class Actor extends ActivityPubObject { apDb.run( `DELETE FROM actor_cache - WHERE DATETIME(timestamp) > DATETIME("now", "+${ActorCacheMaxAgeDays}");`, + WHERE DATETIME(timestamp) < DATETIME("now", "-${ActorCacheMaxAgeDays} day");`, err => { if (err) { - // :TODO: log me + Log.warn({ err: err }, 'Error clearing old cache entries.'); } return cb(null); // always non-fatal @@ -231,6 +282,40 @@ module.exports = class Actor extends ActivityPubObject { ); } + static fromSearch(searchString, cb) { + // first try to find an exact match + this.fromId(searchString, (err, remoteActor) => { + if (!err) { + return cb(null, [remoteActor]); + } else { + Log.info({ err: err }, 'Not able to find based on id'); + } + }); + + let returnRows = []; + // If not found, try searching database for known actors + apDb.each( + `SELECT actor_cache.actor_json + FROM actor_cache INNER JOIN actor_cache_search ON actor_cache.actor_id = actor_cache_search.actor_id + WHERE actor_cache_search.search_name like '%'||?||'%' + LIMIT ${MaxSearchResults}`, + (err, row) => { + if (err) { + Log.warn({ err: err }, 'error retrieving search results'); + return cb(err, []); + } + this._fromJsonToActor(row.actor_json, (err, actor) => { + if (err) { + Log.warn({ err: err }, 'error converting search results'); + return cb(err, []); + } + returnRows.push(actor); + }); + } + ); + return cb(null, returnRows); + } + static _fromRemoteQuery(id, cb) { const headers = { Accept: ActivityStreamMediaType, @@ -253,9 +338,10 @@ module.exports = class Actor extends ActivityPubObject { static _fromCache(actorIdOrSubject, cb) { apDb.get( - `SELECT actor_json, subject, timestamp + `SELECT actor_json, subject FROM actor_cache WHERE actor_id = ? OR subject = ? + AND DATETIME(timestamp) > DATETIME("now", "-${ActorCacheMaxAgeDays} day") LIMIT 1;`, [actorIdOrSubject, actorIdOrSubject], (err, row) => { @@ -267,25 +353,29 @@ module.exports = class Actor extends ActivityPubObject { return cb(Errors.DoesNotExist()); } - const timestamp = moment(row.timestamp); - const needsRefresh = moment().isAfter( - timestamp.add(ActorCacheExpiration) - ); + this._fromJsonToActor(row.actor_json, (err, actor) => { + if (err) { + return cb(err); + } + const subject = row.subject || actor.id; + return cb(null, actor, subject); + }); + } + ); + } - const obj = ActivityPubObject.fromJsonString(row.actor_json); - if (!obj || !obj.isValid()) { - return cb(Errors.Invalid('Failed to create ActivityPub object')); - } + static _fromJsonToActor(actorJson, cb) { + const obj = ActivityPubObject.fromJsonString(actorJson); + if (!obj || !obj.isValid()) { + return cb(Errors.Invalid('Failed to create ActivityPub object')); + } - const actor = new Actor(obj); - if (!actor.isValid()) { - return cb(Errors.Invalid('Failed to create Actor object')); - } + const actor = new Actor(obj); + if (!actor.isValid()) { + return cb(Errors.Invalid('Failed to create Actor object')); + } - const subject = row.subject || actor.id; - return cb(null, actor, subject, needsRefresh); - } - ); + return cb(null, actor); } static _fromWebFinger(actorQuery, cb) { diff --git a/core/database.js b/core/database.js index bab1ffbf5..0fede553d 100644 --- a/core/database.js +++ b/core/database.js @@ -480,7 +480,8 @@ dbs.message.run( actor_json VARCHAR NOT NULL, -- Actor document subject VARCHAR, -- Subject obtained from WebFinger, e.g. @Username@some.domain timestamp DATETIME NOT NULL, -- Timestamp in which this Actor was cached - + preferredUsername VARCHAR, -- Denormalized username for search + name VARCHAR, -- Denormalized actor name for search UNIQUE(actor_id) );` ); @@ -490,6 +491,25 @@ dbs.message.run( ON actor_cache (actor_id);` ); + // Denormalized actor information for search + dbs.activitypub.run( + `CREATE TABLE IF NOT EXISTS actor_cache_search ( + actor_id VARCHAR NOT NULL, -- Fully qualified Actor ID/URL + search_name VARCHAR, -- Name to search + CONSTRAINT actor_cache_search_actor_cache_fk FOREIGN KEY(actor_id) REFERENCES actor_cache(actor_id) ON DELETE CASCADE + );` + ); + + dbs.activitypub.run( + `CREATE INDEX IF NOT EXISTS actor_cache_search_actor_id_index0 + ON actor_cache_search (actor_id);` + ); + + dbs.activitypub.run( + `CREATE INDEX IF NOT EXISTS actor_cache_search_name_index0 + ON actor_cache_search (search_name);` + ); + // ActivityPub Collections of various types such as followers, following, likes, ... dbs.activitypub.run( `CREATE TABLE IF NOT EXISTS collection ( diff --git a/package-lock.json b/package-lock.json index 2af9d982a..936080bf1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "@breejs/later": "4.1.0", "async": "3.2.4", + "avatar-generator": "^2.0.4", "binary-parser": "2.1.0", "buffers": "github:NuSkooler/node-buffers", "bunyan": "1.8.15", @@ -22,6 +23,7 @@ "graceful-fs": "^4.2.10", "hashids": "^2.2.10", "hjson": "3.2.2", + "html-entities": "^2.3.3", "http-signature": "^1.3.6", "iconv-lite": "0.6.3", "ini-config-parser": "^1.0.4", @@ -35,6 +37,7 @@ "node-pty": "0.10.1", "nodemailer": "6.7.7", "otplib": "11.0.1", + "parse-full-name": "^1.2.6", "qrcode-generator": "^1.4.4", "rlogin": "^1.0.0", "sane": "5.0.1", @@ -42,6 +45,7 @@ "sqlite3": "5.0.11", "sqlite3-trans": "1.3.0", "ssh2": "1.11.0", + "striptags": "^4.0.0-alpha.4", "systeminformation": "5.12.3", "telnet-socket": "0.2.4", "temptmp": "^1.1.0", @@ -456,6 +460,31 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, + "node_modules/avatar-generator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/avatar-generator/-/avatar-generator-2.0.4.tgz", + "integrity": "sha512-1XH0LAO6QwtOvv9ImVKr6O0DUtH+QX4B6ReBcfjbUPnFVZMfSgM18jkP8MDsrPxk9UmCGMddxBCxdizU7lbwrw==", + "dependencies": { + "commander": "^5.1.0", + "seedrandom": "^3.0.5", + "sharp": "^0.25.2" + }, + "bin": { + "avatar-generator": "cli.js" + }, + "engines": { + "node": ">=8.0", + "npm": ">=6.0" + } + }, + "node_modules/avatar-generator/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "engines": { + "node": ">= 6" + } + }, "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -833,6 +862,14 @@ "node": ">=0.8" } }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/coffee-script": { "version": "1.12.7", "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", @@ -846,6 +883,15 @@ "node": ">=0.8.0" } }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -862,6 +908,15 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "node_modules/color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", @@ -870,6 +925,19 @@ "color-support": "bin.js" } }, + "node_modules/color/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, "node_modules/colorette": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", @@ -954,6 +1022,20 @@ } } }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/deep-extend": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", @@ -1431,6 +1513,14 @@ "resolved": "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz", "integrity": "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "engines": { + "node": ">=6" + } + }, "node_modules/external-editor": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", @@ -1575,6 +1665,11 @@ "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -1645,6 +1740,11 @@ "assert-plus": "^1.0.0" } }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, "node_modules/glob": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", @@ -1746,10 +1846,15 @@ "hjson": "bin/hjson" } }, + "node_modules/html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + }, "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "optional": true }, "node_modules/http-proxy-agent": { @@ -1916,6 +2021,11 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, "node_modules/ini-config-parser": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz", @@ -1983,6 +2093,11 @@ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "optional": true }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2086,6 +2201,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -2621,6 +2741,17 @@ "node": ">=6" } }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -2737,6 +2868,11 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, "node_modules/moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", @@ -2802,6 +2938,11 @@ "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -2837,6 +2978,22 @@ "split2": "^4.1.0" } }, + "node_modules/node-abi": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", + "dependencies": { + "semver": "^5.4.1" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/node-addon-api": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", @@ -2974,6 +3131,11 @@ "node": ">=6.0.0" } }, + "node_modules/noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==" + }, "node_modules/nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -3018,6 +3180,14 @@ "set-blocking": "^2.0.0" } }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3166,6 +3336,11 @@ "node": ">=6" } }, + "node_modules/parse-full-name": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/parse-full-name/-/parse-full-name-1.2.6.tgz", + "integrity": "sha512-uIaENXJFmZfzulBndhHJayi7ZEifJ1bXKaWYmySa04EmMX7eIcsufiAgWTYiJqWRa/Sq7JWPGtCIXFAoUfF7gw==" + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -3246,6 +3421,182 @@ "node": ">=0.10.0" } }, + "node_modules/prebuild-install": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", + "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", + "dependencies": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.7.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/prebuild-install/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prebuild-install/node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "node_modules/prebuild-install/node_modules/are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/prebuild-install/node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prebuild-install/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/prebuild-install/node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/prebuild-install/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prebuild-install/node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prebuild-install/node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/prebuild-install/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/prebuild-install/node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/prebuild-install/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/prebuild-install/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prebuild-install/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -3270,6 +3621,11 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -3332,6 +3688,36 @@ } ] }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -3537,6 +3923,11 @@ "truncate-utf8-bytes": "^1.0.0" } }, + "node_modules/seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + }, "node_modules/semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -3581,6 +3972,150 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, + "node_modules/sharp": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.25.4.tgz", + "integrity": "sha512-umSzJJ1oBwIOfwFFt/fJ7JgCva9FvrEU2cbbm7u/3hSDZhXvkME8WE5qpaJqLIe2Har5msF5UG4CzYlEg5o3BQ==", + "hasInstallScript": true, + "dependencies": { + "color": "^3.1.2", + "detect-libc": "^1.0.3", + "node-addon-api": "^3.0.0", + "npmlog": "^4.1.2", + "prebuild-install": "^5.3.4", + "semver": "^7.3.2", + "simple-get": "^4.0.0", + "tar": "^6.0.2", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/sharp/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sharp/node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "node_modules/sharp/node_modules/are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/sharp/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/sharp/node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/sharp/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sharp/node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" + }, + "node_modules/sharp/node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/sharp/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/sharp/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/sharp/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sharp/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -3605,6 +4140,57 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, "node_modules/slice-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", @@ -3835,6 +4421,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/striptags": { + "version": "4.0.0-alpha.4", + "resolved": "https://registry.npmjs.org/striptags/-/striptags-4.0.0-alpha.4.tgz", + "integrity": "sha512-/0jWyVWhpg9ciRHfjKYBpMHXct/HrFRfsR2HU77nGPbc8SPcVSIHZlZR/0TG3MyPq2C+HiHuwx8BlbcdI/cNbw==" + }, "node_modules/supports-color": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", @@ -3887,6 +4478,37 @@ "node": ">= 10" } }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/tar/node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -3990,6 +4612,17 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -4170,6 +4803,14 @@ "node": ">= 8" } }, + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "engines": { + "node": ">=4" + } + }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -4552,6 +5193,23 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, + "avatar-generator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/avatar-generator/-/avatar-generator-2.0.4.tgz", + "integrity": "sha512-1XH0LAO6QwtOvv9ImVKr6O0DUtH+QX4B6ReBcfjbUPnFVZMfSgM18jkP8MDsrPxk9UmCGMddxBCxdizU7lbwrw==", + "requires": { + "commander": "^5.1.0", + "seedrandom": "^3.0.5", + "sharp": "^0.25.2" + }, + "dependencies": { + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" + } + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -4808,11 +5466,40 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" + }, "coffee-script": { "version": "1.12.7", "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==" }, + "color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "requires": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + }, + "dependencies": { + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + } + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -4826,6 +5513,15 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", @@ -4894,6 +5590,14 @@ "ms": "2.1.2" } }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "requires": { + "mimic-response": "^3.1.0" + } + }, "deep-extend": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", @@ -5265,6 +5969,11 @@ "resolved": "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz", "integrity": "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + }, "external-editor": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", @@ -5383,6 +6092,11 @@ "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -5438,6 +6152,11 @@ "assert-plus": "^1.0.0" } }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, "glob": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", @@ -5517,10 +6236,15 @@ "resolved": "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz", "integrity": "sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==" }, + "html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + }, "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "optional": true }, "http-proxy-agent": { @@ -5634,6 +6358,11 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, "ini-config-parser": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz", @@ -5694,6 +6423,11 @@ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "optional": true }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -5761,6 +6495,11 @@ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -6150,6 +6889,11 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -6237,6 +6981,11 @@ "minimist": "^1.2.6" } }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, "moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", @@ -6292,6 +7041,11 @@ "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -6321,6 +7075,21 @@ "split2": "^4.1.0" } }, + "node-abi": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", + "requires": { + "semver": "^5.4.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, "node-addon-api": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", @@ -6424,6 +7193,11 @@ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz", "integrity": "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==" }, + "noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==" + }, "nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -6456,6 +7230,11 @@ "set-blocking": "^2.0.0" } }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -6562,6 +7341,11 @@ "callsites": "^3.0.0" } }, + "parse-full-name": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/parse-full-name/-/parse-full-name-1.2.6.tgz", + "integrity": "sha512-uIaENXJFmZfzulBndhHJayi7ZEifJ1bXKaWYmySa04EmMX7eIcsufiAgWTYiJqWRa/Sq7JWPGtCIXFAoUfF7gw==" + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -6612,6 +7396,151 @@ "pinkie": "^2.0.0" } }, + "prebuild-install": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", + "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.7.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "requires": { + "mimic-response": "^2.0.0" + } + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -6624,6 +7553,11 @@ "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", "dev": true }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -6666,6 +7600,29 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + } + } + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -6810,6 +7767,11 @@ "truncate-utf8-bytes": "^1.0.0" } }, + "seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + }, "semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -6841,6 +7803,127 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, + "sharp": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.25.4.tgz", + "integrity": "sha512-umSzJJ1oBwIOfwFFt/fJ7JgCva9FvrEU2cbbm7u/3hSDZhXvkME8WE5qpaJqLIe2Har5msF5UG4CzYlEg5o3BQ==", + "requires": { + "color": "^3.1.2", + "detect-libc": "^1.0.3", + "node-addon-api": "^3.0.0", + "npmlog": "^4.1.2", + "prebuild-install": "^5.3.4", + "semver": "^7.3.2", + "simple-get": "^4.0.0", + "tar": "^6.0.2", + "tunnel-agent": "^0.6.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -6859,6 +7942,29 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "requires": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "requires": { + "is-arrayish": "^0.3.1" + } + }, "slice-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", @@ -7013,6 +8119,11 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "striptags": { + "version": "4.0.0-alpha.4", + "resolved": "https://registry.npmjs.org/striptags/-/striptags-4.0.0-alpha.4.tgz", + "integrity": "sha512-/0jWyVWhpg9ciRHfjKYBpMHXct/HrFRfsR2HU77nGPbc8SPcVSIHZlZR/0TG3MyPq2C+HiHuwx8BlbcdI/cNbw==" + }, "supports-color": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", @@ -7046,6 +8157,36 @@ } } }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + }, + "dependencies": { + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + } + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, "telnet-socket": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz", @@ -7125,6 +8266,14 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -7281,6 +8430,11 @@ "isexe": "^2.0.0" } }, + "which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==" + }, "wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", diff --git a/package.json b/package.json index 490c9397a..6be18eea9 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "node-pty": "0.10.1", "nodemailer": "6.7.7", "otplib": "11.0.1", + "parse-full-name": "^1.2.6", "qrcode-generator": "^1.4.4", "rlogin": "^1.0.0", "sane": "5.0.1", diff --git a/yarn.lock b/yarn.lock index 53cf5057b..e0457b4e0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,3016 +3,3014 @@ "@breejs/later@4.1.0": - version "4.1.0" - resolved "https://registry.npmjs.org/@breejs/later/-/later-4.1.0.tgz" - integrity sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA== + "integrity" "sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA==" + "resolved" "https://registry.npmjs.org/@breejs/later/-/later-4.1.0.tgz" + "version" "4.1.0" "@cnakazawa/watch@^1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz" - integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== + "integrity" "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==" + "resolved" "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz" + "version" "1.0.3" dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" + "exec-sh" "^0.3.2" + "minimist" "^1.2.0" "@eslint/eslintrc@^1.4.1": - version "1.4.1" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz" - integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.4.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" + "integrity" "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==" + "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz" + "version" "1.4.1" + dependencies: + "ajv" "^6.12.4" + "debug" "^4.3.2" + "espree" "^9.4.0" + "globals" "^13.19.0" + "ignore" "^5.2.0" + "import-fresh" "^3.2.1" + "js-yaml" "^4.1.0" + "minimatch" "^3.1.2" + "strip-json-comments" "^3.1.1" "@gar/promisify@^1.0.1": - version "1.1.3" - resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + "integrity" "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + "resolved" "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" + "version" "1.1.3" "@humanwhocodes/config-array@^0.11.8": - version "0.11.8" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz" - integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== + "integrity" "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz" + "version" "0.11.8" dependencies: "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.5" + "debug" "^4.1.1" + "minimatch" "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + "integrity" "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + "version" "1.0.1" "@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + "integrity" "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + "version" "1.2.1" "@mapbox/node-pre-gyp@^1.0.0": - version "1.0.9" - resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz" - integrity sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw== - dependencies: - detect-libc "^2.0.0" - https-proxy-agent "^5.0.0" - make-dir "^3.1.0" - node-fetch "^2.6.7" - nopt "^5.0.0" - npmlog "^5.0.1" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.11" + "integrity" "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==" + "resolved" "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz" + "version" "1.0.9" + dependencies: + "detect-libc" "^2.0.0" + "https-proxy-agent" "^5.0.0" + "make-dir" "^3.1.0" + "node-fetch" "^2.6.7" + "nopt" "^5.0.0" + "npmlog" "^5.0.1" + "rimraf" "^3.0.2" + "semver" "^7.3.5" + "tar" "^6.1.11" "@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + "version" "2.1.5" dependencies: "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" + "run-parallel" "^1.1.9" "@nodelib/fs.stat@2.0.5": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + "version" "2.0.5" "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + "version" "1.2.8" dependencies: "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" + "fastq" "^1.6.0" "@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + "integrity" "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==" + "resolved" "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" + "version" "1.1.1" dependencies: "@gar/promisify" "^1.0.1" - semver "^7.3.5" + "semver" "^7.3.5" "@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + "integrity" "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==" + "resolved" "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" + "version" "1.1.2" dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" + "mkdirp" "^1.0.4" + "rimraf" "^3.0.2" "@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + "integrity" "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" + "version" "1.1.2" "@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== - -abbrev@1: - version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^8.8.0: - version "8.8.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" - integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agentkeepalive@^4.1.3: - version "4.2.1" - resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" - integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== - dependencies: - debug "^4.1.0" - depd "^1.1.2" - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + "integrity" "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + "resolved" "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz" + "version" "1.1.1" + +"abbrev@1": + "integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + "version" "1.1.1" + +"acorn-jsx@^5.3.2": + "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" + "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + "version" "5.3.2" + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8.8.0": + "integrity" "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" + "version" "8.8.1" + +"agent-base@^6.0.2", "agent-base@6": + "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==" + "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "debug" "4" + +"agentkeepalive@^4.1.3": + "integrity" "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==" + "resolved" "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "debug" "^4.1.0" + "depd" "^1.1.2" + "humanize-ms" "^1.2.1" + +"aggregate-error@^3.0.0": + "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" + "resolved" "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "clean-stack" "^2.0.0" + "indent-string" "^4.0.0" + +"ajv@^6.10.0", "ajv@^6.12.4": + "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + "version" "6.12.6" + dependencies: + "fast-deep-equal" "^3.1.1" + "fast-json-stable-stringify" "^2.0.0" + "json-schema-traverse" "^0.4.1" + "uri-js" "^4.2.2" + +"ansi-escapes@^4.2.1", "ansi-escapes@^4.3.0": + "integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==" + "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + "version" "4.3.2" + dependencies: + "type-fest" "^0.21.3" + +"ansi-regex@^2.0.0": + "integrity" "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + "version" "2.1.1" + +"ansi-regex@^5.0.1": + "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + "version" "5.0.1" + +"ansi-regex@^6.0.1": + "integrity" "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" + "version" "6.0.1" + +"ansi-styles@^4.0.0", "ansi-styles@^4.1.0": + "integrity" "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz" + "version" "4.2.1" dependencies: "@types/color-name" "^1.1.1" - color-convert "^2.0.1" + "color-convert" "^2.0.1" -ansi-styles@^6.0.0: - version "6.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== +"ansi-styles@^6.0.0": + "integrity" "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + "version" "6.2.1" -anymatch@^3.1.1: - version "3.1.2" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== +"anymatch@^3.1.1": + "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + "version" "3.1.2" dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + "normalize-path" "^3.0.0" + "picomatch" "^2.0.4" "aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-we-there-yet@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" - integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -are-we-there-yet@~1.1.2: - version "1.1.7" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" - integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" - integrity "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==" - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" - integrity "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" - -asn1@^0.2.4, asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async@3.2.4: - version "3.2.4" - resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== - -avatar-generator@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/avatar-generator/-/avatar-generator-2.0.4.tgz#01d5db33b86ff32cf274f532ab9def0aaf49921a" - integrity sha512-1XH0LAO6QwtOvv9ImVKr6O0DUtH+QX4B6ReBcfjbUPnFVZMfSgM18jkP8MDsrPxk9UmCGMddxBCxdizU7lbwrw== - dependencies: - commander "^5.1.0" - seedrandom "^3.0.5" - sharp "^0.25.2" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" - integrity "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" - integrity "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==" - dependencies: - tweetnacl "^0.14.3" - -binary-parser@1.6.2: - version "1.6.2" - resolved "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz" - integrity sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ== - -binary-parser@2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz" - integrity sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ== - -bl@^4.0.3, bl@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + "integrity" "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + "resolved" "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + "version" "2.0.0" + +"aproba@^1.0.3": + "integrity" "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "resolved" "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" + "version" "1.2.0" + +"are-we-there-yet@^2.0.0": + "integrity" "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==" + "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "delegates" "^1.0.0" + "readable-stream" "^3.6.0" + +"are-we-there-yet@^3.0.0": + "integrity" "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==" + "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "delegates" "^1.0.0" + "readable-stream" "^3.6.0" + +"are-we-there-yet@~1.1.2": + "integrity" "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==" + "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz" + "version" "1.1.7" + dependencies: + "delegates" "^1.0.0" + "readable-stream" "^2.0.6" + +"argparse@^2.0.1": + "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + "version" "2.0.1" + +"array-union@^1.0.1": + "integrity" "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "array-uniq" "^1.0.1" + +"array-uniq@^1.0.1": + "integrity" "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" + "resolved" "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + "version" "1.0.3" + +"asn1@^0.2.4", "asn1@~0.2.3": + "integrity" "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==" + "resolved" "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" + "version" "0.2.6" + dependencies: + "safer-buffer" "~2.1.0" + +"assert-plus@^1.0.0", "assert-plus@1.0.0": + "integrity" "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" + "resolved" "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + "version" "1.0.0" + +"astral-regex@^2.0.0": + "integrity" "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + "version" "2.0.0" + +"async@3.2.4": + "integrity" "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + "resolved" "https://registry.npmjs.org/async/-/async-3.2.4.tgz" + "version" "3.2.4" + +"avatar-generator@^2.0.4": + "integrity" "sha512-1XH0LAO6QwtOvv9ImVKr6O0DUtH+QX4B6ReBcfjbUPnFVZMfSgM18jkP8MDsrPxk9UmCGMddxBCxdizU7lbwrw==" + "resolved" "https://registry.npmjs.org/avatar-generator/-/avatar-generator-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "commander" "^5.1.0" + "seedrandom" "^3.0.5" + "sharp" "^0.25.2" + +"balanced-match@^1.0.0": + "integrity" "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + "version" "1.0.0" + +"base64-js@^1.3.1": + "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + "version" "1.5.1" + +"bcrypt-pbkdf@^1.0.0", "bcrypt-pbkdf@^1.0.2": + "integrity" "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==" + "resolved" "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "tweetnacl" "^0.14.3" + +"binary-parser@1.6.2": + "integrity" "sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ==" + "resolved" "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz" + "version" "1.6.2" + +"binary-parser@2.1.0": + "integrity" "sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ==" + "resolved" "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz" + "version" "2.1.0" + +"bl@^4.0.3", "bl@^4.1.0": + "integrity" "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==" + "resolved" "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + "version" "4.1.0" dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" + "buffer" "^5.5.0" + "inherits" "^2.0.4" + "readable-stream" "^3.4.0" -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== +"brace-expansion@^1.1.7": + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== +"brace-expansion@^2.0.1": + "integrity" "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + "version" "2.0.1" dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + "balanced-match" "^1.0.0" + +"braces@^3.0.2": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" dependencies: - fill-range "^7.0.1" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" - integrity "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" + "fill-range" "^7.0.1" + +"bser@2.1.1": + "integrity" "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==" + "resolved" "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "node-int64" "^0.4.0" + +"buffer-crc32@~0.2.3": + "integrity" "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + "resolved" "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" + "version" "0.2.13" + +"buffer@^5.5.0": + "integrity" "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" + "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + "version" "5.7.1" + dependencies: + "base64-js" "^1.3.1" + "ieee754" "^1.1.13" "buffers@github:NuSkooler/node-buffers": - version "0.1.1" - resolved "git+ssh://git@github.com/NuSkooler/node-buffers.git#cd0855598f7048b02f0a51c90e22573973e9e2c2" - -buildcheck@0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz" - integrity sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA== - -bunyan@1.8.15: - version "1.8.15" - resolved "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz" - integrity sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig== + "resolved" "git+ssh://git@github.com/NuSkooler/node-buffers.git#cd0855598f7048b02f0a51c90e22573973e9e2c2" + "version" "0.1.1" + +"buildcheck@0.0.3": + "integrity" "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==" + "resolved" "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz" + "version" "0.0.3" + +"bunyan@1.8.15": + "integrity" "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==" + "resolved" "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz" + "version" "1.8.15" optionalDependencies: - dtrace-provider "~0.8" - moment "^2.19.3" - mv "~2" - safe-json-stringify "~1" + "dtrace-provider" "~0.8" + "moment" "^2.19.3" + "mv" "~2" + "safe-json-stringify" "~1" -cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== +"cacache@^15.2.0": + "integrity" "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==" + "resolved" "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" + "version" "15.3.0" dependencies: "@npmcli/fs" "^1.0.0" "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.5.0: - version "2.6.1" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== - -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== - dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" - -cli-truncate@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" - integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== - dependencies: - slice-ansi "^5.0.0" - string-width "^5.0.0" - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" - integrity "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== - -coffee-script@^1.12.4: - version "1.12.7" - resolved "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz" - integrity sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw== - -color-convert@^1.9.3: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.6.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" - integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color-support@^1.1.2, color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -color@^3.1.2: - version "3.2.1" - resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" - integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== - dependencies: - color-convert "^1.9.3" - color-string "^1.6.0" - -colorette@^2.0.19: - version "2.0.19" - resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== - -commander@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" - integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== - -commander@^9.4.1: - version "9.5.0" - resolved "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz" - integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - -console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cpu-features@~0.0.4: - version "0.0.4" - resolved "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz" - integrity sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A== - dependencies: - buildcheck "0.0.3" - nan "^2.15.0" - -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -decompress-response@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" - integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== - dependencies: - mimic-response "^2.0.0" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deep-extend@^0.5.1: - version "0.5.1" - resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz" - integrity sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w== - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" - integrity "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==" - -deepdash@^5.3.9: - version "5.3.9" - resolved "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz" - integrity sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg== - dependencies: - lodash "^4.17.21" - lodash-es "^4.17.21" - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" - integrity "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==" - dependencies: - clone "^1.0.2" - -del@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/del/-/del-3.0.0.tgz" - integrity "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==" - dependencies: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" - integrity "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - -denque@^2.0.1: - version "2.1.0" - resolved "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz" - integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== - -depd@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -detect-libc@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== - -detect-libc@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" - integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dtrace-provider@~0.8: - version "0.8.7" - resolved "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz" - integrity "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q==" - dependencies: - nan "^2.10.0" - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -easy-table@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz" - integrity sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww== - dependencies: - ansi-regex "^5.0.1" + "chownr" "^2.0.0" + "fs-minipass" "^2.0.0" + "glob" "^7.1.4" + "infer-owner" "^1.0.4" + "lru-cache" "^6.0.0" + "minipass" "^3.1.1" + "minipass-collect" "^1.0.2" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.2" + "mkdirp" "^1.0.3" + "p-map" "^4.0.0" + "promise-inflight" "^1.0.1" + "rimraf" "^3.0.2" + "ssri" "^8.0.1" + "tar" "^6.0.2" + "unique-filename" "^1.1.1" + +"callsites@^3.0.0": + "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + "version" "3.1.0" + +"capture-exit@^2.0.0": + "integrity" "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==" + "resolved" "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "rsvp" "^4.8.4" + +"chalk@^4.0.0", "chalk@^4.1.0", "chalk@^4.1.1": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chardet@^0.7.0": + "integrity" "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "resolved" "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + "version" "0.7.0" + +"chownr@^1.1.1": + "integrity" "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "resolved" "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" + "version" "1.1.4" + +"chownr@^2.0.0": + "integrity" "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + "resolved" "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + "version" "2.0.0" + +"clean-stack@^2.0.0": + "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + "version" "2.2.0" + +"cli-cursor@^3.1.0": + "integrity" "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" + "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "restore-cursor" "^3.1.0" + +"cli-spinners@^2.5.0": + "integrity" "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" + "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" + "version" "2.6.1" + +"cli-truncate@^2.1.0": + "integrity" "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==" + "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "slice-ansi" "^3.0.0" + "string-width" "^4.2.0" + +"cli-truncate@^3.1.0": + "integrity" "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==" + "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "slice-ansi" "^5.0.0" + "string-width" "^5.0.0" + +"cli-width@^3.0.0": + "integrity" "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + "version" "3.0.0" + +"clone@^1.0.2": + "integrity" "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" + "resolved" "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + "version" "1.0.4" + +"code-point-at@^1.0.0": + "integrity" "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" + "resolved" "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" + "version" "1.1.0" + +"coffee-script@^1.12.4": + "integrity" "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==" + "resolved" "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz" + "version" "1.12.7" + +"color-convert@^1.9.3": + "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + "version" "1.9.3" + dependencies: + "color-name" "1.1.3" + +"color-convert@^2.0.1": + "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "color-name" "~1.1.4" + +"color-name@^1.0.0", "color-name@~1.1.4": + "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + "version" "1.1.4" + +"color-name@1.1.3": + "integrity" "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + "version" "1.1.3" + +"color-string@^1.6.0": + "integrity" "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==" + "resolved" "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" + "version" "1.9.1" + dependencies: + "color-name" "^1.0.0" + "simple-swizzle" "^0.2.2" + +"color-support@^1.1.2", "color-support@^1.1.3": + "integrity" "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + "resolved" "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + "version" "1.1.3" + +"color@^3.1.2": + "integrity" "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==" + "resolved" "https://registry.npmjs.org/color/-/color-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "color-convert" "^1.9.3" + "color-string" "^1.6.0" + +"colorette@^2.0.19": + "integrity" "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" + "resolved" "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" + "version" "2.0.19" + +"commander@^5.1.0": + "integrity" "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" + "resolved" "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" + "version" "5.1.0" + +"commander@^9.4.1": + "integrity" "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==" + "resolved" "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz" + "version" "9.5.0" + +"concat-map@0.0.1": + "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" + +"console-control-strings@^1.0.0", "console-control-strings@^1.1.0", "console-control-strings@~1.1.0": + "integrity" "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + "resolved" "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + "version" "1.1.0" + +"core-util-is@~1.0.0", "core-util-is@1.0.2": + "integrity" "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + "version" "1.0.2" + +"cpu-features@~0.0.4": + "integrity" "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==" + "resolved" "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz" + "version" "0.0.4" + dependencies: + "buildcheck" "0.0.3" + "nan" "^2.15.0" + +"cross-spawn@^7.0.0", "cross-spawn@^7.0.2", "cross-spawn@^7.0.3": + "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + "version" "7.0.3" + dependencies: + "path-key" "^3.1.0" + "shebang-command" "^2.0.0" + "which" "^2.0.1" + +"dashdash@^1.12.0": + "integrity" "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==" + "resolved" "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" + "version" "1.14.1" + dependencies: + "assert-plus" "^1.0.0" + +"debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.2", "debug@^4.3.3", "debug@^4.3.4", "debug@4": + "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + "version" "4.3.4" + dependencies: + "ms" "2.1.2" + +"decompress-response@^4.2.0": + "integrity" "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==" + "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "mimic-response" "^2.0.0" + +"decompress-response@^6.0.0": + "integrity" "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==" + "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "mimic-response" "^3.1.0" + +"deep-extend@^0.5.1": + "integrity" "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" + "resolved" "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz" + "version" "0.5.1" + +"deep-extend@^0.6.0": + "integrity" "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "resolved" "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" + "version" "0.6.0" + +"deep-is@^0.1.3": + "integrity" "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==" + "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" + "version" "0.1.3" + +"deepdash@^5.3.9": + "integrity" "sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg==" + "resolved" "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz" + "version" "5.3.9" + dependencies: + "lodash" "^4.17.21" + "lodash-es" "^4.17.21" + +"defaults@^1.0.3": + "integrity" "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==" + "resolved" "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "clone" "^1.0.2" + +"del@^3.0.0": + "integrity" "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==" + "resolved" "https://registry.npmjs.org/del/-/del-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "globby" "^6.1.0" + "is-path-cwd" "^1.0.0" + "is-path-in-cwd" "^1.0.0" + "p-map" "^1.1.1" + "pify" "^3.0.0" + "rimraf" "^2.2.8" + +"delegates@^1.0.0": + "integrity" "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + "resolved" "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + "version" "1.0.0" + +"denque@^2.0.1": + "integrity" "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" + "resolved" "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz" + "version" "2.1.0" + +"depd@^1.1.2": + "integrity" "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + "version" "1.1.2" + +"detect-libc@^1.0.3": + "integrity" "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==" + "resolved" "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz" + "version" "1.0.3" + +"detect-libc@^2.0.0": + "integrity" "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + "resolved" "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" + "version" "2.0.1" + +"doctrine@^3.0.0": + "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" + "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "esutils" "^2.0.2" + +"dtrace-provider@~0.8": + "integrity" "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q==" + "resolved" "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz" + "version" "0.8.7" + dependencies: + "nan" "^2.10.0" + +"eastasianwidth@^0.2.0": + "integrity" "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "resolved" "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + "version" "0.2.0" + +"easy-table@^1.2.0": + "integrity" "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==" + "resolved" "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "ansi-regex" "^5.0.1" optionalDependencies: - wcwidth "^1.0.1" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -encoding@^0.1.12: - version "0.1.13" - resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz" - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== - dependencies: - once "^1.4.0" - -end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-prettier@^8.5.0: - version "8.5.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" - integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== - -eslint-plugin-json@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz" - integrity sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g== - dependencies: - lodash "^4.17.21" - vscode-json-languageservice "^4.1.6" - -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" - integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== - -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== - -eslint@8.31.0: - version "8.31.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz" - integrity sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA== + "wcwidth" "^1.0.1" + +"ecc-jsbn@~0.1.1": + "integrity" "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==" + "resolved" "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" + "version" "0.1.2" + dependencies: + "jsbn" "~0.1.0" + "safer-buffer" "^2.1.0" + +"emoji-regex@^8.0.0": + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + "version" "8.0.0" + +"emoji-regex@^9.2.2": + "integrity" "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + "version" "9.2.2" + +"encoding@^0.1.0", "encoding@^0.1.12": + "integrity" "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==" + "resolved" "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + "version" "0.1.13" + dependencies: + "iconv-lite" "^0.6.2" + +"end-of-stream@^1.1.0", "end-of-stream@^1.4.1": + "integrity" "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==" + "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz" + "version" "1.4.1" + dependencies: + "once" "^1.4.0" + +"env-paths@^2.2.0": + "integrity" "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + "resolved" "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + "version" "2.2.1" + +"err-code@^2.0.2": + "integrity" "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + "resolved" "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + "version" "2.0.3" + +"escape-string-regexp@^1.0.5": + "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" + +"escape-string-regexp@^4.0.0": + "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + "version" "4.0.0" + +"eslint-config-prettier@^8.5.0": + "integrity" "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==" + "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" + "version" "8.5.0" + +"eslint-plugin-json@^3.1.0": + "integrity" "sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==" + "resolved" "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "lodash" "^4.17.21" + "vscode-json-languageservice" "^4.1.6" + +"eslint-scope@^7.1.1": + "integrity" "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" + "version" "7.1.1" + dependencies: + "esrecurse" "^4.3.0" + "estraverse" "^5.2.0" + +"eslint-utils@^3.0.0": + "integrity" "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==" + "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "eslint-visitor-keys" "^2.0.0" + +"eslint-visitor-keys@^2.0.0": + "integrity" "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" + "version" "2.0.0" + +"eslint-visitor-keys@^3.3.0": + "integrity" "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" + "version" "3.3.0" + +"eslint@>=5", "eslint@>=7.0.0", "eslint@8.31.0": + "integrity" "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==" + "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz" + "version" "8.31.0" dependencies: "@eslint/eslintrc" "^1.4.1" "@humanwhocodes/config-array" "^0.11.8" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-sdsl "^4.1.4" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - -espree@^9.4.0: - version "9.4.1" - resolved "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz" - integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== - dependencies: - acorn "^8.8.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -exec-sh@^0.3.2, exec-sh@^0.3.4: - version "0.3.6" - resolved "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - -execa@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -execa@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz" - integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^3.0.1" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - -exiftool@^0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz" - integrity "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" - -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - -external-editor@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz" - integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extsprintf@1.3.0, extsprintf@^1.2.0: - version "1.3.0" - resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== - dependencies: - bser "2.1.1" - -figures@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz" - integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" - integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@10.1.0: - version "10.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - -gauge@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" - integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.2" - console-control-strings "^1.0.0" - has-unicode "^2.0.1" - object-assign "^4.1.1" - signal-exit "^3.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.2" - -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -get-stream@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@8.0.3: - version "8.0.3" - resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -glob@^6.0.1: - version "6.0.4" - resolved "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz" - integrity "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.3, glob@^7.0.5: - version "7.1.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.3: - version "7.1.6" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.4: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^13.19.0: - version "13.19.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz" - integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ== - dependencies: - type-fest "^0.20.2" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" - integrity "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==" - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.6: - version "4.2.10" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-unicode@^2.0.0, has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -hashids@^2.2.10: - version "2.2.10" - resolved "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz" - integrity sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA== - -hjson@3.2.2: - version "3.2.2" - resolved "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" - integrity sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q== - -html-entities@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" - integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== - -http-cache-semantics@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + "ajv" "^6.10.0" + "chalk" "^4.0.0" + "cross-spawn" "^7.0.2" + "debug" "^4.3.2" + "doctrine" "^3.0.0" + "escape-string-regexp" "^4.0.0" + "eslint-scope" "^7.1.1" + "eslint-utils" "^3.0.0" + "eslint-visitor-keys" "^3.3.0" + "espree" "^9.4.0" + "esquery" "^1.4.0" + "esutils" "^2.0.2" + "fast-deep-equal" "^3.1.3" + "file-entry-cache" "^6.0.1" + "find-up" "^5.0.0" + "glob-parent" "^6.0.2" + "globals" "^13.19.0" + "grapheme-splitter" "^1.0.4" + "ignore" "^5.2.0" + "import-fresh" "^3.0.0" + "imurmurhash" "^0.1.4" + "is-glob" "^4.0.0" + "is-path-inside" "^3.0.3" + "js-sdsl" "^4.1.4" + "js-yaml" "^4.1.0" + "json-stable-stringify-without-jsonify" "^1.0.1" + "levn" "^0.4.1" + "lodash.merge" "^4.6.2" + "minimatch" "^3.1.2" + "natural-compare" "^1.4.0" + "optionator" "^0.9.1" + "regexpp" "^3.2.0" + "strip-ansi" "^6.0.1" + "strip-json-comments" "^3.1.0" + "text-table" "^0.2.0" + +"espree@^9.4.0": + "integrity" "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==" + "resolved" "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz" + "version" "9.4.1" + dependencies: + "acorn" "^8.8.0" + "acorn-jsx" "^5.3.2" + "eslint-visitor-keys" "^3.3.0" + +"esquery@^1.4.0": + "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==" + "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "estraverse" "^5.1.0" + +"esrecurse@^4.3.0": + "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" + "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "estraverse" "^5.2.0" + +"estraverse@^5.1.0", "estraverse@^5.2.0": + "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" + "version" "5.2.0" + +"esutils@^2.0.2": + "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + "version" "2.0.3" + +"exec-sh@^0.3.2", "exec-sh@^0.3.4": + "integrity" "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" + "resolved" "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz" + "version" "0.3.6" + +"execa@^4.0.0": + "integrity" "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==" + "resolved" "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "cross-spawn" "^7.0.0" + "get-stream" "^5.0.0" + "human-signals" "^1.1.1" + "is-stream" "^2.0.0" + "merge-stream" "^2.0.0" + "npm-run-path" "^4.0.0" + "onetime" "^5.1.0" + "signal-exit" "^3.0.2" + "strip-final-newline" "^2.0.0" + +"execa@^6.1.0": + "integrity" "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==" + "resolved" "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "cross-spawn" "^7.0.3" + "get-stream" "^6.0.1" + "human-signals" "^3.0.1" + "is-stream" "^3.0.0" + "merge-stream" "^2.0.0" + "npm-run-path" "^5.1.0" + "onetime" "^6.0.0" + "signal-exit" "^3.0.7" + "strip-final-newline" "^3.0.0" + +"exiftool@^0.0.3": + "integrity" "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" + "resolved" "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz" + "version" "0.0.3" + +"expand-template@^2.0.3": + "integrity" "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + "resolved" "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz" + "version" "2.0.3" + +"external-editor@^3.0.3": + "integrity" "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==" + "resolved" "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "chardet" "^0.7.0" + "iconv-lite" "^0.4.24" + "tmp" "^0.0.33" + +"extsprintf@^1.2.0", "extsprintf@1.3.0": + "integrity" "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" + "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + "version" "1.3.0" + +"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": + "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + "version" "3.1.3" + +"fast-json-stable-stringify@^2.0.0": + "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + "version" "2.1.0" + +"fast-levenshtein@^2.0.6": + "integrity" "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + "version" "2.0.6" + +"fastq@^1.6.0": + "integrity" "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==" + "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" + "version" "1.15.0" + dependencies: + "reusify" "^1.0.4" + +"fb-watchman@^2.0.1": + "integrity" "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==" + "resolved" "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "bser" "2.1.1" + +"figures@^3.0.0": + "integrity" "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==" + "resolved" "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "escape-string-regexp" "^1.0.5" + +"file-entry-cache@^6.0.1": + "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" + "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "flat-cache" "^3.0.4" + +"fill-range@^7.0.1": + "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "to-regex-range" "^5.0.1" + +"find-up@^5.0.0": + "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "locate-path" "^6.0.0" + "path-exists" "^4.0.0" + +"flat-cache@^3.0.4": + "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==" + "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "flatted" "^3.1.0" + "rimraf" "^3.0.2" + +"flatted@^3.1.0": + "integrity" "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==" + "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" + "version" "3.1.1" + +"fs-constants@^1.0.0": + "integrity" "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "resolved" "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" + "version" "1.0.0" + +"fs-extra@10.1.0": + "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + "version" "10.1.0" + dependencies: + "graceful-fs" "^4.2.0" + "jsonfile" "^6.0.1" + "universalify" "^2.0.0" + +"fs-minipass@^2.0.0": + "integrity" "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==" + "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "minipass" "^3.0.0" + +"fs.realpath@^1.0.0": + "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" + +"gauge@^3.0.0": + "integrity" "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==" + "resolved" "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "aproba" "^1.0.3 || ^2.0.0" + "color-support" "^1.1.2" + "console-control-strings" "^1.0.0" + "has-unicode" "^2.0.1" + "object-assign" "^4.1.1" + "signal-exit" "^3.0.0" + "string-width" "^4.2.3" + "strip-ansi" "^6.0.1" + "wide-align" "^1.1.2" + +"gauge@^4.0.3": + "integrity" "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==" + "resolved" "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" + "version" "4.0.4" + dependencies: + "aproba" "^1.0.3 || ^2.0.0" + "color-support" "^1.1.3" + "console-control-strings" "^1.1.0" + "has-unicode" "^2.0.1" + "signal-exit" "^3.0.7" + "string-width" "^4.2.3" + "strip-ansi" "^6.0.1" + "wide-align" "^1.1.5" + +"gauge@~2.7.3": + "integrity" "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==" + "resolved" "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz" + "version" "2.7.4" + dependencies: + "aproba" "^1.0.3" + "console-control-strings" "^1.0.0" + "has-unicode" "^2.0.0" + "object-assign" "^4.1.0" + "signal-exit" "^3.0.0" + "string-width" "^1.0.1" + "strip-ansi" "^3.0.1" + "wide-align" "^1.1.0" + +"get-stream@^5.0.0": + "integrity" "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "pump" "^3.0.0" + +"get-stream@^6.0.1": + "integrity" "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + "version" "6.0.1" + +"getpass@^0.1.1": + "integrity" "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==" + "resolved" "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" + "version" "0.1.7" + dependencies: + "assert-plus" "^1.0.0" + +"github-from-package@0.0.0": + "integrity" "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + "resolved" "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" + "version" "0.0.0" + +"glob-parent@^6.0.2": + "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "is-glob" "^4.0.3" + +"glob@^6.0.1": + "integrity" "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==" + "resolved" "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz" + "version" "6.0.4" + dependencies: + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "2 || 3" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^7.0.3", "glob@^7.0.5": + "integrity" "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" + "version" "7.1.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^7.1.3": + "integrity" "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + "version" "7.1.6" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^7.1.4": + "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + "version" "7.2.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.1.1" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@8.0.3": + "integrity" "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==" + "resolved" "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" + "version" "8.0.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^5.0.1" + "once" "^1.3.0" + +"globals@^13.19.0": + "integrity" "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==" + "resolved" "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz" + "version" "13.19.0" + dependencies: + "type-fest" "^0.20.2" + +"globby@^6.1.0": + "integrity" "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==" + "resolved" "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "array-union" "^1.0.1" + "glob" "^7.0.3" + "object-assign" "^4.0.1" + "pify" "^2.0.0" + "pinkie-promise" "^2.0.0" + +"graceful-fs@^4.1.6", "graceful-fs@^4.2.0", "graceful-fs@^4.2.10", "graceful-fs@^4.2.6": + "integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + "version" "4.2.10" + +"grapheme-splitter@^1.0.4": + "integrity" "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + "resolved" "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" + "version" "1.0.4" + +"has-flag@^4.0.0": + "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + "version" "4.0.0" + +"has-unicode@^2.0.0", "has-unicode@^2.0.1": + "integrity" "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + "resolved" "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + "version" "2.0.1" + +"hashids@^2.2.10": + "integrity" "sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA==" + "resolved" "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz" + "version" "2.2.10" + +"hjson@3.2.2": + "integrity" "sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==" + "resolved" "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" + "version" "3.2.2" + +"html-entities@^2.3.3": + "integrity" "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + "resolved" "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz" + "version" "2.3.3" + +"http-cache-semantics@^4.1.0": + "integrity" "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" + "version" "4.1.1" + +"http-proxy-agent@^4.0.1": + "integrity" "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==" + "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" + "version" "4.0.1" dependencies: "@tootallnate/once" "1" - agent-base "6" - debug "4" - -http-signature@^1.3.6: - version "1.3.6" - resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz" - integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== - dependencies: - assert-plus "^1.0.0" - jsprim "^2.0.2" - sshpk "^1.14.1" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -human-signals@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz" - integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -husky@^8.0.0: - version "8.0.3" - resolved "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz" - integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== - -iconv-lite@0.6.3, iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini-config-parser@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz" - integrity sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg== - dependencies: - coffee-script "^1.12.4" - deep-extend "^0.5.1" - rimraf "^2.6.1" - -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -inquirer@^8.2.2: - version "8.2.2" - resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz" - integrity sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-fullwidth-code-point@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" - integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== - -is-glob@^4.0.0, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz" - integrity "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" - -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz" - integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz" - integrity "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==" - dependencies: - path-is-inside "^1.0.1" - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - -js-sdsl@^4.1.4: - version "4.2.0" - resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz" - integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - integrity "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - -jsonc-parser@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" + "agent-base" "6" + "debug" "4" + +"http-signature@^1.3.6": + "integrity" "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==" + "resolved" "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz" + "version" "1.3.6" + dependencies: + "assert-plus" "^1.0.0" + "jsprim" "^2.0.2" + "sshpk" "^1.14.1" + +"https-proxy-agent@^5.0.0": + "integrity" "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==" + "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "agent-base" "6" + "debug" "4" + +"human-signals@^1.1.1": + "integrity" "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" + "version" "1.1.1" + +"human-signals@^3.0.1": + "integrity" "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==" + "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz" + "version" "3.0.1" + +"humanize-ms@^1.2.1": + "integrity" "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==" + "resolved" "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "ms" "^2.0.0" + +"husky@^8.0.0": + "integrity" "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==" + "resolved" "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz" + "version" "8.0.3" + +"iconv-lite@^0.4.24": + "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + "version" "0.4.24" + dependencies: + "safer-buffer" ">= 2.1.2 < 3" + +"iconv-lite@^0.6.2", "iconv-lite@0.6.3": + "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + "version" "0.6.3" + dependencies: + "safer-buffer" ">= 2.1.2 < 3.0.0" + +"ieee754@^1.1.13": + "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + "version" "1.2.1" + +"ignore@^5.2.0": + "integrity" "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" + "version" "5.2.4" + +"import-fresh@^3.0.0", "import-fresh@^3.2.1": + "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" + "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "parent-module" "^1.0.0" + "resolve-from" "^4.0.0" + +"imurmurhash@^0.1.4": + "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + "version" "0.1.4" + +"indent-string@^4.0.0": + "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + "version" "4.0.0" + +"infer-owner@^1.0.4": + "integrity" "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + "resolved" "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + "version" "1.0.4" + +"inflight@^1.0.4": + "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "once" "^1.3.0" + "wrappy" "1" + +"inherits@^2.0.3", "inherits@^2.0.4", "inherits@~2.0.3", "inherits@2": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" + +"ini-config-parser@^1.0.4": + "integrity" "sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg==" + "resolved" "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "coffee-script" "^1.12.4" + "deep-extend" "^0.5.1" + "rimraf" "^2.6.1" + +"ini@~1.3.0": + "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + "version" "1.3.8" + +"inquirer@^8.2.2": + "integrity" "sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow==" + "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz" + "version" "8.2.2" + dependencies: + "ansi-escapes" "^4.2.1" + "chalk" "^4.1.1" + "cli-cursor" "^3.1.0" + "cli-width" "^3.0.0" + "external-editor" "^3.0.3" + "figures" "^3.0.0" + "lodash" "^4.17.21" + "mute-stream" "0.0.8" + "ora" "^5.4.1" + "run-async" "^2.4.0" + "rxjs" "^7.5.5" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + "through" "^2.3.6" + +"ip@^2.0.0": + "integrity" "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + "resolved" "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" + "version" "2.0.0" + +"is-arrayish@^0.3.1": + "integrity" "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" + "version" "0.3.2" + +"is-extglob@^2.1.1": + "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + "version" "2.1.1" + +"is-fullwidth-code-point@^1.0.0": + "integrity" "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "number-is-nan" "^1.0.0" + +"is-fullwidth-code-point@^3.0.0": + "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + "version" "3.0.0" + +"is-fullwidth-code-point@^4.0.0": + "integrity" "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" + "version" "4.0.0" + +"is-glob@^4.0.0", "is-glob@^4.0.3": + "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "is-extglob" "^2.1.1" + +"is-interactive@^1.0.0": + "integrity" "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + "resolved" "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + "version" "1.0.0" + +"is-lambda@^1.0.1": + "integrity" "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + "resolved" "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + "version" "1.0.1" + +"is-number@^7.0.0": + "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + "version" "7.0.0" + +"is-path-cwd@^1.0.0": + "integrity" "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" + "resolved" "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz" + "version" "1.0.0" + +"is-path-in-cwd@^1.0.0": + "integrity" "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==" + "resolved" "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "is-path-inside" "^1.0.0" + +"is-path-inside@^1.0.0": + "integrity" "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==" + "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "path-is-inside" "^1.0.1" + +"is-path-inside@^3.0.3": + "integrity" "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + "version" "3.0.3" + +"is-stream@^2.0.0": + "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + "version" "2.0.1" + +"is-stream@^3.0.0": + "integrity" "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" + "version" "3.0.0" + +"is-unicode-supported@^0.1.0": + "integrity" "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + "version" "0.1.0" + +"isarray@~1.0.0": + "integrity" "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "version" "1.0.0" + +"isexe@^2.0.0": + "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + "version" "2.0.0" + +"js-sdsl@^4.1.4": + "integrity" "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==" + "resolved" "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz" + "version" "4.2.0" + +"js-yaml@^4.1.0": + "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "argparse" "^2.0.1" + +"jsbn@~0.1.0": + "integrity" "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + "resolved" "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + "version" "0.1.1" + +"json-schema-traverse@^0.4.1": + "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + "version" "0.4.1" + +"json-schema@0.4.0": + "integrity" "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + "resolved" "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" + "version" "0.4.0" + +"json-stable-stringify-without-jsonify@^1.0.1": + "integrity" "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + "version" "1.0.1" + +"jsonc-parser@^3.0.0": + "integrity" "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + "resolved" "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" + "version" "3.2.0" + +"jsonfile@^6.0.1": + "integrity" "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==" + "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "universalify" "^1.0.0" optionalDependencies: - graceful-fs "^4.1.6" - -jsprim@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz" - integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lilconfig@2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz" - integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== - -lint-staged@^13.1.0: - version "13.1.0" - resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-13.1.0.tgz" - integrity sha512-pn/sR8IrcF/T0vpWLilih8jmVouMlxqXxKuAojmbiGX5n/gDnz+abdPptlj0vYnbfE0SQNl3CY/HwtM0+yfOVQ== - dependencies: - cli-truncate "^3.1.0" - colorette "^2.0.19" - commander "^9.4.1" - debug "^4.3.4" - execa "^6.1.0" - lilconfig "2.0.6" - listr2 "^5.0.5" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-inspect "^1.12.2" - pidtree "^0.6.0" - string-argv "^0.3.1" - yaml "^2.1.3" - -listr2@^5.0.5: - version "5.0.6" - resolved "https://registry.npmjs.org/listr2/-/listr2-5.0.6.tgz" - integrity sha512-u60KxKBy1BR2uLJNTWNptzWQ1ob/gjMzIJPZffAENzpZqbMZ/5PrXXOomDcevIS/+IB7s1mmCEtSlT2qHWMqag== - dependencies: - cli-truncate "^2.1.0" - colorette "^2.0.19" - log-update "^4.0.0" - p-map "^4.0.0" - rfdc "^1.3.0" - rxjs "^7.5.7" - through "^2.3.8" - wrap-ansi "^7.0.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash-es@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" - integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-update@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" - integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== - dependencies: - ansi-escapes "^4.3.0" - cli-cursor "^3.1.0" - slice-ansi "^4.0.0" - wrap-ansi "^6.2.0" - -lru-cache@7.13.2: - version "7.13.2" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz" - integrity sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-fetch-happen@^9.1.0: - version "9.1.0" - resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.2" - promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.0.0" - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz" - integrity "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==" - dependencies: - tmpl "1.0.x" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -micromatch@^4.0.2, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.35: - version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - -mimic-response@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" - integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.0" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -minimist@^1.2.3: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^1.3.2: - version "1.4.1" - resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" + "graceful-fs" "^4.1.6" + +"jsprim@^2.0.2": + "integrity" "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==" + "resolved" "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "assert-plus" "1.0.0" + "extsprintf" "1.3.0" + "json-schema" "0.4.0" + "verror" "1.10.0" + +"levn@^0.4.1": + "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" + "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + "version" "0.4.1" + dependencies: + "prelude-ls" "^1.2.1" + "type-check" "~0.4.0" + +"lilconfig@2.0.6": + "integrity" "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" + "resolved" "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz" + "version" "2.0.6" + +"lint-staged@^13.1.0": + "integrity" "sha512-pn/sR8IrcF/T0vpWLilih8jmVouMlxqXxKuAojmbiGX5n/gDnz+abdPptlj0vYnbfE0SQNl3CY/HwtM0+yfOVQ==" + "resolved" "https://registry.npmjs.org/lint-staged/-/lint-staged-13.1.0.tgz" + "version" "13.1.0" + dependencies: + "cli-truncate" "^3.1.0" + "colorette" "^2.0.19" + "commander" "^9.4.1" + "debug" "^4.3.4" + "execa" "^6.1.0" + "lilconfig" "2.0.6" + "listr2" "^5.0.5" + "micromatch" "^4.0.5" + "normalize-path" "^3.0.0" + "object-inspect" "^1.12.2" + "pidtree" "^0.6.0" + "string-argv" "^0.3.1" + "yaml" "^2.1.3" + +"listr2@^5.0.5": + "integrity" "sha512-u60KxKBy1BR2uLJNTWNptzWQ1ob/gjMzIJPZffAENzpZqbMZ/5PrXXOomDcevIS/+IB7s1mmCEtSlT2qHWMqag==" + "resolved" "https://registry.npmjs.org/listr2/-/listr2-5.0.6.tgz" + "version" "5.0.6" + dependencies: + "cli-truncate" "^2.1.0" + "colorette" "^2.0.19" + "log-update" "^4.0.0" + "p-map" "^4.0.0" + "rfdc" "^1.3.0" + "rxjs" "^7.5.7" + "through" "^2.3.8" + "wrap-ansi" "^7.0.0" + +"locate-path@^6.0.0": + "integrity" "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "p-locate" "^5.0.0" + +"lodash-es@^4.17.21": + "integrity" "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + "resolved" "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" + "version" "4.17.21" + +"lodash.merge@^4.6.2": + "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + "version" "4.6.2" + +"lodash@^4.17.15", "lodash@^4.17.21", "lodash@4.17.21": + "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + "version" "4.17.21" + +"log-symbols@^4.1.0": + "integrity" "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==" + "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "chalk" "^4.1.0" + "is-unicode-supported" "^0.1.0" + +"log-update@^4.0.0": + "integrity" "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==" + "resolved" "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "ansi-escapes" "^4.3.0" + "cli-cursor" "^3.1.0" + "slice-ansi" "^4.0.0" + "wrap-ansi" "^6.2.0" + +"lru-cache@^6.0.0": + "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "yallist" "^4.0.0" + +"lru-cache@7.13.2": + "integrity" "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz" + "version" "7.13.2" + +"make-dir@^3.1.0": + "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "semver" "^6.0.0" + +"make-fetch-happen@^9.1.0": + "integrity" "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==" + "resolved" "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" + "version" "9.1.0" + dependencies: + "agentkeepalive" "^4.1.3" + "cacache" "^15.2.0" + "http-cache-semantics" "^4.1.0" + "http-proxy-agent" "^4.0.1" + "https-proxy-agent" "^5.0.0" + "is-lambda" "^1.0.1" + "lru-cache" "^6.0.0" + "minipass" "^3.1.3" + "minipass-collect" "^1.0.2" + "minipass-fetch" "^1.3.2" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "negotiator" "^0.6.2" + "promise-retry" "^2.0.1" + "socks-proxy-agent" "^6.0.0" + "ssri" "^8.0.0" + +"makeerror@1.0.x": + "integrity" "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==" + "resolved" "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz" + "version" "1.0.11" + dependencies: + "tmpl" "1.0.x" + +"merge-stream@^2.0.0": + "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + "version" "2.0.0" + +"micromatch@^4.0.2", "micromatch@^4.0.5": + "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + "version" "4.0.5" + dependencies: + "braces" "^3.0.2" + "picomatch" "^2.3.1" + +"mime-db@1.52.0": + "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + "version" "1.52.0" + +"mime-types@^2.1.35": + "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" + "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + "version" "2.1.35" + dependencies: + "mime-db" "1.52.0" + +"mimic-fn@^2.1.0": + "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + "version" "2.1.0" + +"mimic-fn@^4.0.0": + "integrity" "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" + "version" "4.0.0" + +"mimic-response@^2.0.0": + "integrity" "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" + "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz" + "version" "2.1.0" + +"mimic-response@^3.1.0": + "integrity" "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" + "version" "3.1.0" + +"minimatch@^3.0.4", "minimatch@^3.0.5", "minimatch@^3.1.1", "minimatch@^3.1.2", "minimatch@2 || 3": + "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "brace-expansion" "^1.1.7" + +"minimatch@^5.0.1": + "integrity" "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "brace-expansion" "^2.0.1" + +"minimist@^1.1.1", "minimist@^1.2.0", "minimist@^1.2.3", "minimist@^1.2.6": + "integrity" "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" + "version" "1.2.6" + +"minipass-collect@^1.0.2": + "integrity" "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==" + "resolved" "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "minipass" "^3.0.0" + +"minipass-fetch@^1.3.2": + "integrity" "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==" + "resolved" "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" + "version" "1.4.1" + dependencies: + "minipass" "^3.1.0" + "minipass-sized" "^1.0.3" + "minizlib" "^2.0.0" optionalDependencies: - encoding "^0.1.12" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: - version "3.3.4" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" - integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== - dependencies: - yallist "^4.0.0" - -minizlib@^2.0.0, minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mkdirp@~0.5.1: - version "0.5.6" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -moment@2.29.4, moment@^2.19.3: - version "2.29.4" - resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== - -ms@2.1.2, ms@^2.0.0: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -mv@~2: - version "2.1.1" - resolved "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz" - integrity "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==" - dependencies: - mkdirp "~0.5.1" - ncp "~2.0.0" - rimraf "~2.4.0" - -nan@^2.10.0, nan@^2.14.0, nan@^2.15.0, nan@^2.16.0: - version "2.16.0" - resolved "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz" - integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== - -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - integrity "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - -ncp@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz" - integrity "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==" - -negotiator@^0.6.2: - version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -nntp-server@3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/nntp-server/-/nntp-server-3.1.0.tgz" - integrity sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw== - dependencies: - debug "^4.3.3" - denque "^2.0.1" - serialize-error "^8.1.0" - split2 "^4.1.0" - -node-abi@^2.7.0: - version "2.30.1" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" - integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w== - dependencies: - semver "^5.4.1" - -node-addon-api@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" - integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== - -node-addon-api@^4.2.0: - version "4.3.0" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz" - integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== - -node-fetch@^2.6.7: - version "2.6.7" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-gyp@8.x: - version "8.4.1" - resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" - integrity "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - -node-pty@0.10.1: - version "0.10.1" - resolved "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz" - integrity sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg== - dependencies: - nan "^2.14.0" - -nodemailer@6.7.7: - version "6.7.7" - resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz" - integrity sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA== - -noop-logger@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" - integrity sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ== - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== - dependencies: - path-key "^4.0.0" - -npmlog@^4.0.1, npmlog@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -npmlog@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - -npmlog@^6.0.0: - version "6.0.2" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== - -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - -object-inspect@^1.12.2: - version "1.12.3" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" - dependencies: - wrappy "1" - -onetime@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz" - integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== - dependencies: - mimic-fn "^2.1.0" - -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - integrity "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" - -otplib@11.0.1: - version "11.0.1" - resolved "https://registry.npmjs.org/otplib/-/otplib-11.0.1.tgz" - integrity sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ== - dependencies: - thirty-two "1.0.2" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz" - integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - -path-is-inside@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" - integrity "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - -picomatch@^2.0.4, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pidtree@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz" - integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - integrity "sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" - integrity "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - integrity "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" - integrity "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" - -prebuild-install@^5.3.4: - version "5.3.6" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.6.tgz#7c225568d864c71d89d07f8796042733a3f54291" - integrity sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg== - dependencies: - detect-libc "^1.0.3" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^2.7.0" - noop-logger "^0.1.1" - npmlog "^4.0.1" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^3.0.3" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - which-pm-runs "^1.0.0" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier@2.8.1: - version "2.8.1" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz" - integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0: - version "2.2.0" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz" - integrity sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw== - -qrcode-generator@^1.4.4: - version "1.4.4" - resolved "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz" - integrity sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -readable-stream@^2.0.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - -rimraf@^2.2.8, rimraf@^2.6.1: - version "2.6.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" - integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== - dependencies: - glob "^7.0.5" - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rimraf@~2.4.0: - version "2.4.5" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz" - integrity "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==" - dependencies: - glob "^6.0.1" - -rlogin@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz" - integrity "sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==" - -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.5.5, rxjs@^7.5.7: - version "7.8.0" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz" - integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== - dependencies: - tslib "^2.1.0" - -safe-buffer@^5.0.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-json-stringify@~1: - version "1.2.0" - resolved "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz" - integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/sane/-/sane-5.0.1.tgz" - integrity sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q== + "encoding" "^0.1.12" + +"minipass-flush@^1.0.5": + "integrity" "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==" + "resolved" "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "minipass" "^3.0.0" + +"minipass-pipeline@^1.2.2", "minipass-pipeline@^1.2.4": + "integrity" "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==" + "resolved" "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + "version" "1.2.4" + dependencies: + "minipass" "^3.0.0" + +"minipass-sized@^1.0.3": + "integrity" "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==" + "resolved" "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "minipass" "^3.0.0" + +"minipass@^3.0.0", "minipass@^3.1.0", "minipass@^3.1.1", "minipass@^3.1.3": + "integrity" "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" + "version" "3.3.4" + dependencies: + "yallist" "^4.0.0" + +"minizlib@^2.0.0", "minizlib@^2.1.1": + "integrity" "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==" + "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "minipass" "^3.0.0" + "yallist" "^4.0.0" + +"mkdirp-classic@^0.5.2", "mkdirp-classic@^0.5.3": + "integrity" "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + "resolved" "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" + "version" "0.5.3" + +"mkdirp@^1.0.3": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"mkdirp@^1.0.4": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"mkdirp@~0.5.1": + "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + "version" "0.5.6" + dependencies: + "minimist" "^1.2.6" + +"moment@^2.19.3", "moment@2.29.4": + "integrity" "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + "resolved" "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" + "version" "2.29.4" + +"ms@^2.0.0", "ms@2.1.2": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" + +"mute-stream@0.0.8": + "integrity" "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + "version" "0.0.8" + +"mv@~2": + "integrity" "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==" + "resolved" "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "mkdirp" "~0.5.1" + "ncp" "~2.0.0" + "rimraf" "~2.4.0" + +"nan@^2.10.0", "nan@^2.14.0", "nan@^2.15.0", "nan@^2.16.0": + "integrity" "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" + "resolved" "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz" + "version" "2.16.0" + +"napi-build-utils@^1.0.1": + "integrity" "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + "resolved" "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" + "version" "1.0.2" + +"natural-compare@^1.4.0": + "integrity" "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + "version" "1.4.0" + +"ncp@~2.0.0": + "integrity" "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==" + "resolved" "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz" + "version" "2.0.0" + +"negotiator@^0.6.2": + "integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + "version" "0.6.3" + +"nntp-server@3.1.0": + "integrity" "sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw==" + "resolved" "https://registry.npmjs.org/nntp-server/-/nntp-server-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "debug" "^4.3.3" + "denque" "^2.0.1" + "serialize-error" "^8.1.0" + "split2" "^4.1.0" + +"node-abi@^2.7.0": + "integrity" "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==" + "resolved" "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz" + "version" "2.30.1" + dependencies: + "semver" "^5.4.1" + +"node-addon-api@^3.0.0": + "integrity" "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" + "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" + "version" "3.2.1" + +"node-addon-api@^4.2.0": + "integrity" "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz" + "version" "4.3.0" + +"node-fetch@^2.6.7": + "integrity" "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==" + "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" + "version" "2.6.7" + dependencies: + "whatwg-url" "^5.0.0" + +"node-gyp@8.x": + "integrity" "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==" + "resolved" "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" + "version" "8.4.1" + dependencies: + "env-paths" "^2.2.0" + "glob" "^7.1.4" + "graceful-fs" "^4.2.6" + "make-fetch-happen" "^9.1.0" + "nopt" "^5.0.0" + "npmlog" "^6.0.0" + "rimraf" "^3.0.2" + "semver" "^7.3.5" + "tar" "^6.1.2" + "which" "^2.0.2" + +"node-int64@^0.4.0": + "integrity" "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + "resolved" "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + "version" "0.4.0" + +"node-pty@0.10.1": + "integrity" "sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg==" + "resolved" "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz" + "version" "0.10.1" + dependencies: + "nan" "^2.14.0" + +"nodemailer@6.7.7": + "integrity" "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==" + "resolved" "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz" + "version" "6.7.7" + +"noop-logger@^0.1.1": + "integrity" "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==" + "resolved" "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz" + "version" "0.1.1" + +"nopt@^5.0.0": + "integrity" "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==" + "resolved" "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "abbrev" "1" + +"normalize-path@^3.0.0": + "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + "version" "3.0.0" + +"npm-run-path@^4.0.0": + "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "path-key" "^3.0.0" + +"npm-run-path@^5.1.0": + "integrity" "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "path-key" "^4.0.0" + +"npmlog@^4.0.1": + "integrity" "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "are-we-there-yet" "~1.1.2" + "console-control-strings" "~1.1.0" + "gauge" "~2.7.3" + "set-blocking" "~2.0.0" + +"npmlog@^4.1.2": + "integrity" "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "are-we-there-yet" "~1.1.2" + "console-control-strings" "~1.1.0" + "gauge" "~2.7.3" + "set-blocking" "~2.0.0" + +"npmlog@^5.0.1": + "integrity" "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "are-we-there-yet" "^2.0.0" + "console-control-strings" "^1.1.0" + "gauge" "^3.0.0" + "set-blocking" "^2.0.0" + +"npmlog@^6.0.0": + "integrity" "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "are-we-there-yet" "^3.0.0" + "console-control-strings" "^1.1.0" + "gauge" "^4.0.3" + "set-blocking" "^2.0.0" + +"number-is-nan@^1.0.0": + "integrity" "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" + "resolved" "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + "version" "1.0.1" + +"object-assign@^4.0.1", "object-assign@^4.1.0", "object-assign@^4.1.1": + "integrity" "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + "version" "4.1.1" + +"object-inspect@^1.12.2": + "integrity" "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" + "version" "1.12.3" + +"once@^1.3.0", "once@^1.3.1", "once@^1.4.0": + "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" + "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "wrappy" "1" + +"onetime@^5.1.0": + "integrity" "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "mimic-fn" "^2.1.0" + +"onetime@^6.0.0": + "integrity" "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "mimic-fn" "^4.0.0" + +"optionator@^0.9.1": + "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" + "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + "version" "0.9.1" + dependencies: + "deep-is" "^0.1.3" + "fast-levenshtein" "^2.0.6" + "levn" "^0.4.1" + "prelude-ls" "^1.2.1" + "type-check" "^0.4.0" + "word-wrap" "^1.2.3" + +"ora@^5.4.1": + "integrity" "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==" + "resolved" "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + "version" "5.4.1" + dependencies: + "bl" "^4.1.0" + "chalk" "^4.1.0" + "cli-cursor" "^3.1.0" + "cli-spinners" "^2.5.0" + "is-interactive" "^1.0.0" + "is-unicode-supported" "^0.1.0" + "log-symbols" "^4.1.0" + "strip-ansi" "^6.0.0" + "wcwidth" "^1.0.1" + +"os-tmpdir@~1.0.2": + "integrity" "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + "resolved" "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + "version" "1.0.2" + +"otplib@11.0.1": + "integrity" "sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ==" + "resolved" "https://registry.npmjs.org/otplib/-/otplib-11.0.1.tgz" + "version" "11.0.1" + dependencies: + "thirty-two" "1.0.2" + +"p-limit@^3.0.2": + "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "yocto-queue" "^0.1.0" + +"p-locate@^5.0.0": + "integrity" "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "p-limit" "^3.0.2" + +"p-map@^1.1.1": + "integrity" "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" + "resolved" "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz" + "version" "1.2.0" + +"p-map@^4.0.0": + "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" + "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "aggregate-error" "^3.0.0" + +"parent-module@^1.0.0": + "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" + "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "callsites" "^3.0.0" + +"parse-full-name@^1.2.6": + "integrity" "sha512-uIaENXJFmZfzulBndhHJayi7ZEifJ1bXKaWYmySa04EmMX7eIcsufiAgWTYiJqWRa/Sq7JWPGtCIXFAoUfF7gw==" + "resolved" "https://registry.npmjs.org/parse-full-name/-/parse-full-name-1.2.6.tgz" + "version" "1.2.6" + +"path-exists@^4.0.0": + "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + "version" "4.0.0" + +"path-is-absolute@^1.0.0": + "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "version" "1.0.1" + +"path-is-inside@^1.0.1": + "integrity" "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + "resolved" "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" + "version" "1.0.2" + +"path-key@^3.0.0", "path-key@^3.1.0": + "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + "version" "3.1.1" + +"path-key@^4.0.0": + "integrity" "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" + "version" "4.0.0" + +"picomatch@^2.0.4", "picomatch@^2.3.1": + "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + "version" "2.3.1" + +"pidtree@^0.6.0": + "integrity" "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==" + "resolved" "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz" + "version" "0.6.0" + +"pify@^2.0.0": + "integrity" "sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + "version" "2.3.0" + +"pify@^3.0.0": + "integrity" "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + "resolved" "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + "version" "3.0.0" + +"pinkie-promise@^2.0.0": + "integrity" "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==" + "resolved" "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "pinkie" "^2.0.0" + +"pinkie@^2.0.0": + "integrity" "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" + "resolved" "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + "version" "2.0.4" + +"prebuild-install@^5.3.4": + "integrity" "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==" + "resolved" "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz" + "version" "5.3.6" + dependencies: + "detect-libc" "^1.0.3" + "expand-template" "^2.0.3" + "github-from-package" "0.0.0" + "minimist" "^1.2.3" + "mkdirp-classic" "^0.5.3" + "napi-build-utils" "^1.0.1" + "node-abi" "^2.7.0" + "noop-logger" "^0.1.1" + "npmlog" "^4.0.1" + "pump" "^3.0.0" + "rc" "^1.2.7" + "simple-get" "^3.0.3" + "tar-fs" "^2.0.0" + "tunnel-agent" "^0.6.0" + "which-pm-runs" "^1.0.0" + +"prelude-ls@^1.2.1": + "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + "version" "1.2.1" + +"prettier@2.8.1": + "integrity" "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==" + "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz" + "version" "2.8.1" + +"process-nextick-args@~2.0.0": + "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + "version" "2.0.1" + +"promise-inflight@^1.0.1": + "integrity" "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + "resolved" "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + "version" "1.0.1" + +"promise-retry@^2.0.1": + "integrity" "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==" + "resolved" "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "err-code" "^2.0.2" + "retry" "^0.12.0" + +"pump@^3.0.0": + "integrity" "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==" + "resolved" "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "end-of-stream" "^1.1.0" + "once" "^1.3.1" + +"punycode@^2.1.0": + "integrity" "sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz" + "version" "2.2.0" + +"qrcode-generator@^1.4.4": + "integrity" "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==" + "resolved" "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz" + "version" "1.4.4" + +"queue-microtask@^1.2.2": + "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + "version" "1.2.3" + +"rc@^1.2.7": + "integrity" "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==" + "resolved" "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" + "version" "1.2.8" + dependencies: + "deep-extend" "^0.6.0" + "ini" "~1.3.0" + "minimist" "^1.2.0" + "strip-json-comments" "~2.0.1" + +"readable-stream@^2.0.6": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + +"readable-stream@^3.1.1", "readable-stream@^3.4.0", "readable-stream@^3.6.0": + "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +"regexpp@^3.2.0": + "integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" + "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" + "version" "3.2.0" + +"resolve-from@^4.0.0": + "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + "version" "4.0.0" + +"restore-cursor@^3.1.0": + "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" + "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "onetime" "^5.1.0" + "signal-exit" "^3.0.2" + +"retry@^0.12.0": + "integrity" "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" + "resolved" "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + "version" "0.12.0" + +"reusify@^1.0.4": + "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + "version" "1.0.4" + +"rfdc@^1.3.0": + "integrity" "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + "resolved" "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" + "version" "1.3.0" + +"rimraf@^2.2.8": + "integrity" "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" + "version" "2.6.2" + dependencies: + "glob" "^7.0.5" + +"rimraf@^2.6.1": + "integrity" "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" + "version" "2.6.2" + dependencies: + "glob" "^7.0.5" + +"rimraf@^3.0.2": + "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "glob" "^7.1.3" + +"rimraf@~2.4.0": + "integrity" "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz" + "version" "2.4.5" + dependencies: + "glob" "^6.0.1" + +"rlogin@^1.0.0": + "integrity" "sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==" + "resolved" "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz" + "version" "1.0.0" + +"rsvp@^4.8.4": + "integrity" "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" + "resolved" "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz" + "version" "4.8.5" + +"run-async@^2.4.0": + "integrity" "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + "resolved" "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + "version" "2.4.1" + +"run-parallel@^1.1.9": + "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" + "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "queue-microtask" "^1.2.2" + +"rxjs@^7.5.5", "rxjs@^7.5.7": + "integrity" "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==" + "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz" + "version" "7.8.0" + dependencies: + "tslib" "^2.1.0" + +"safe-buffer@^5.0.1", "safe-buffer@~5.1.0", "safe-buffer@~5.1.1": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" + +"safe-json-stringify@~1": + "integrity" "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==" + "resolved" "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz" + "version" "1.2.0" + +"safer-buffer@^2.0.2", "safer-buffer@^2.1.0", "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", "safer-buffer@~2.1.0": + "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + "version" "2.1.2" + +"sane@5.0.1": + "integrity" "sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q==" + "resolved" "https://registry.npmjs.org/sane/-/sane-5.0.1.tgz" + "version" "5.0.1" dependencies: "@cnakazawa/watch" "^1.0.3" - anymatch "^3.1.1" - capture-exit "^2.0.0" - exec-sh "^0.3.4" - execa "^4.0.0" - fb-watchman "^2.0.1" - micromatch "^4.0.2" - minimist "^1.1.1" - walker "~1.0.5" - -sanitize-filename@^1.6.3: - version "1.6.3" - resolved "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz" - integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== - dependencies: - truncate-utf8-bytes "^1.0.0" - -seedrandom@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7" - integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg== - -semver@^5.4.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.0.0: - version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.3.2: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.5: - version "7.3.7" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - -serialize-error@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz" - integrity sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ== - dependencies: - type-fest "^0.20.2" - -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -sharp@^0.25.2: - version "0.25.4" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.25.4.tgz#1a8e542144a07ab7e9316ab89de80182b827c363" - integrity sha512-umSzJJ1oBwIOfwFFt/fJ7JgCva9FvrEU2cbbm7u/3hSDZhXvkME8WE5qpaJqLIe2Har5msF5UG4CzYlEg5o3BQ== - dependencies: - color "^3.1.2" - detect-libc "^1.0.3" - node-addon-api "^3.0.0" - npmlog "^4.1.2" - prebuild-install "^5.3.4" - semver "^7.3.2" - simple-get "^4.0.0" - tar "^6.0.2" - tunnel-agent "^0.6.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.1.tgz#cc7ba77cfbe761036fbfce3d021af25fc5584d55" - integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA== - dependencies: - decompress-response "^4.2.0" - once "^1.3.1" - simple-concat "^1.0.0" - -simple-get@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== - dependencies: - is-arrayish "^0.3.1" - -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" - integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== - dependencies: - ansi-styles "^6.0.0" - is-fullwidth-code-point "^4.0.0" - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz" - integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.6.2: - version "2.7.0" - resolved "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz" - integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - -split2@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz" - integrity sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ== - -sqlite3-trans@1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz" - integrity sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg== - dependencies: - lodash "^4.17.15" - -sqlite3@5.0.11: - version "5.0.11" - resolved "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz" - integrity sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA== + "anymatch" "^3.1.1" + "capture-exit" "^2.0.0" + "exec-sh" "^0.3.4" + "execa" "^4.0.0" + "fb-watchman" "^2.0.1" + "micromatch" "^4.0.2" + "minimist" "^1.1.1" + "walker" "~1.0.5" + +"sanitize-filename@^1.6.3": + "integrity" "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==" + "resolved" "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz" + "version" "1.6.3" + dependencies: + "truncate-utf8-bytes" "^1.0.0" + +"seedrandom@^3.0.5": + "integrity" "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + "resolved" "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz" + "version" "3.0.5" + +"semver@^5.4.1": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"semver@^6.0.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^7.3.2", "semver@^7.3.5": + "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + "version" "7.3.7" + dependencies: + "lru-cache" "^6.0.0" + +"serialize-error@^8.1.0": + "integrity" "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==" + "resolved" "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz" + "version" "8.1.0" + dependencies: + "type-fest" "^0.20.2" + +"set-blocking@^2.0.0", "set-blocking@~2.0.0": + "integrity" "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + "version" "2.0.0" + +"sharp@^0.25.2": + "integrity" "sha512-umSzJJ1oBwIOfwFFt/fJ7JgCva9FvrEU2cbbm7u/3hSDZhXvkME8WE5qpaJqLIe2Har5msF5UG4CzYlEg5o3BQ==" + "resolved" "https://registry.npmjs.org/sharp/-/sharp-0.25.4.tgz" + "version" "0.25.4" + dependencies: + "color" "^3.1.2" + "detect-libc" "^1.0.3" + "node-addon-api" "^3.0.0" + "npmlog" "^4.1.2" + "prebuild-install" "^5.3.4" + "semver" "^7.3.2" + "simple-get" "^4.0.0" + "tar" "^6.0.2" + "tunnel-agent" "^0.6.0" + +"shebang-command@^2.0.0": + "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "shebang-regex" "^3.0.0" + +"shebang-regex@^3.0.0": + "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + "version" "3.0.0" + +"signal-exit@^3.0.0", "signal-exit@^3.0.2", "signal-exit@^3.0.7": + "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + "version" "3.0.7" + +"simple-concat@^1.0.0": + "integrity" "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + "resolved" "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" + "version" "1.0.1" + +"simple-get@^3.0.3": + "integrity" "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==" + "resolved" "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "decompress-response" "^4.2.0" + "once" "^1.3.1" + "simple-concat" "^1.0.0" + +"simple-get@^4.0.0": + "integrity" "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==" + "resolved" "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "decompress-response" "^6.0.0" + "once" "^1.3.1" + "simple-concat" "^1.0.0" + +"simple-swizzle@^0.2.2": + "integrity" "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==" + "resolved" "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" + "version" "0.2.2" + dependencies: + "is-arrayish" "^0.3.1" + +"slice-ansi@^3.0.0": + "integrity" "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "astral-regex" "^2.0.0" + "is-fullwidth-code-point" "^3.0.0" + +"slice-ansi@^4.0.0": + "integrity" "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "astral-regex" "^2.0.0" + "is-fullwidth-code-point" "^3.0.0" + +"slice-ansi@^5.0.0": + "integrity" "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "ansi-styles" "^6.0.0" + "is-fullwidth-code-point" "^4.0.0" + +"smart-buffer@^4.2.0": + "integrity" "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + "resolved" "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + "version" "4.2.0" + +"socks-proxy-agent@^6.0.0": + "integrity" "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==" + "resolved" "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz" + "version" "6.2.1" + dependencies: + "agent-base" "^6.0.2" + "debug" "^4.3.3" + "socks" "^2.6.2" + +"socks@^2.6.2": + "integrity" "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==" + "resolved" "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz" + "version" "2.7.0" + dependencies: + "ip" "^2.0.0" + "smart-buffer" "^4.2.0" + +"split2@^4.1.0": + "integrity" "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" + "resolved" "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz" + "version" "4.1.0" + +"sqlite3-trans@1.3.0": + "integrity" "sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg==" + "resolved" "https://registry.npmjs.org/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "lodash" "^4.17.15" + +"sqlite3@5.0.11": + "integrity" "sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA==" + "resolved" "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz" + "version" "5.0.11" dependencies: "@mapbox/node-pre-gyp" "^1.0.0" - node-addon-api "^4.2.0" - tar "^6.1.11" + "node-addon-api" "^4.2.0" + "tar" "^6.1.11" optionalDependencies: - node-gyp "8.x" + "node-gyp" "8.x" -ssh2@1.11.0: - version "1.11.0" - resolved "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz" - integrity sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw== +"ssh2@1.11.0": + "integrity" "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==" + "resolved" "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz" + "version" "1.11.0" dependencies: - asn1 "^0.2.4" - bcrypt-pbkdf "^1.0.2" + "asn1" "^0.2.4" + "bcrypt-pbkdf" "^1.0.2" optionalDependencies: - cpu-features "~0.0.4" - nan "^2.16.0" - -sshpk@^1.14.1: - version "1.17.0" - resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -string-argv@^0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" - integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.0: - version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string_decoder@^1.1.1: - version "1.2.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz" - integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== - dependencies: - safe-buffer "~5.1.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== - dependencies: - ansi-regex "^6.0.1" - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -striptags@^4.0.0-alpha.4: - version "4.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/striptags/-/striptags-4.0.0-alpha.4.tgz#824f1ac040f824574316ce87a3663c0c4df9900d" - integrity sha512-/0jWyVWhpg9ciRHfjKYBpMHXct/HrFRfsR2HU77nGPbc8SPcVSIHZlZR/0TG3MyPq2C+HiHuwx8BlbcdI/cNbw== - -supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== - dependencies: - has-flag "^4.0.0" - -systeminformation@5.12.3: - version "5.12.3" - resolved "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.3.tgz" - integrity sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A== - -tar-fs@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: - version "6.1.11" - resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -telnet-socket@0.2.4: - version "0.2.4" - resolved "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz" - integrity sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ== - dependencies: - binary-parser "1.6.2" - buffers "github:NuSkooler/node-buffers" - -temptmp@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/temptmp/-/temptmp-1.1.0.tgz" - integrity sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ== - dependencies: - del "^3.0.0" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - -thirty-two@1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz" - integrity "sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==" - -through@^2.3.6, through@^2.3.8: - version "2.3.8" - resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - integrity "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.x: - version "1.0.5" - resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -truncate-utf8-bytes@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz" - integrity "sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==" - dependencies: - utf8-byte-length "^1.0.1" - -tslib@^2.1.0: - version "2.3.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" - integrity "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -utf8-byte-length@^1.0.1: - version "1.0.4" - resolved "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz" - integrity "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - -uuid-parse@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz" - integrity sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A== - -uuid@8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vscode-json-languageservice@^4.1.6: - version "4.2.1" - resolved "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz" - integrity sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA== - dependencies: - jsonc-parser "^3.0.0" - vscode-languageserver-textdocument "^1.0.3" - vscode-languageserver-types "^3.16.0" - vscode-nls "^5.0.0" - vscode-uri "^3.0.3" - -vscode-languageserver-textdocument@^1.0.3: - version "1.0.8" - resolved "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz" - integrity sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q== - -vscode-languageserver-types@^3.16.0: - version "3.17.2" - resolved "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz" - integrity sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA== - -vscode-nls@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz" - integrity sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng== - -vscode-uri@^3.0.3: - version "3.0.7" - resolved "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz" - integrity sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA== - -walker@~1.0.5: - version "1.0.7" - resolved "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz" - integrity "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==" - dependencies: - makeerror "1.0.x" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" - integrity "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==" - dependencies: - defaults "^1.0.3" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-pm-runs@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.1.0.tgz#35ccf7b1a0fce87bd8b92a478c9d045785d3bf35" - integrity sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA== - -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0, wide-align@^1.1.2, wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - -ws@7.5.9: - version "7.5.9" - resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^2.1.3: - version "2.2.1" - resolved "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz" - integrity sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw== - -yazl@^2.5.1: - version "2.5.1" - resolved "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz" - integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw== - dependencies: - buffer-crc32 "~0.2.3" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + "cpu-features" "~0.0.4" + "nan" "^2.16.0" + +"sshpk@^1.14.1": + "integrity" "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==" + "resolved" "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" + "version" "1.17.0" + dependencies: + "asn1" "~0.2.3" + "assert-plus" "^1.0.0" + "bcrypt-pbkdf" "^1.0.0" + "dashdash" "^1.12.0" + "ecc-jsbn" "~0.1.1" + "getpass" "^0.1.1" + "jsbn" "~0.1.0" + "safer-buffer" "^2.0.2" + "tweetnacl" "~0.14.0" + +"ssri@^8.0.0", "ssri@^8.0.1": + "integrity" "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==" + "resolved" "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" + "version" "8.0.1" + dependencies: + "minipass" "^3.1.1" + +"string_decoder@^1.1.1": + "integrity" "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "safe-buffer" "~5.1.0" + +"string_decoder@~1.1.1": + "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "safe-buffer" "~5.1.0" + +"string-argv@^0.3.1": + "integrity" "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==" + "resolved" "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" + "version" "0.3.1" + +"string-width@^1.0.1": + "integrity" "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "code-point-at" "^1.0.0" + "is-fullwidth-code-point" "^1.0.0" + "strip-ansi" "^3.0.0" + +"string-width@^1.0.2 || 2 || 3 || 4", "string-width@^4.1.0", "string-width@^4.2.0", "string-width@^4.2.3": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" + +"string-width@^5.0.0": + "integrity" "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "eastasianwidth" "^0.2.0" + "emoji-regex" "^9.2.2" + "strip-ansi" "^7.0.1" + +"strip-ansi@^3.0.0", "strip-ansi@^3.0.1": + "integrity" "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "ansi-regex" "^2.0.0" + +"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": + "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "ansi-regex" "^5.0.1" + +"strip-ansi@^7.0.1": + "integrity" "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "ansi-regex" "^6.0.1" + +"strip-final-newline@^2.0.0": + "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + "version" "2.0.0" + +"strip-final-newline@^3.0.0": + "integrity" "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" + "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" + "version" "3.0.0" + +"strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1": + "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + "version" "3.1.1" + +"strip-json-comments@~2.0.1": + "integrity" "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + "version" "2.0.1" + +"striptags@^4.0.0-alpha.4": + "integrity" "sha512-/0jWyVWhpg9ciRHfjKYBpMHXct/HrFRfsR2HU77nGPbc8SPcVSIHZlZR/0TG3MyPq2C+HiHuwx8BlbcdI/cNbw==" + "resolved" "https://registry.npmjs.org/striptags/-/striptags-4.0.0-alpha.4.tgz" + "version" "4.0.0-alpha.4" + +"supports-color@^7.1.0": + "integrity" "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz" + "version" "7.1.0" + dependencies: + "has-flag" "^4.0.0" + +"systeminformation@5.12.3": + "integrity" "sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A==" + "resolved" "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.3.tgz" + "version" "5.12.3" + +"tar-fs@^2.0.0": + "integrity" "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==" + "resolved" "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "chownr" "^1.1.1" + "mkdirp-classic" "^0.5.2" + "pump" "^3.0.0" + "tar-stream" "^2.1.4" + +"tar-stream@^2.1.4": + "integrity" "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==" + "resolved" "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "bl" "^4.0.3" + "end-of-stream" "^1.4.1" + "fs-constants" "^1.0.0" + "inherits" "^2.0.3" + "readable-stream" "^3.1.1" + +"tar@^6.0.2", "tar@^6.1.11", "tar@^6.1.2": + "integrity" "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==" + "resolved" "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" + "version" "6.1.11" + dependencies: + "chownr" "^2.0.0" + "fs-minipass" "^2.0.0" + "minipass" "^3.0.0" + "minizlib" "^2.1.1" + "mkdirp" "^1.0.3" + "yallist" "^4.0.0" + +"telnet-socket@0.2.4": + "integrity" "sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ==" + "resolved" "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz" + "version" "0.2.4" + dependencies: + "binary-parser" "1.6.2" + "buffers" "github:NuSkooler/node-buffers" + +"temptmp@^1.1.0": + "integrity" "sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ==" + "resolved" "https://registry.npmjs.org/temptmp/-/temptmp-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "del" "^3.0.0" + +"text-table@^0.2.0": + "integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + "version" "0.2.0" + +"thirty-two@1.0.2": + "integrity" "sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==" + "resolved" "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz" + "version" "1.0.2" + +"through@^2.3.6", "through@^2.3.8": + "integrity" "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + "version" "2.3.8" + +"tmp@^0.0.33": + "integrity" "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==" + "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + "version" "0.0.33" + dependencies: + "os-tmpdir" "~1.0.2" + +"tmpl@1.0.x": + "integrity" "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + "resolved" "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" + "version" "1.0.5" + +"to-regex-range@^5.0.1": + "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "is-number" "^7.0.0" + +"tr46@~0.0.3": + "integrity" "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + "version" "0.0.3" + +"truncate-utf8-bytes@^1.0.0": + "integrity" "sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==" + "resolved" "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "utf8-byte-length" "^1.0.1" + +"tslib@^2.1.0": + "integrity" "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" + "version" "2.3.1" + +"tunnel-agent@^0.6.0": + "integrity" "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==" + "resolved" "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + "version" "0.6.0" + dependencies: + "safe-buffer" "^5.0.1" + +"tweetnacl@^0.14.3", "tweetnacl@~0.14.0": + "integrity" "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + "resolved" "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + "version" "0.14.5" + +"type-check@^0.4.0", "type-check@~0.4.0": + "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" + "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + "version" "0.4.0" + dependencies: + "prelude-ls" "^1.2.1" + +"type-fest@^0.20.2": + "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + "version" "0.20.2" + +"type-fest@^0.21.3": + "integrity" "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + "version" "0.21.3" + +"unique-filename@^1.1.1": + "integrity" "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==" + "resolved" "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "unique-slug" "^2.0.0" + +"unique-slug@^2.0.0": + "integrity" "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==" + "resolved" "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "imurmurhash" "^0.1.4" + +"universalify@^1.0.0": + "integrity" "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz" + "version" "1.0.0" + +"universalify@^2.0.0": + "integrity" "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + "version" "2.0.0" + +"uri-js@^4.2.2": + "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" + "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + "version" "4.4.1" + dependencies: + "punycode" "^2.1.0" + +"utf8-byte-length@^1.0.1": + "integrity" "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" + "resolved" "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz" + "version" "1.0.4" + +"util-deprecate@^1.0.1", "util-deprecate@~1.0.1": + "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "version" "1.0.2" + +"uuid-parse@1.1.0": + "integrity" "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==" + "resolved" "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz" + "version" "1.1.0" + +"uuid@8.3.2": + "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + "version" "8.3.2" + +"verror@1.10.0": + "integrity" "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==" + "resolved" "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" + "version" "1.10.0" + dependencies: + "assert-plus" "^1.0.0" + "core-util-is" "1.0.2" + "extsprintf" "^1.2.0" + +"vscode-json-languageservice@^4.1.6": + "integrity" "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==" + "resolved" "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "jsonc-parser" "^3.0.0" + "vscode-languageserver-textdocument" "^1.0.3" + "vscode-languageserver-types" "^3.16.0" + "vscode-nls" "^5.0.0" + "vscode-uri" "^3.0.3" + +"vscode-languageserver-textdocument@^1.0.3": + "integrity" "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==" + "resolved" "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz" + "version" "1.0.8" + +"vscode-languageserver-types@^3.16.0": + "integrity" "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==" + "resolved" "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz" + "version" "3.17.2" + +"vscode-nls@^5.0.0": + "integrity" "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==" + "resolved" "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz" + "version" "5.2.0" + +"vscode-uri@^3.0.3": + "integrity" "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==" + "resolved" "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz" + "version" "3.0.7" + +"walker@~1.0.5": + "integrity" "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==" + "resolved" "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz" + "version" "1.0.7" + dependencies: + "makeerror" "1.0.x" + +"wcwidth@^1.0.1": + "integrity" "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==" + "resolved" "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "defaults" "^1.0.3" + +"webidl-conversions@^3.0.0": + "integrity" "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + "version" "3.0.1" + +"whatwg-url@^5.0.0": + "integrity" "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==" + "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "tr46" "~0.0.3" + "webidl-conversions" "^3.0.0" + +"which-pm-runs@^1.0.0": + "integrity" "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==" + "resolved" "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz" + "version" "1.1.0" + +"which@^2.0.1", "which@^2.0.2": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + +"wide-align@^1.1.0", "wide-align@^1.1.2", "wide-align@^1.1.5": + "integrity" "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==" + "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "string-width" "^1.0.2 || 2 || 3 || 4" + +"word-wrap@^1.2.3": + "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + "version" "1.2.3" + +"wrap-ansi@^6.2.0": + "integrity" "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + "version" "6.2.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrap-ansi@^7.0.0": + "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrappy@1": + "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "version" "1.0.2" + +"ws@7.5.9": + "integrity" "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" + "resolved" "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" + "version" "7.5.9" + +"yallist@^4.0.0": + "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + "version" "4.0.0" + +"yaml@^2.1.3": + "integrity" "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==" + "resolved" "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz" + "version" "2.2.1" + +"yazl@^2.5.1": + "integrity" "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==" + "resolved" "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz" + "version" "2.5.1" + dependencies: + "buffer-crc32" "~0.2.3" + +"yocto-queue@^0.1.0": + "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + "version" "0.1.0" From 6466220b6dc734206789a0b0eb27dda0abc9fdd7 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Fri, 10 Feb 2023 21:34:49 -0600 Subject: [PATCH 134/233] Revert "First steps toward search" This reverts commit 87034967ae9574ff468e665ae30fc06afcceb793. --- core/activitypub/actor.js | 144 +- core/database.js | 22 +- package-lock.json | 1166 +------- package.json | 1 - yarn.lock | 5872 +++++++++++++++++++------------------ 5 files changed, 2971 insertions(+), 4234 deletions(-) diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 9a65b767c..c2d94caa0 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -14,17 +14,17 @@ const ActivityPubObject = require('./object'); const { ActivityStreamMediaType } = require('./const'); const apDb = require('../database').dbs.activitypub; const Config = require('../config').get; -const parseFullName = require('parse-full-name').parseFullName; // deps const _ = require('lodash'); const mimeTypes = require('mime-types'); const { getJson } = require('../http_util.js'); const { getISOTimestampString } = require('../database.js'); +const moment = require('moment'); const paths = require('path'); +const ActorCacheExpiration = moment.duration(15, 'days'); const ActorCacheMaxAgeDays = 125; // hasn't been used in >= 125 days, nuke it. -const MaxSearchResults = 10; // Maximum number of results to show for a search // default context for Actor's const DefaultContext = ActivityPubObject.makeContext(['https://w3id.org/security/v1'], { @@ -167,10 +167,14 @@ module.exports = class Actor extends ActivityPubObject { } }; - Actor._fromCache(id, (err, actor, subject) => { + Actor._fromCache(id, (err, actor, subject, needsRefresh) => { if (!err) { // cache hit callback(null, actor, subject); + + if (!needsRefresh) { + return; + } } // Cache miss or needs refreshed; Try to do so now @@ -190,76 +194,21 @@ module.exports = class Actor extends ActivityPubObject { // cache our entry if (actor) { - apDb.run( - 'DELETE FROM actor_cache_search WHERE actor_id=?', - [id], - err => { - if (err) { - Log.warn( - { err: err }, - 'Error deleting previous actor_cache_search' - ); - } - } - ); - apDb.run( `REPLACE INTO actor_cache (actor_id, actor_json, subject, timestamp) VALUES (?, ?, ?, ?);`, [id, JSON.stringify(actor), subject, getISOTimestampString()], err => { if (err) { - Log.warn( - { err: err }, - 'Error replacing into the actor cache' - ); + // :TODO: log me } } ); - - const searchNames = this._parseSearchNames(actor); - if (searchNames.length > 0) { - const searchStatement = apDb.prepare( - 'INSERT INTO actor_cache_search (actor_id, search_name) VALUES (?, ?)' - ); - searchNames.forEach(name => { - searchStatement.run([id, name], err => { - if (err) { - Log.warn( - { err: err }, - 'Error inserting into actor cache search' - ); - } - }); - }); - } } }); }); } - static _parseSearchNames(actor) { - const searchNames = []; - - if (!_.isEmpty(actor.preferredUsername)) { - searchNames.push(actor.preferredUsername); - } - const name = parseFullName(actor.name); - if (!_.isEmpty(name.first)) { - searchNames.push(name.first); - } - - if (!_.isEmpty(name.last)) { - searchNames.push(name.last); - } - - if (!_.isEmpty(name.nick)) { - searchNames.push(name.nick); - } - - return searchNames; - } - static actorCacheMaintenanceTask(args, cb) { const enabled = _.get( Config(), @@ -271,10 +220,10 @@ module.exports = class Actor extends ActivityPubObject { apDb.run( `DELETE FROM actor_cache - WHERE DATETIME(timestamp) < DATETIME("now", "-${ActorCacheMaxAgeDays} day");`, + WHERE DATETIME(timestamp) > DATETIME("now", "+${ActorCacheMaxAgeDays}");`, err => { if (err) { - Log.warn({ err: err }, 'Error clearing old cache entries.'); + // :TODO: log me } return cb(null); // always non-fatal @@ -282,40 +231,6 @@ module.exports = class Actor extends ActivityPubObject { ); } - static fromSearch(searchString, cb) { - // first try to find an exact match - this.fromId(searchString, (err, remoteActor) => { - if (!err) { - return cb(null, [remoteActor]); - } else { - Log.info({ err: err }, 'Not able to find based on id'); - } - }); - - let returnRows = []; - // If not found, try searching database for known actors - apDb.each( - `SELECT actor_cache.actor_json - FROM actor_cache INNER JOIN actor_cache_search ON actor_cache.actor_id = actor_cache_search.actor_id - WHERE actor_cache_search.search_name like '%'||?||'%' - LIMIT ${MaxSearchResults}`, - (err, row) => { - if (err) { - Log.warn({ err: err }, 'error retrieving search results'); - return cb(err, []); - } - this._fromJsonToActor(row.actor_json, (err, actor) => { - if (err) { - Log.warn({ err: err }, 'error converting search results'); - return cb(err, []); - } - returnRows.push(actor); - }); - } - ); - return cb(null, returnRows); - } - static _fromRemoteQuery(id, cb) { const headers = { Accept: ActivityStreamMediaType, @@ -338,10 +253,9 @@ module.exports = class Actor extends ActivityPubObject { static _fromCache(actorIdOrSubject, cb) { apDb.get( - `SELECT actor_json, subject + `SELECT actor_json, subject, timestamp FROM actor_cache WHERE actor_id = ? OR subject = ? - AND DATETIME(timestamp) > DATETIME("now", "-${ActorCacheMaxAgeDays} day") LIMIT 1;`, [actorIdOrSubject, actorIdOrSubject], (err, row) => { @@ -353,29 +267,25 @@ module.exports = class Actor extends ActivityPubObject { return cb(Errors.DoesNotExist()); } - this._fromJsonToActor(row.actor_json, (err, actor) => { - if (err) { - return cb(err); - } - const subject = row.subject || actor.id; - return cb(null, actor, subject); - }); - } - ); - } + const timestamp = moment(row.timestamp); + const needsRefresh = moment().isAfter( + timestamp.add(ActorCacheExpiration) + ); - static _fromJsonToActor(actorJson, cb) { - const obj = ActivityPubObject.fromJsonString(actorJson); - if (!obj || !obj.isValid()) { - return cb(Errors.Invalid('Failed to create ActivityPub object')); - } + const obj = ActivityPubObject.fromJsonString(row.actor_json); + if (!obj || !obj.isValid()) { + return cb(Errors.Invalid('Failed to create ActivityPub object')); + } - const actor = new Actor(obj); - if (!actor.isValid()) { - return cb(Errors.Invalid('Failed to create Actor object')); - } + const actor = new Actor(obj); + if (!actor.isValid()) { + return cb(Errors.Invalid('Failed to create Actor object')); + } - return cb(null, actor); + const subject = row.subject || actor.id; + return cb(null, actor, subject, needsRefresh); + } + ); } static _fromWebFinger(actorQuery, cb) { diff --git a/core/database.js b/core/database.js index 0fede553d..bab1ffbf5 100644 --- a/core/database.js +++ b/core/database.js @@ -480,8 +480,7 @@ dbs.message.run( actor_json VARCHAR NOT NULL, -- Actor document subject VARCHAR, -- Subject obtained from WebFinger, e.g. @Username@some.domain timestamp DATETIME NOT NULL, -- Timestamp in which this Actor was cached - preferredUsername VARCHAR, -- Denormalized username for search - name VARCHAR, -- Denormalized actor name for search + UNIQUE(actor_id) );` ); @@ -491,25 +490,6 @@ dbs.message.run( ON actor_cache (actor_id);` ); - // Denormalized actor information for search - dbs.activitypub.run( - `CREATE TABLE IF NOT EXISTS actor_cache_search ( - actor_id VARCHAR NOT NULL, -- Fully qualified Actor ID/URL - search_name VARCHAR, -- Name to search - CONSTRAINT actor_cache_search_actor_cache_fk FOREIGN KEY(actor_id) REFERENCES actor_cache(actor_id) ON DELETE CASCADE - );` - ); - - dbs.activitypub.run( - `CREATE INDEX IF NOT EXISTS actor_cache_search_actor_id_index0 - ON actor_cache_search (actor_id);` - ); - - dbs.activitypub.run( - `CREATE INDEX IF NOT EXISTS actor_cache_search_name_index0 - ON actor_cache_search (search_name);` - ); - // ActivityPub Collections of various types such as followers, following, likes, ... dbs.activitypub.run( `CREATE TABLE IF NOT EXISTS collection ( diff --git a/package-lock.json b/package-lock.json index 936080bf1..2af9d982a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,6 @@ "dependencies": { "@breejs/later": "4.1.0", "async": "3.2.4", - "avatar-generator": "^2.0.4", "binary-parser": "2.1.0", "buffers": "github:NuSkooler/node-buffers", "bunyan": "1.8.15", @@ -23,7 +22,6 @@ "graceful-fs": "^4.2.10", "hashids": "^2.2.10", "hjson": "3.2.2", - "html-entities": "^2.3.3", "http-signature": "^1.3.6", "iconv-lite": "0.6.3", "ini-config-parser": "^1.0.4", @@ -37,7 +35,6 @@ "node-pty": "0.10.1", "nodemailer": "6.7.7", "otplib": "11.0.1", - "parse-full-name": "^1.2.6", "qrcode-generator": "^1.4.4", "rlogin": "^1.0.0", "sane": "5.0.1", @@ -45,7 +42,6 @@ "sqlite3": "5.0.11", "sqlite3-trans": "1.3.0", "ssh2": "1.11.0", - "striptags": "^4.0.0-alpha.4", "systeminformation": "5.12.3", "telnet-socket": "0.2.4", "temptmp": "^1.1.0", @@ -460,31 +456,6 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, - "node_modules/avatar-generator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/avatar-generator/-/avatar-generator-2.0.4.tgz", - "integrity": "sha512-1XH0LAO6QwtOvv9ImVKr6O0DUtH+QX4B6ReBcfjbUPnFVZMfSgM18jkP8MDsrPxk9UmCGMddxBCxdizU7lbwrw==", - "dependencies": { - "commander": "^5.1.0", - "seedrandom": "^3.0.5", - "sharp": "^0.25.2" - }, - "bin": { - "avatar-generator": "cli.js" - }, - "engines": { - "node": ">=8.0", - "npm": ">=6.0" - } - }, - "node_modules/avatar-generator/node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "engines": { - "node": ">= 6" - } - }, "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -862,14 +833,6 @@ "node": ">=0.8" } }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/coffee-script": { "version": "1.12.7", "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", @@ -883,15 +846,6 @@ "node": ">=0.8.0" } }, - "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -908,15 +862,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, "node_modules/color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", @@ -925,19 +870,6 @@ "color-support": "bin.js" } }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, "node_modules/colorette": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", @@ -1022,20 +954,6 @@ } } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/deep-extend": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", @@ -1513,14 +1431,6 @@ "resolved": "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz", "integrity": "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "engines": { - "node": ">=6" - } - }, "node_modules/external-editor": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", @@ -1665,11 +1575,6 @@ "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -1740,11 +1645,6 @@ "assert-plus": "^1.0.0" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" - }, "node_modules/glob": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", @@ -1846,15 +1746,10 @@ "hjson": "bin/hjson" } }, - "node_modules/html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" - }, "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "optional": true }, "node_modules/http-proxy-agent": { @@ -2021,11 +1916,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, "node_modules/ini-config-parser": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz", @@ -2093,11 +1983,6 @@ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "optional": true }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2201,11 +2086,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -2741,17 +2621,6 @@ "node": ">=6" } }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -2868,11 +2737,6 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, "node_modules/moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", @@ -2938,11 +2802,6 @@ "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -2978,22 +2837,6 @@ "split2": "^4.1.0" } }, - "node_modules/node-abi": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", - "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", - "dependencies": { - "semver": "^5.4.1" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/node-addon-api": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", @@ -3131,11 +2974,6 @@ "node": ">=6.0.0" } }, - "node_modules/noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==" - }, "node_modules/nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -3180,14 +3018,6 @@ "set-blocking": "^2.0.0" } }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3336,11 +3166,6 @@ "node": ">=6" } }, - "node_modules/parse-full-name": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/parse-full-name/-/parse-full-name-1.2.6.tgz", - "integrity": "sha512-uIaENXJFmZfzulBndhHJayi7ZEifJ1bXKaWYmySa04EmMX7eIcsufiAgWTYiJqWRa/Sq7JWPGtCIXFAoUfF7gw==" - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -3421,182 +3246,6 @@ "node": ">=0.10.0" } }, - "node_modules/prebuild-install": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", - "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", - "dependencies": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/prebuild-install/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prebuild-install/node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "node_modules/prebuild-install/node_modules/are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/prebuild-install/node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/prebuild-install/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/prebuild-install/node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/prebuild-install/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prebuild-install/node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/prebuild-install/node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/prebuild-install/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/prebuild-install/node_modules/simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/prebuild-install/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/prebuild-install/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prebuild-install/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -3621,11 +3270,6 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -3688,36 +3332,6 @@ } ] }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -3923,11 +3537,6 @@ "truncate-utf8-bytes": "^1.0.0" } }, - "node_modules/seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" - }, "node_modules/semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -3972,150 +3581,6 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, - "node_modules/sharp": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.25.4.tgz", - "integrity": "sha512-umSzJJ1oBwIOfwFFt/fJ7JgCva9FvrEU2cbbm7u/3hSDZhXvkME8WE5qpaJqLIe2Har5msF5UG4CzYlEg5o3BQ==", - "hasInstallScript": true, - "dependencies": { - "color": "^3.1.2", - "detect-libc": "^1.0.3", - "node-addon-api": "^3.0.0", - "npmlog": "^4.1.2", - "prebuild-install": "^5.3.4", - "semver": "^7.3.2", - "simple-get": "^4.0.0", - "tar": "^6.0.2", - "tunnel-agent": "^0.6.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/sharp/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sharp/node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "node_modules/sharp/node_modules/are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/sharp/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/sharp/node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/sharp/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sharp/node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" - }, - "node_modules/sharp/node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/sharp/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/sharp/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/sharp/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sharp/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4140,57 +3605,6 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, "node_modules/slice-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", @@ -4421,11 +3835,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/striptags": { - "version": "4.0.0-alpha.4", - "resolved": "https://registry.npmjs.org/striptags/-/striptags-4.0.0-alpha.4.tgz", - "integrity": "sha512-/0jWyVWhpg9ciRHfjKYBpMHXct/HrFRfsR2HU77nGPbc8SPcVSIHZlZR/0TG3MyPq2C+HiHuwx8BlbcdI/cNbw==" - }, "node_modules/supports-color": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", @@ -4478,37 +3887,6 @@ "node": ">= 10" } }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/tar/node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -4612,17 +3990,6 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -4803,14 +4170,6 @@ "node": ">= 8" } }, - "node_modules/which-pm-runs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", - "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", - "engines": { - "node": ">=4" - } - }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -5193,23 +4552,6 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, - "avatar-generator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/avatar-generator/-/avatar-generator-2.0.4.tgz", - "integrity": "sha512-1XH0LAO6QwtOvv9ImVKr6O0DUtH+QX4B6ReBcfjbUPnFVZMfSgM18jkP8MDsrPxk9UmCGMddxBCxdizU7lbwrw==", - "requires": { - "commander": "^5.1.0", - "seedrandom": "^3.0.5", - "sharp": "^0.25.2" - }, - "dependencies": { - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" - } - } - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -5466,40 +4808,11 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" - }, "coffee-script": { "version": "1.12.7", "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==" }, - "color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "requires": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - }, - "dependencies": { - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - } - } - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -5513,15 +4826,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, "color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", @@ -5590,14 +4894,6 @@ "ms": "2.1.2" } }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "requires": { - "mimic-response": "^3.1.0" - } - }, "deep-extend": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", @@ -5969,11 +5265,6 @@ "resolved": "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz", "integrity": "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" - }, "external-editor": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", @@ -6092,11 +5383,6 @@ "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, "fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -6152,11 +5438,6 @@ "assert-plus": "^1.0.0" } }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" - }, "glob": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", @@ -6236,15 +5517,10 @@ "resolved": "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz", "integrity": "sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==" }, - "html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" - }, "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "optional": true }, "http-proxy-agent": { @@ -6358,11 +5634,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, "ini-config-parser": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz", @@ -6423,11 +5694,6 @@ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "optional": true }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -6495,11 +5761,6 @@ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -6889,11 +6150,6 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" - }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -6981,11 +6237,6 @@ "minimist": "^1.2.6" } }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, "moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", @@ -7041,11 +6292,6 @@ "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -7075,21 +6321,6 @@ "split2": "^4.1.0" } }, - "node-abi": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", - "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", - "requires": { - "semver": "^5.4.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, "node-addon-api": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", @@ -7193,11 +6424,6 @@ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz", "integrity": "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==" }, - "noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==" - }, "nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -7230,11 +6456,6 @@ "set-blocking": "^2.0.0" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -7341,11 +6562,6 @@ "callsites": "^3.0.0" } }, - "parse-full-name": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/parse-full-name/-/parse-full-name-1.2.6.tgz", - "integrity": "sha512-uIaENXJFmZfzulBndhHJayi7ZEifJ1bXKaWYmySa04EmMX7eIcsufiAgWTYiJqWRa/Sq7JWPGtCIXFAoUfF7gw==" - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -7396,151 +6612,6 @@ "pinkie": "^2.0.0" } }, - "prebuild-install": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", - "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", - "requires": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "requires": { - "mimic-response": "^2.0.0" - } - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==" - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -7553,11 +6624,6 @@ "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", "dev": true }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -7600,29 +6666,6 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" - } - } - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -7767,11 +6810,6 @@ "truncate-utf8-bytes": "^1.0.0" } }, - "seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" - }, "semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -7803,127 +6841,6 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, - "sharp": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.25.4.tgz", - "integrity": "sha512-umSzJJ1oBwIOfwFFt/fJ7JgCva9FvrEU2cbbm7u/3hSDZhXvkME8WE5qpaJqLIe2Har5msF5UG4CzYlEg5o3BQ==", - "requires": { - "color": "^3.1.2", - "detect-libc": "^1.0.3", - "node-addon-api": "^3.0.0", - "npmlog": "^4.1.2", - "prebuild-install": "^5.3.4", - "semver": "^7.3.2", - "simple-get": "^4.0.0", - "tar": "^6.0.2", - "tunnel-agent": "^0.6.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==" - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -7942,29 +6859,6 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - }, - "simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "requires": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "requires": { - "is-arrayish": "^0.3.1" - } - }, "slice-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", @@ -8119,11 +7013,6 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, - "striptags": { - "version": "4.0.0-alpha.4", - "resolved": "https://registry.npmjs.org/striptags/-/striptags-4.0.0-alpha.4.tgz", - "integrity": "sha512-/0jWyVWhpg9ciRHfjKYBpMHXct/HrFRfsR2HU77nGPbc8SPcVSIHZlZR/0TG3MyPq2C+HiHuwx8BlbcdI/cNbw==" - }, "supports-color": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", @@ -8157,36 +7046,6 @@ } } }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - }, - "dependencies": { - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - } - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, "telnet-socket": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz", @@ -8266,14 +7125,6 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -8430,11 +7281,6 @@ "isexe": "^2.0.0" } }, - "which-pm-runs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", - "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==" - }, "wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", diff --git a/package.json b/package.json index 6be18eea9..490c9397a 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,6 @@ "node-pty": "0.10.1", "nodemailer": "6.7.7", "otplib": "11.0.1", - "parse-full-name": "^1.2.6", "qrcode-generator": "^1.4.4", "rlogin": "^1.0.0", "sane": "5.0.1", diff --git a/yarn.lock b/yarn.lock index e0457b4e0..53cf5057b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,3014 +3,3016 @@ "@breejs/later@4.1.0": - "integrity" "sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA==" - "resolved" "https://registry.npmjs.org/@breejs/later/-/later-4.1.0.tgz" - "version" "4.1.0" + version "4.1.0" + resolved "https://registry.npmjs.org/@breejs/later/-/later-4.1.0.tgz" + integrity sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA== "@cnakazawa/watch@^1.0.3": - "integrity" "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==" - "resolved" "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz" - "version" "1.0.3" + version "1.0.3" + resolved "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz" + integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== dependencies: - "exec-sh" "^0.3.2" - "minimist" "^1.2.0" + exec-sh "^0.3.2" + minimist "^1.2.0" "@eslint/eslintrc@^1.4.1": - "integrity" "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==" - "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz" - "version" "1.4.1" - dependencies: - "ajv" "^6.12.4" - "debug" "^4.3.2" - "espree" "^9.4.0" - "globals" "^13.19.0" - "ignore" "^5.2.0" - "import-fresh" "^3.2.1" - "js-yaml" "^4.1.0" - "minimatch" "^3.1.2" - "strip-json-comments" "^3.1.1" + version "1.4.1" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz" + integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" "@gar/promisify@^1.0.1": - "integrity" "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" - "resolved" "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" - "version" "1.1.3" + version "1.1.3" + resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== "@humanwhocodes/config-array@^0.11.8": - "integrity" "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz" - "version" "0.11.8" + version "0.11.8" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz" + integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== dependencies: "@humanwhocodes/object-schema" "^1.2.1" - "debug" "^4.1.1" - "minimatch" "^3.0.5" + debug "^4.1.1" + minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": - "integrity" "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" - "version" "1.0.1" + version "1.0.1" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^1.2.1": - "integrity" "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" - "version" "1.2.1" + version "1.2.1" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@mapbox/node-pre-gyp@^1.0.0": - "integrity" "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==" - "resolved" "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz" - "version" "1.0.9" - dependencies: - "detect-libc" "^2.0.0" - "https-proxy-agent" "^5.0.0" - "make-dir" "^3.1.0" - "node-fetch" "^2.6.7" - "nopt" "^5.0.0" - "npmlog" "^5.0.1" - "rimraf" "^3.0.2" - "semver" "^7.3.5" - "tar" "^6.1.11" + version "1.0.9" + resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz" + integrity sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw== + dependencies: + detect-libc "^2.0.0" + https-proxy-agent "^5.0.0" + make-dir "^3.1.0" + node-fetch "^2.6.7" + nopt "^5.0.0" + npmlog "^5.0.1" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.11" "@nodelib/fs.scandir@2.1.5": - "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - "version" "2.1.5" + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" - "run-parallel" "^1.1.9" + run-parallel "^1.1.9" "@nodelib/fs.stat@2.0.5": - "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - "version" "2.0.5" + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.8": - "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - "version" "1.2.8" + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" - "fastq" "^1.6.0" + fastq "^1.6.0" "@npmcli/fs@^1.0.0": - "integrity" "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==" - "resolved" "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" - "version" "1.1.1" + version "1.1.1" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== dependencies: "@gar/promisify" "^1.0.1" - "semver" "^7.3.5" + semver "^7.3.5" "@npmcli/move-file@^1.0.1": - "integrity" "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==" - "resolved" "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" - "version" "1.1.2" + version "1.1.2" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== dependencies: - "mkdirp" "^1.0.4" - "rimraf" "^3.0.2" + mkdirp "^1.0.4" + rimraf "^3.0.2" "@tootallnate/once@1": - "integrity" "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" - "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" - "version" "1.1.2" + version "1.1.2" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== "@types/color-name@^1.1.1": - "integrity" "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - "resolved" "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz" - "version" "1.1.1" - -"abbrev@1": - "integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - "version" "1.1.1" - -"acorn-jsx@^5.3.2": - "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" - "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - "version" "5.3.2" - -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8.8.0": - "integrity" "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" - "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" - "version" "8.8.1" - -"agent-base@^6.0.2", "agent-base@6": - "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==" - "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "debug" "4" - -"agentkeepalive@^4.1.3": - "integrity" "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==" - "resolved" "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "debug" "^4.1.0" - "depd" "^1.1.2" - "humanize-ms" "^1.2.1" - -"aggregate-error@^3.0.0": - "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" - "resolved" "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "clean-stack" "^2.0.0" - "indent-string" "^4.0.0" - -"ajv@^6.10.0", "ajv@^6.12.4": - "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" - "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - "version" "6.12.6" - dependencies: - "fast-deep-equal" "^3.1.1" - "fast-json-stable-stringify" "^2.0.0" - "json-schema-traverse" "^0.4.1" - "uri-js" "^4.2.2" - -"ansi-escapes@^4.2.1", "ansi-escapes@^4.3.0": - "integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==" - "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - "version" "4.3.2" - dependencies: - "type-fest" "^0.21.3" - -"ansi-regex@^2.0.0": - "integrity" "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" - "version" "2.1.1" - -"ansi-regex@^5.0.1": - "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - "version" "5.0.1" - -"ansi-regex@^6.0.1": - "integrity" "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - "version" "6.0.1" - -"ansi-styles@^4.0.0", "ansi-styles@^4.1.0": - "integrity" "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz" - "version" "4.2.1" + version "1.1.1" + resolved "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +abbrev@1: + version "1.1.1" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.8.0: + version "8.8.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.1.3: + version "4.2.1" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" + integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== + dependencies: + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== dependencies: "@types/color-name" "^1.1.1" - "color-convert" "^2.0.1" + color-convert "^2.0.1" -"ansi-styles@^6.0.0": - "integrity" "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" - "version" "6.2.1" +ansi-styles@^6.0.0: + version "6.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== -"anymatch@^3.1.1": - "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" - "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" - "version" "3.1.2" +anymatch@^3.1.1: + version "3.1.2" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: - "normalize-path" "^3.0.0" - "picomatch" "^2.0.4" + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== "aproba@^1.0.3 || ^2.0.0": - "integrity" "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - "resolved" "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" - "version" "2.0.0" - -"aproba@^1.0.3": - "integrity" "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - "resolved" "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" - "version" "1.2.0" - -"are-we-there-yet@^2.0.0": - "integrity" "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==" - "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "delegates" "^1.0.0" - "readable-stream" "^3.6.0" - -"are-we-there-yet@^3.0.0": - "integrity" "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==" - "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "delegates" "^1.0.0" - "readable-stream" "^3.6.0" - -"are-we-there-yet@~1.1.2": - "integrity" "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==" - "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz" - "version" "1.1.7" - dependencies: - "delegates" "^1.0.0" - "readable-stream" "^2.0.6" - -"argparse@^2.0.1": - "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - "version" "2.0.1" - -"array-union@^1.0.1": - "integrity" "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==" - "resolved" "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "array-uniq" "^1.0.1" - -"array-uniq@^1.0.1": - "integrity" "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" - "resolved" "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" - "version" "1.0.3" - -"asn1@^0.2.4", "asn1@~0.2.3": - "integrity" "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==" - "resolved" "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" - "version" "0.2.6" - dependencies: - "safer-buffer" "~2.1.0" - -"assert-plus@^1.0.0", "assert-plus@1.0.0": - "integrity" "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" - "resolved" "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" - "version" "1.0.0" - -"astral-regex@^2.0.0": - "integrity" "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" - "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" - "version" "2.0.0" - -"async@3.2.4": - "integrity" "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - "resolved" "https://registry.npmjs.org/async/-/async-3.2.4.tgz" - "version" "3.2.4" - -"avatar-generator@^2.0.4": - "integrity" "sha512-1XH0LAO6QwtOvv9ImVKr6O0DUtH+QX4B6ReBcfjbUPnFVZMfSgM18jkP8MDsrPxk9UmCGMddxBCxdizU7lbwrw==" - "resolved" "https://registry.npmjs.org/avatar-generator/-/avatar-generator-2.0.4.tgz" - "version" "2.0.4" - dependencies: - "commander" "^5.1.0" - "seedrandom" "^3.0.5" - "sharp" "^0.25.2" - -"balanced-match@^1.0.0": - "integrity" "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" - "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" - "version" "1.0.0" - -"base64-js@^1.3.1": - "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - "version" "1.5.1" - -"bcrypt-pbkdf@^1.0.0", "bcrypt-pbkdf@^1.0.2": - "integrity" "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==" - "resolved" "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "tweetnacl" "^0.14.3" - -"binary-parser@1.6.2": - "integrity" "sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ==" - "resolved" "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz" - "version" "1.6.2" - -"binary-parser@2.1.0": - "integrity" "sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ==" - "resolved" "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz" - "version" "2.1.0" - -"bl@^4.0.3", "bl@^4.1.0": - "integrity" "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==" - "resolved" "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - "version" "4.1.0" + version "2.0.0" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +are-we-there-yet@~1.1.2: + version "1.1.7" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" + integrity "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + integrity "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" + +asn1@^0.2.4, asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async@3.2.4: + version "3.2.4" + resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + +avatar-generator@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/avatar-generator/-/avatar-generator-2.0.4.tgz#01d5db33b86ff32cf274f532ab9def0aaf49921a" + integrity sha512-1XH0LAO6QwtOvv9ImVKr6O0DUtH+QX4B6ReBcfjbUPnFVZMfSgM18jkP8MDsrPxk9UmCGMddxBCxdizU7lbwrw== + dependencies: + commander "^5.1.0" + seedrandom "^3.0.5" + sharp "^0.25.2" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + integrity "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" + integrity "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==" + dependencies: + tweetnacl "^0.14.3" + +binary-parser@1.6.2: + version "1.6.2" + resolved "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz" + integrity sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ== + +binary-parser@2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz" + integrity sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ== + +bl@^4.0.3, bl@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: - "buffer" "^5.5.0" - "inherits" "^2.0.4" - "readable-stream" "^3.4.0" + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" -"brace-expansion@^1.1.7": - "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" - "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - "version" "1.1.11" +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: - "balanced-match" "^1.0.0" - "concat-map" "0.0.1" + balanced-match "^1.0.0" + concat-map "0.0.1" -"brace-expansion@^2.0.1": - "integrity" "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==" - "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - "version" "2.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: - "balanced-match" "^1.0.0" - -"braces@^3.0.2": - "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" - "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - "version" "3.0.2" + balanced-match "^1.0.0" + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: - "fill-range" "^7.0.1" - -"bser@2.1.1": - "integrity" "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==" - "resolved" "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "node-int64" "^0.4.0" - -"buffer-crc32@~0.2.3": - "integrity" "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" - "resolved" "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" - "version" "0.2.13" - -"buffer@^5.5.0": - "integrity" "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" - "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - "version" "5.7.1" - dependencies: - "base64-js" "^1.3.1" - "ieee754" "^1.1.13" + fill-range "^7.0.1" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" + integrity "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" "buffers@github:NuSkooler/node-buffers": - "resolved" "git+ssh://git@github.com/NuSkooler/node-buffers.git#cd0855598f7048b02f0a51c90e22573973e9e2c2" - "version" "0.1.1" - -"buildcheck@0.0.3": - "integrity" "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==" - "resolved" "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz" - "version" "0.0.3" - -"bunyan@1.8.15": - "integrity" "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==" - "resolved" "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz" - "version" "1.8.15" + version "0.1.1" + resolved "git+ssh://git@github.com/NuSkooler/node-buffers.git#cd0855598f7048b02f0a51c90e22573973e9e2c2" + +buildcheck@0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz" + integrity sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA== + +bunyan@1.8.15: + version "1.8.15" + resolved "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz" + integrity sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig== optionalDependencies: - "dtrace-provider" "~0.8" - "moment" "^2.19.3" - "mv" "~2" - "safe-json-stringify" "~1" + dtrace-provider "~0.8" + moment "^2.19.3" + mv "~2" + safe-json-stringify "~1" -"cacache@^15.2.0": - "integrity" "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==" - "resolved" "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" - "version" "15.3.0" +cacache@^15.2.0: + version "15.3.0" + resolved "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== dependencies: "@npmcli/fs" "^1.0.0" "@npmcli/move-file" "^1.0.1" - "chownr" "^2.0.0" - "fs-minipass" "^2.0.0" - "glob" "^7.1.4" - "infer-owner" "^1.0.4" - "lru-cache" "^6.0.0" - "minipass" "^3.1.1" - "minipass-collect" "^1.0.2" - "minipass-flush" "^1.0.5" - "minipass-pipeline" "^1.2.2" - "mkdirp" "^1.0.3" - "p-map" "^4.0.0" - "promise-inflight" "^1.0.1" - "rimraf" "^3.0.2" - "ssri" "^8.0.1" - "tar" "^6.0.2" - "unique-filename" "^1.1.1" - -"callsites@^3.0.0": - "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - "version" "3.1.0" - -"capture-exit@^2.0.0": - "integrity" "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==" - "resolved" "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "rsvp" "^4.8.4" - -"chalk@^4.0.0", "chalk@^4.1.0", "chalk@^4.1.1": - "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - "version" "4.1.2" - dependencies: - "ansi-styles" "^4.1.0" - "supports-color" "^7.1.0" - -"chardet@^0.7.0": - "integrity" "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - "resolved" "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" - "version" "0.7.0" - -"chownr@^1.1.1": - "integrity" "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - "resolved" "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" - "version" "1.1.4" - -"chownr@^2.0.0": - "integrity" "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" - "resolved" "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" - "version" "2.0.0" - -"clean-stack@^2.0.0": - "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - "version" "2.2.0" - -"cli-cursor@^3.1.0": - "integrity" "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" - "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "restore-cursor" "^3.1.0" - -"cli-spinners@^2.5.0": - "integrity" "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" - "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" - "version" "2.6.1" - -"cli-truncate@^2.1.0": - "integrity" "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==" - "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "slice-ansi" "^3.0.0" - "string-width" "^4.2.0" - -"cli-truncate@^3.1.0": - "integrity" "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==" - "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "slice-ansi" "^5.0.0" - "string-width" "^5.0.0" - -"cli-width@^3.0.0": - "integrity" "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" - "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" - "version" "3.0.0" - -"clone@^1.0.2": - "integrity" "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" - "resolved" "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" - "version" "1.0.4" - -"code-point-at@^1.0.0": - "integrity" "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" - "resolved" "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" - "version" "1.1.0" - -"coffee-script@^1.12.4": - "integrity" "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==" - "resolved" "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz" - "version" "1.12.7" - -"color-convert@^1.9.3": - "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - "version" "1.9.3" - dependencies: - "color-name" "1.1.3" - -"color-convert@^2.0.1": - "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "color-name" "~1.1.4" - -"color-name@^1.0.0", "color-name@~1.1.4": - "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - "version" "1.1.4" - -"color-name@1.1.3": - "integrity" "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - "version" "1.1.3" - -"color-string@^1.6.0": - "integrity" "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==" - "resolved" "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" - "version" "1.9.1" - dependencies: - "color-name" "^1.0.0" - "simple-swizzle" "^0.2.2" - -"color-support@^1.1.2", "color-support@^1.1.3": - "integrity" "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" - "resolved" "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" - "version" "1.1.3" - -"color@^3.1.2": - "integrity" "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==" - "resolved" "https://registry.npmjs.org/color/-/color-3.2.1.tgz" - "version" "3.2.1" - dependencies: - "color-convert" "^1.9.3" - "color-string" "^1.6.0" - -"colorette@^2.0.19": - "integrity" "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" - "resolved" "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" - "version" "2.0.19" - -"commander@^5.1.0": - "integrity" "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" - "resolved" "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" - "version" "5.1.0" - -"commander@^9.4.1": - "integrity" "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==" - "resolved" "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz" - "version" "9.5.0" - -"concat-map@0.0.1": - "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - "version" "0.0.1" - -"console-control-strings@^1.0.0", "console-control-strings@^1.1.0", "console-control-strings@~1.1.0": - "integrity" "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" - "resolved" "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" - "version" "1.1.0" - -"core-util-is@~1.0.0", "core-util-is@1.0.2": - "integrity" "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - "version" "1.0.2" - -"cpu-features@~0.0.4": - "integrity" "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==" - "resolved" "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz" - "version" "0.0.4" - dependencies: - "buildcheck" "0.0.3" - "nan" "^2.15.0" - -"cross-spawn@^7.0.0", "cross-spawn@^7.0.2", "cross-spawn@^7.0.3": - "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" - "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - "version" "7.0.3" - dependencies: - "path-key" "^3.1.0" - "shebang-command" "^2.0.0" - "which" "^2.0.1" - -"dashdash@^1.12.0": - "integrity" "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==" - "resolved" "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" - "version" "1.14.1" - dependencies: - "assert-plus" "^1.0.0" - -"debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.2", "debug@^4.3.3", "debug@^4.3.4", "debug@4": - "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" - "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - "version" "4.3.4" - dependencies: - "ms" "2.1.2" - -"decompress-response@^4.2.0": - "integrity" "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==" - "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "mimic-response" "^2.0.0" - -"decompress-response@^6.0.0": - "integrity" "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==" - "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "mimic-response" "^3.1.0" - -"deep-extend@^0.5.1": - "integrity" "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" - "resolved" "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz" - "version" "0.5.1" - -"deep-extend@^0.6.0": - "integrity" "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - "resolved" "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" - "version" "0.6.0" - -"deep-is@^0.1.3": - "integrity" "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==" - "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" - "version" "0.1.3" - -"deepdash@^5.3.9": - "integrity" "sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg==" - "resolved" "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz" - "version" "5.3.9" - dependencies: - "lodash" "^4.17.21" - "lodash-es" "^4.17.21" - -"defaults@^1.0.3": - "integrity" "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==" - "resolved" "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "clone" "^1.0.2" - -"del@^3.0.0": - "integrity" "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==" - "resolved" "https://registry.npmjs.org/del/-/del-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "globby" "^6.1.0" - "is-path-cwd" "^1.0.0" - "is-path-in-cwd" "^1.0.0" - "p-map" "^1.1.1" - "pify" "^3.0.0" - "rimraf" "^2.2.8" - -"delegates@^1.0.0": - "integrity" "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - "resolved" "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" - "version" "1.0.0" - -"denque@^2.0.1": - "integrity" "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" - "resolved" "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz" - "version" "2.1.0" - -"depd@^1.1.2": - "integrity" "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" - "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - "version" "1.1.2" - -"detect-libc@^1.0.3": - "integrity" "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==" - "resolved" "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz" - "version" "1.0.3" - -"detect-libc@^2.0.0": - "integrity" "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" - "resolved" "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" - "version" "2.0.1" - -"doctrine@^3.0.0": - "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" - "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "esutils" "^2.0.2" - -"dtrace-provider@~0.8": - "integrity" "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q==" - "resolved" "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz" - "version" "0.8.7" - dependencies: - "nan" "^2.10.0" - -"eastasianwidth@^0.2.0": - "integrity" "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - "resolved" "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - "version" "0.2.0" - -"easy-table@^1.2.0": - "integrity" "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==" - "resolved" "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "ansi-regex" "^5.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.6.1" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + integrity "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== + +coffee-script@^1.12.4: + version "1.12.7" + resolved "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz" + integrity sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw== + +color-convert@^1.9.3: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.6.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color-support@^1.1.2, color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +color@^3.1.2: + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + +colorette@^2.0.19: + version "2.0.19" + resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +commander@^9.4.1: + version "9.5.0" + resolved "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + +console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cpu-features@~0.0.4: + version "0.0.4" + resolved "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz" + integrity sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A== + dependencies: + buildcheck "0.0.3" + nan "^2.15.0" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decompress-response@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" + integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== + dependencies: + mimic-response "^2.0.0" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-extend@^0.5.1: + version "0.5.1" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz" + integrity sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w== + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" + integrity "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==" + +deepdash@^5.3.9: + version "5.3.9" + resolved "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz" + integrity sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg== + dependencies: + lodash "^4.17.21" + lodash-es "^4.17.21" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" + integrity "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==" + dependencies: + clone "^1.0.2" + +del@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/del/-/del-3.0.0.tgz" + integrity "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==" + dependencies: + globby "^6.1.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + p-map "^1.1.1" + pify "^3.0.0" + rimraf "^2.2.8" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + integrity "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + +denque@^2.0.1: + version "2.1.0" + resolved "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz" + integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== + +depd@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + +detect-libc@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" + integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dtrace-provider@~0.8: + version "0.8.7" + resolved "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz" + integrity "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q==" + dependencies: + nan "^2.10.0" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +easy-table@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz" + integrity sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww== + dependencies: + ansi-regex "^5.0.1" optionalDependencies: - "wcwidth" "^1.0.1" - -"ecc-jsbn@~0.1.1": - "integrity" "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==" - "resolved" "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" - "version" "0.1.2" - dependencies: - "jsbn" "~0.1.0" - "safer-buffer" "^2.1.0" - -"emoji-regex@^8.0.0": - "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - "version" "8.0.0" - -"emoji-regex@^9.2.2": - "integrity" "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - "version" "9.2.2" - -"encoding@^0.1.0", "encoding@^0.1.12": - "integrity" "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==" - "resolved" "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" - "version" "0.1.13" - dependencies: - "iconv-lite" "^0.6.2" - -"end-of-stream@^1.1.0", "end-of-stream@^1.4.1": - "integrity" "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==" - "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz" - "version" "1.4.1" - dependencies: - "once" "^1.4.0" - -"env-paths@^2.2.0": - "integrity" "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" - "resolved" "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" - "version" "2.2.1" - -"err-code@^2.0.2": - "integrity" "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" - "resolved" "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" - "version" "2.0.3" - -"escape-string-regexp@^1.0.5": - "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - "version" "1.0.5" - -"escape-string-regexp@^4.0.0": - "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - "version" "4.0.0" - -"eslint-config-prettier@^8.5.0": - "integrity" "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==" - "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" - "version" "8.5.0" - -"eslint-plugin-json@^3.1.0": - "integrity" "sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==" - "resolved" "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "lodash" "^4.17.21" - "vscode-json-languageservice" "^4.1.6" - -"eslint-scope@^7.1.1": - "integrity" "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==" - "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" - "version" "7.1.1" - dependencies: - "esrecurse" "^4.3.0" - "estraverse" "^5.2.0" - -"eslint-utils@^3.0.0": - "integrity" "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==" - "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "eslint-visitor-keys" "^2.0.0" - -"eslint-visitor-keys@^2.0.0": - "integrity" "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" - "version" "2.0.0" - -"eslint-visitor-keys@^3.3.0": - "integrity" "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" - "version" "3.3.0" - -"eslint@>=5", "eslint@>=7.0.0", "eslint@8.31.0": - "integrity" "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==" - "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz" - "version" "8.31.0" + wcwidth "^1.0.1" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encoding@^0.1.12: + version "0.1.13" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + dependencies: + once "^1.4.0" + +end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-prettier@^8.5.0: + version "8.5.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + +eslint-plugin-json@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz" + integrity sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g== + dependencies: + lodash "^4.17.21" + vscode-json-languageservice "^4.1.6" + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@8.31.0: + version "8.31.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz" + integrity sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA== dependencies: "@eslint/eslintrc" "^1.4.1" "@humanwhocodes/config-array" "^0.11.8" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - "ajv" "^6.10.0" - "chalk" "^4.0.0" - "cross-spawn" "^7.0.2" - "debug" "^4.3.2" - "doctrine" "^3.0.0" - "escape-string-regexp" "^4.0.0" - "eslint-scope" "^7.1.1" - "eslint-utils" "^3.0.0" - "eslint-visitor-keys" "^3.3.0" - "espree" "^9.4.0" - "esquery" "^1.4.0" - "esutils" "^2.0.2" - "fast-deep-equal" "^3.1.3" - "file-entry-cache" "^6.0.1" - "find-up" "^5.0.0" - "glob-parent" "^6.0.2" - "globals" "^13.19.0" - "grapheme-splitter" "^1.0.4" - "ignore" "^5.2.0" - "import-fresh" "^3.0.0" - "imurmurhash" "^0.1.4" - "is-glob" "^4.0.0" - "is-path-inside" "^3.0.3" - "js-sdsl" "^4.1.4" - "js-yaml" "^4.1.0" - "json-stable-stringify-without-jsonify" "^1.0.1" - "levn" "^0.4.1" - "lodash.merge" "^4.6.2" - "minimatch" "^3.1.2" - "natural-compare" "^1.4.0" - "optionator" "^0.9.1" - "regexpp" "^3.2.0" - "strip-ansi" "^6.0.1" - "strip-json-comments" "^3.1.0" - "text-table" "^0.2.0" - -"espree@^9.4.0": - "integrity" "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==" - "resolved" "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz" - "version" "9.4.1" - dependencies: - "acorn" "^8.8.0" - "acorn-jsx" "^5.3.2" - "eslint-visitor-keys" "^3.3.0" - -"esquery@^1.4.0": - "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==" - "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "estraverse" "^5.1.0" - -"esrecurse@^4.3.0": - "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" - "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "estraverse" "^5.2.0" - -"estraverse@^5.1.0", "estraverse@^5.2.0": - "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" - "version" "5.2.0" - -"esutils@^2.0.2": - "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - "version" "2.0.3" - -"exec-sh@^0.3.2", "exec-sh@^0.3.4": - "integrity" "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" - "resolved" "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz" - "version" "0.3.6" - -"execa@^4.0.0": - "integrity" "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==" - "resolved" "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "cross-spawn" "^7.0.0" - "get-stream" "^5.0.0" - "human-signals" "^1.1.1" - "is-stream" "^2.0.0" - "merge-stream" "^2.0.0" - "npm-run-path" "^4.0.0" - "onetime" "^5.1.0" - "signal-exit" "^3.0.2" - "strip-final-newline" "^2.0.0" - -"execa@^6.1.0": - "integrity" "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==" - "resolved" "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "cross-spawn" "^7.0.3" - "get-stream" "^6.0.1" - "human-signals" "^3.0.1" - "is-stream" "^3.0.0" - "merge-stream" "^2.0.0" - "npm-run-path" "^5.1.0" - "onetime" "^6.0.0" - "signal-exit" "^3.0.7" - "strip-final-newline" "^3.0.0" - -"exiftool@^0.0.3": - "integrity" "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" - "resolved" "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz" - "version" "0.0.3" - -"expand-template@^2.0.3": - "integrity" "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" - "resolved" "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz" - "version" "2.0.3" - -"external-editor@^3.0.3": - "integrity" "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==" - "resolved" "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz" - "version" "3.0.3" - dependencies: - "chardet" "^0.7.0" - "iconv-lite" "^0.4.24" - "tmp" "^0.0.33" - -"extsprintf@^1.2.0", "extsprintf@1.3.0": - "integrity" "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" - "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" - "version" "1.3.0" - -"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": - "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - "version" "3.1.3" - -"fast-json-stable-stringify@^2.0.0": - "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - "version" "2.1.0" - -"fast-levenshtein@^2.0.6": - "integrity" "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - "version" "2.0.6" - -"fastq@^1.6.0": - "integrity" "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==" - "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" - "version" "1.15.0" - dependencies: - "reusify" "^1.0.4" - -"fb-watchman@^2.0.1": - "integrity" "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==" - "resolved" "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "bser" "2.1.1" - -"figures@^3.0.0": - "integrity" "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==" - "resolved" "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "escape-string-regexp" "^1.0.5" - -"file-entry-cache@^6.0.1": - "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" - "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "flat-cache" "^3.0.4" - -"fill-range@^7.0.1": - "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" - "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "to-regex-range" "^5.0.1" - -"find-up@^5.0.0": - "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "locate-path" "^6.0.0" - "path-exists" "^4.0.0" - -"flat-cache@^3.0.4": - "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==" - "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "flatted" "^3.1.0" - "rimraf" "^3.0.2" - -"flatted@^3.1.0": - "integrity" "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==" - "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" - "version" "3.1.1" - -"fs-constants@^1.0.0": - "integrity" "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - "resolved" "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" - "version" "1.0.0" - -"fs-extra@10.1.0": - "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" - "version" "10.1.0" - dependencies: - "graceful-fs" "^4.2.0" - "jsonfile" "^6.0.1" - "universalify" "^2.0.0" - -"fs-minipass@^2.0.0": - "integrity" "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==" - "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "minipass" "^3.0.0" - -"fs.realpath@^1.0.0": - "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - "version" "1.0.0" - -"gauge@^3.0.0": - "integrity" "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==" - "resolved" "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "aproba" "^1.0.3 || ^2.0.0" - "color-support" "^1.1.2" - "console-control-strings" "^1.0.0" - "has-unicode" "^2.0.1" - "object-assign" "^4.1.1" - "signal-exit" "^3.0.0" - "string-width" "^4.2.3" - "strip-ansi" "^6.0.1" - "wide-align" "^1.1.2" - -"gauge@^4.0.3": - "integrity" "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==" - "resolved" "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" - "version" "4.0.4" - dependencies: - "aproba" "^1.0.3 || ^2.0.0" - "color-support" "^1.1.3" - "console-control-strings" "^1.1.0" - "has-unicode" "^2.0.1" - "signal-exit" "^3.0.7" - "string-width" "^4.2.3" - "strip-ansi" "^6.0.1" - "wide-align" "^1.1.5" - -"gauge@~2.7.3": - "integrity" "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==" - "resolved" "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz" - "version" "2.7.4" - dependencies: - "aproba" "^1.0.3" - "console-control-strings" "^1.0.0" - "has-unicode" "^2.0.0" - "object-assign" "^4.1.0" - "signal-exit" "^3.0.0" - "string-width" "^1.0.1" - "strip-ansi" "^3.0.1" - "wide-align" "^1.1.0" - -"get-stream@^5.0.0": - "integrity" "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" - "version" "5.2.0" - dependencies: - "pump" "^3.0.0" - -"get-stream@^6.0.1": - "integrity" "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" - "version" "6.0.1" - -"getpass@^0.1.1": - "integrity" "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==" - "resolved" "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" - "version" "0.1.7" - dependencies: - "assert-plus" "^1.0.0" - -"github-from-package@0.0.0": - "integrity" "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" - "resolved" "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" - "version" "0.0.0" - -"glob-parent@^6.0.2": - "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "is-glob" "^4.0.3" - -"glob@^6.0.1": - "integrity" "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==" - "resolved" "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz" - "version" "6.0.4" - dependencies: - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "2 || 3" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@^7.0.3", "glob@^7.0.5": - "integrity" "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" - "version" "7.1.3" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.0.4" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@^7.1.3": - "integrity" "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" - "version" "7.1.6" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.0.4" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@^7.1.4": - "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - "version" "7.2.3" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.1.1" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@8.0.3": - "integrity" "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==" - "resolved" "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" - "version" "8.0.3" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^5.0.1" - "once" "^1.3.0" - -"globals@^13.19.0": - "integrity" "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==" - "resolved" "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz" - "version" "13.19.0" - dependencies: - "type-fest" "^0.20.2" - -"globby@^6.1.0": - "integrity" "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==" - "resolved" "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "array-union" "^1.0.1" - "glob" "^7.0.3" - "object-assign" "^4.0.1" - "pify" "^2.0.0" - "pinkie-promise" "^2.0.0" - -"graceful-fs@^4.1.6", "graceful-fs@^4.2.0", "graceful-fs@^4.2.10", "graceful-fs@^4.2.6": - "integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - "version" "4.2.10" - -"grapheme-splitter@^1.0.4": - "integrity" "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" - "resolved" "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" - "version" "1.0.4" - -"has-flag@^4.0.0": - "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - "version" "4.0.0" - -"has-unicode@^2.0.0", "has-unicode@^2.0.1": - "integrity" "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - "resolved" "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" - "version" "2.0.1" - -"hashids@^2.2.10": - "integrity" "sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA==" - "resolved" "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz" - "version" "2.2.10" - -"hjson@3.2.2": - "integrity" "sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==" - "resolved" "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" - "version" "3.2.2" - -"html-entities@^2.3.3": - "integrity" "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" - "resolved" "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz" - "version" "2.3.3" - -"http-cache-semantics@^4.1.0": - "integrity" "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" - "version" "4.1.1" - -"http-proxy-agent@^4.0.1": - "integrity" "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==" - "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" - "version" "4.0.1" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.4.0: + version "9.4.1" + resolved "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz" + integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +exec-sh@^0.3.2, exec-sh@^0.3.4: + version "0.3.6" + resolved "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz" + integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== + +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +execa@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz" + integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^3.0.1" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + +exiftool@^0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz" + integrity "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" + +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + +external-editor@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz" + integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extsprintf@1.3.0, extsprintf@^1.2.0: + version "1.3.0" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +figures@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz" + integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" + integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@10.1.0: + version "10.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + +gauge@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" + console-control-strings "^1.0.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" + signal-exit "^3.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@8.0.3: + version "8.0.3" + resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@^6.0.1: + version "6.0.4" + resolved "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz" + integrity "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.3, glob@^7.0.5: + version "7.1.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.1.6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.4: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.19.0: + version "13.19.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz" + integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ== + dependencies: + type-fest "^0.20.2" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" + integrity "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==" + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.6: + version "4.2.10" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-unicode@^2.0.0, has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +hashids@^2.2.10: + version "2.2.10" + resolved "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz" + integrity sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA== + +hjson@3.2.2: + version "3.2.2" + resolved "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" + integrity sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q== + +html-entities@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" + integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== + +http-cache-semantics@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: "@tootallnate/once" "1" - "agent-base" "6" - "debug" "4" - -"http-signature@^1.3.6": - "integrity" "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==" - "resolved" "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz" - "version" "1.3.6" - dependencies: - "assert-plus" "^1.0.0" - "jsprim" "^2.0.2" - "sshpk" "^1.14.1" - -"https-proxy-agent@^5.0.0": - "integrity" "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==" - "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "agent-base" "6" - "debug" "4" - -"human-signals@^1.1.1": - "integrity" "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" - "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" - "version" "1.1.1" - -"human-signals@^3.0.1": - "integrity" "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==" - "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz" - "version" "3.0.1" - -"humanize-ms@^1.2.1": - "integrity" "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==" - "resolved" "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" - "version" "1.2.1" - dependencies: - "ms" "^2.0.0" - -"husky@^8.0.0": - "integrity" "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==" - "resolved" "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz" - "version" "8.0.3" - -"iconv-lite@^0.4.24": - "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" - "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - "version" "0.4.24" - dependencies: - "safer-buffer" ">= 2.1.2 < 3" - -"iconv-lite@^0.6.2", "iconv-lite@0.6.3": - "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" - "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - "version" "0.6.3" - dependencies: - "safer-buffer" ">= 2.1.2 < 3.0.0" - -"ieee754@^1.1.13": - "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - "version" "1.2.1" - -"ignore@^5.2.0": - "integrity" "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" - "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" - "version" "5.2.4" - -"import-fresh@^3.0.0", "import-fresh@^3.2.1": - "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" - "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - "version" "3.3.0" - dependencies: - "parent-module" "^1.0.0" - "resolve-from" "^4.0.0" - -"imurmurhash@^0.1.4": - "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - "version" "0.1.4" - -"indent-string@^4.0.0": - "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" - "version" "4.0.0" - -"infer-owner@^1.0.4": - "integrity" "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - "resolved" "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" - "version" "1.0.4" - -"inflight@^1.0.4": - "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" - "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - "version" "1.0.6" - dependencies: - "once" "^1.3.0" - "wrappy" "1" - -"inherits@^2.0.3", "inherits@^2.0.4", "inherits@~2.0.3", "inherits@2": - "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - "version" "2.0.4" - -"ini-config-parser@^1.0.4": - "integrity" "sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg==" - "resolved" "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "coffee-script" "^1.12.4" - "deep-extend" "^0.5.1" - "rimraf" "^2.6.1" - -"ini@~1.3.0": - "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" - "version" "1.3.8" - -"inquirer@^8.2.2": - "integrity" "sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow==" - "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz" - "version" "8.2.2" - dependencies: - "ansi-escapes" "^4.2.1" - "chalk" "^4.1.1" - "cli-cursor" "^3.1.0" - "cli-width" "^3.0.0" - "external-editor" "^3.0.3" - "figures" "^3.0.0" - "lodash" "^4.17.21" - "mute-stream" "0.0.8" - "ora" "^5.4.1" - "run-async" "^2.4.0" - "rxjs" "^7.5.5" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" - "through" "^2.3.6" - -"ip@^2.0.0": - "integrity" "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" - "resolved" "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" - "version" "2.0.0" - -"is-arrayish@^0.3.1": - "integrity" "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" - "version" "0.3.2" - -"is-extglob@^2.1.1": - "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - "version" "2.1.1" - -"is-fullwidth-code-point@^1.0.0": - "integrity" "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "number-is-nan" "^1.0.0" - -"is-fullwidth-code-point@^3.0.0": - "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - "version" "3.0.0" - -"is-fullwidth-code-point@^4.0.0": - "integrity" "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" - "version" "4.0.0" - -"is-glob@^4.0.0", "is-glob@^4.0.3": - "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" - "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "is-extglob" "^2.1.1" - -"is-interactive@^1.0.0": - "integrity" "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" - "resolved" "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" - "version" "1.0.0" - -"is-lambda@^1.0.1": - "integrity" "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" - "resolved" "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" - "version" "1.0.1" - -"is-number@^7.0.0": - "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - "version" "7.0.0" - -"is-path-cwd@^1.0.0": - "integrity" "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" - "resolved" "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz" - "version" "1.0.0" - -"is-path-in-cwd@^1.0.0": - "integrity" "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==" - "resolved" "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "is-path-inside" "^1.0.0" - -"is-path-inside@^1.0.0": - "integrity" "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==" - "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "path-is-inside" "^1.0.1" - -"is-path-inside@^3.0.3": - "integrity" "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" - "version" "3.0.3" - -"is-stream@^2.0.0": - "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - "version" "2.0.1" - -"is-stream@^3.0.0": - "integrity" "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" - "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" - "version" "3.0.0" - -"is-unicode-supported@^0.1.0": - "integrity" "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" - "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - "version" "0.1.0" - -"isarray@~1.0.0": - "integrity" "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - "version" "1.0.0" - -"isexe@^2.0.0": - "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - "version" "2.0.0" - -"js-sdsl@^4.1.4": - "integrity" "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==" - "resolved" "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz" - "version" "4.2.0" - -"js-yaml@^4.1.0": - "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "argparse" "^2.0.1" - -"jsbn@~0.1.0": - "integrity" "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - "resolved" "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" - "version" "0.1.1" - -"json-schema-traverse@^0.4.1": - "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - "version" "0.4.1" - -"json-schema@0.4.0": - "integrity" "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - "resolved" "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" - "version" "0.4.0" - -"json-stable-stringify-without-jsonify@^1.0.1": - "integrity" "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - "version" "1.0.1" - -"jsonc-parser@^3.0.0": - "integrity" "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" - "resolved" "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" - "version" "3.2.0" - -"jsonfile@^6.0.1": - "integrity" "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==" - "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "universalify" "^1.0.0" + agent-base "6" + debug "4" + +http-signature@^1.3.6: + version "1.3.6" + resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz" + integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== + dependencies: + assert-plus "^1.0.0" + jsprim "^2.0.2" + sshpk "^1.14.1" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +human-signals@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz" + integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +husky@^8.0.0: + version "8.0.3" + resolved "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz" + integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== + +iconv-lite@0.6.3, iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini-config-parser@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz" + integrity sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg== + dependencies: + coffee-script "^1.12.4" + deep-extend "^0.5.1" + rimraf "^2.6.1" + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inquirer@^8.2.2: + version "8.2.2" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz" + integrity sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + +is-glob@^4.0.0, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz" + integrity "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz" + integrity "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==" + dependencies: + path-is-inside "^1.0.1" + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + +js-sdsl@^4.1.4: + version "4.2.0" + resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz" + integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + +jsonc-parser@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" optionalDependencies: - "graceful-fs" "^4.1.6" - -"jsprim@^2.0.2": - "integrity" "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==" - "resolved" "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "assert-plus" "1.0.0" - "extsprintf" "1.3.0" - "json-schema" "0.4.0" - "verror" "1.10.0" - -"levn@^0.4.1": - "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" - "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - "version" "0.4.1" - dependencies: - "prelude-ls" "^1.2.1" - "type-check" "~0.4.0" - -"lilconfig@2.0.6": - "integrity" "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" - "resolved" "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz" - "version" "2.0.6" - -"lint-staged@^13.1.0": - "integrity" "sha512-pn/sR8IrcF/T0vpWLilih8jmVouMlxqXxKuAojmbiGX5n/gDnz+abdPptlj0vYnbfE0SQNl3CY/HwtM0+yfOVQ==" - "resolved" "https://registry.npmjs.org/lint-staged/-/lint-staged-13.1.0.tgz" - "version" "13.1.0" - dependencies: - "cli-truncate" "^3.1.0" - "colorette" "^2.0.19" - "commander" "^9.4.1" - "debug" "^4.3.4" - "execa" "^6.1.0" - "lilconfig" "2.0.6" - "listr2" "^5.0.5" - "micromatch" "^4.0.5" - "normalize-path" "^3.0.0" - "object-inspect" "^1.12.2" - "pidtree" "^0.6.0" - "string-argv" "^0.3.1" - "yaml" "^2.1.3" - -"listr2@^5.0.5": - "integrity" "sha512-u60KxKBy1BR2uLJNTWNptzWQ1ob/gjMzIJPZffAENzpZqbMZ/5PrXXOomDcevIS/+IB7s1mmCEtSlT2qHWMqag==" - "resolved" "https://registry.npmjs.org/listr2/-/listr2-5.0.6.tgz" - "version" "5.0.6" - dependencies: - "cli-truncate" "^2.1.0" - "colorette" "^2.0.19" - "log-update" "^4.0.0" - "p-map" "^4.0.0" - "rfdc" "^1.3.0" - "rxjs" "^7.5.7" - "through" "^2.3.8" - "wrap-ansi" "^7.0.0" - -"locate-path@^6.0.0": - "integrity" "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==" - "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "p-locate" "^5.0.0" - -"lodash-es@^4.17.21": - "integrity" "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - "resolved" "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" - "version" "4.17.21" - -"lodash.merge@^4.6.2": - "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - "version" "4.6.2" - -"lodash@^4.17.15", "lodash@^4.17.21", "lodash@4.17.21": - "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - "version" "4.17.21" - -"log-symbols@^4.1.0": - "integrity" "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==" - "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "chalk" "^4.1.0" - "is-unicode-supported" "^0.1.0" - -"log-update@^4.0.0": - "integrity" "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==" - "resolved" "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "ansi-escapes" "^4.3.0" - "cli-cursor" "^3.1.0" - "slice-ansi" "^4.0.0" - "wrap-ansi" "^6.2.0" - -"lru-cache@^6.0.0": - "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "yallist" "^4.0.0" - -"lru-cache@7.13.2": - "integrity" "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz" - "version" "7.13.2" - -"make-dir@^3.1.0": - "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" - "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "semver" "^6.0.0" - -"make-fetch-happen@^9.1.0": - "integrity" "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==" - "resolved" "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" - "version" "9.1.0" - dependencies: - "agentkeepalive" "^4.1.3" - "cacache" "^15.2.0" - "http-cache-semantics" "^4.1.0" - "http-proxy-agent" "^4.0.1" - "https-proxy-agent" "^5.0.0" - "is-lambda" "^1.0.1" - "lru-cache" "^6.0.0" - "minipass" "^3.1.3" - "minipass-collect" "^1.0.2" - "minipass-fetch" "^1.3.2" - "minipass-flush" "^1.0.5" - "minipass-pipeline" "^1.2.4" - "negotiator" "^0.6.2" - "promise-retry" "^2.0.1" - "socks-proxy-agent" "^6.0.0" - "ssri" "^8.0.0" - -"makeerror@1.0.x": - "integrity" "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==" - "resolved" "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz" - "version" "1.0.11" - dependencies: - "tmpl" "1.0.x" - -"merge-stream@^2.0.0": - "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - "version" "2.0.0" - -"micromatch@^4.0.2", "micromatch@^4.0.5": - "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==" - "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - "version" "4.0.5" - dependencies: - "braces" "^3.0.2" - "picomatch" "^2.3.1" - -"mime-db@1.52.0": - "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - "version" "1.52.0" - -"mime-types@^2.1.35": - "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" - "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - "version" "2.1.35" - dependencies: - "mime-db" "1.52.0" - -"mimic-fn@^2.1.0": - "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - "version" "2.1.0" - -"mimic-fn@^4.0.0": - "integrity" "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" - "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" - "version" "4.0.0" - -"mimic-response@^2.0.0": - "integrity" "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" - "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz" - "version" "2.1.0" - -"mimic-response@^3.1.0": - "integrity" "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" - "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" - "version" "3.1.0" - -"minimatch@^3.0.4", "minimatch@^3.0.5", "minimatch@^3.1.1", "minimatch@^3.1.2", "minimatch@2 || 3": - "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - "version" "3.1.2" - dependencies: - "brace-expansion" "^1.1.7" - -"minimatch@^5.0.1": - "integrity" "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "brace-expansion" "^2.0.1" - -"minimist@^1.1.1", "minimist@^1.2.0", "minimist@^1.2.3", "minimist@^1.2.6": - "integrity" "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" - "version" "1.2.6" - -"minipass-collect@^1.0.2": - "integrity" "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==" - "resolved" "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "minipass" "^3.0.0" - -"minipass-fetch@^1.3.2": - "integrity" "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==" - "resolved" "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" - "version" "1.4.1" - dependencies: - "minipass" "^3.1.0" - "minipass-sized" "^1.0.3" - "minizlib" "^2.0.0" + graceful-fs "^4.1.6" + +jsprim@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz" + integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lilconfig@2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz" + integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== + +lint-staged@^13.1.0: + version "13.1.0" + resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-13.1.0.tgz" + integrity sha512-pn/sR8IrcF/T0vpWLilih8jmVouMlxqXxKuAojmbiGX5n/gDnz+abdPptlj0vYnbfE0SQNl3CY/HwtM0+yfOVQ== + dependencies: + cli-truncate "^3.1.0" + colorette "^2.0.19" + commander "^9.4.1" + debug "^4.3.4" + execa "^6.1.0" + lilconfig "2.0.6" + listr2 "^5.0.5" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-inspect "^1.12.2" + pidtree "^0.6.0" + string-argv "^0.3.1" + yaml "^2.1.3" + +listr2@^5.0.5: + version "5.0.6" + resolved "https://registry.npmjs.org/listr2/-/listr2-5.0.6.tgz" + integrity sha512-u60KxKBy1BR2uLJNTWNptzWQ1ob/gjMzIJPZffAENzpZqbMZ/5PrXXOomDcevIS/+IB7s1mmCEtSlT2qHWMqag== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.19" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.5.7" + through "^2.3.8" + wrap-ansi "^7.0.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + +lru-cache@7.13.2: + version "7.13.2" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz" + integrity sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-fetch-happen@^9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz" + integrity "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==" + dependencies: + tmpl "1.0.x" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +micromatch@^4.0.2, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.35: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + +mimic-response@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.0" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +minimist@^1.2.3: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" optionalDependencies: - "encoding" "^0.1.12" - -"minipass-flush@^1.0.5": - "integrity" "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==" - "resolved" "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" - "version" "1.0.5" - dependencies: - "minipass" "^3.0.0" - -"minipass-pipeline@^1.2.2", "minipass-pipeline@^1.2.4": - "integrity" "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==" - "resolved" "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" - "version" "1.2.4" - dependencies: - "minipass" "^3.0.0" - -"minipass-sized@^1.0.3": - "integrity" "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==" - "resolved" "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "minipass" "^3.0.0" - -"minipass@^3.0.0", "minipass@^3.1.0", "minipass@^3.1.1", "minipass@^3.1.3": - "integrity" "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==" - "resolved" "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" - "version" "3.3.4" - dependencies: - "yallist" "^4.0.0" - -"minizlib@^2.0.0", "minizlib@^2.1.1": - "integrity" "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==" - "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" - "version" "2.1.2" - dependencies: - "minipass" "^3.0.0" - "yallist" "^4.0.0" - -"mkdirp-classic@^0.5.2", "mkdirp-classic@^0.5.3": - "integrity" "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - "resolved" "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" - "version" "0.5.3" - -"mkdirp@^1.0.3": - "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - "version" "1.0.4" - -"mkdirp@^1.0.4": - "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - "version" "1.0.4" - -"mkdirp@~0.5.1": - "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" - "version" "0.5.6" - dependencies: - "minimist" "^1.2.6" - -"moment@^2.19.3", "moment@2.29.4": - "integrity" "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" - "resolved" "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" - "version" "2.29.4" - -"ms@^2.0.0", "ms@2.1.2": - "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - "version" "2.1.2" - -"mute-stream@0.0.8": - "integrity" "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" - "version" "0.0.8" - -"mv@~2": - "integrity" "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==" - "resolved" "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "mkdirp" "~0.5.1" - "ncp" "~2.0.0" - "rimraf" "~2.4.0" - -"nan@^2.10.0", "nan@^2.14.0", "nan@^2.15.0", "nan@^2.16.0": - "integrity" "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" - "resolved" "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz" - "version" "2.16.0" - -"napi-build-utils@^1.0.1": - "integrity" "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - "resolved" "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" - "version" "1.0.2" - -"natural-compare@^1.4.0": - "integrity" "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - "version" "1.4.0" - -"ncp@~2.0.0": - "integrity" "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==" - "resolved" "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz" - "version" "2.0.0" - -"negotiator@^0.6.2": - "integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - "version" "0.6.3" - -"nntp-server@3.1.0": - "integrity" "sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw==" - "resolved" "https://registry.npmjs.org/nntp-server/-/nntp-server-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "debug" "^4.3.3" - "denque" "^2.0.1" - "serialize-error" "^8.1.0" - "split2" "^4.1.0" - -"node-abi@^2.7.0": - "integrity" "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==" - "resolved" "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz" - "version" "2.30.1" - dependencies: - "semver" "^5.4.1" - -"node-addon-api@^3.0.0": - "integrity" "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" - "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" - "version" "3.2.1" - -"node-addon-api@^4.2.0": - "integrity" "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" - "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz" - "version" "4.3.0" - -"node-fetch@^2.6.7": - "integrity" "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==" - "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" - "version" "2.6.7" - dependencies: - "whatwg-url" "^5.0.0" - -"node-gyp@8.x": - "integrity" "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==" - "resolved" "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" - "version" "8.4.1" - dependencies: - "env-paths" "^2.2.0" - "glob" "^7.1.4" - "graceful-fs" "^4.2.6" - "make-fetch-happen" "^9.1.0" - "nopt" "^5.0.0" - "npmlog" "^6.0.0" - "rimraf" "^3.0.2" - "semver" "^7.3.5" - "tar" "^6.1.2" - "which" "^2.0.2" - -"node-int64@^0.4.0": - "integrity" "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - "resolved" "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" - "version" "0.4.0" - -"node-pty@0.10.1": - "integrity" "sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg==" - "resolved" "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz" - "version" "0.10.1" - dependencies: - "nan" "^2.14.0" - -"nodemailer@6.7.7": - "integrity" "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==" - "resolved" "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz" - "version" "6.7.7" - -"noop-logger@^0.1.1": - "integrity" "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==" - "resolved" "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz" - "version" "0.1.1" - -"nopt@^5.0.0": - "integrity" "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==" - "resolved" "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "abbrev" "1" - -"normalize-path@^3.0.0": - "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - "version" "3.0.0" - -"npm-run-path@^4.0.0": - "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" - "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "path-key" "^3.0.0" - -"npm-run-path@^5.1.0": - "integrity" "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==" - "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "path-key" "^4.0.0" - -"npmlog@^4.0.1": - "integrity" "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==" - "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" - "version" "4.1.2" - dependencies: - "are-we-there-yet" "~1.1.2" - "console-control-strings" "~1.1.0" - "gauge" "~2.7.3" - "set-blocking" "~2.0.0" - -"npmlog@^4.1.2": - "integrity" "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==" - "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" - "version" "4.1.2" - dependencies: - "are-we-there-yet" "~1.1.2" - "console-control-strings" "~1.1.0" - "gauge" "~2.7.3" - "set-blocking" "~2.0.0" - -"npmlog@^5.0.1": - "integrity" "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==" - "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "are-we-there-yet" "^2.0.0" - "console-control-strings" "^1.1.0" - "gauge" "^3.0.0" - "set-blocking" "^2.0.0" - -"npmlog@^6.0.0": - "integrity" "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==" - "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "are-we-there-yet" "^3.0.0" - "console-control-strings" "^1.1.0" - "gauge" "^4.0.3" - "set-blocking" "^2.0.0" - -"number-is-nan@^1.0.0": - "integrity" "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" - "resolved" "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" - "version" "1.0.1" - -"object-assign@^4.0.1", "object-assign@^4.1.0", "object-assign@^4.1.1": - "integrity" "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - "version" "4.1.1" - -"object-inspect@^1.12.2": - "integrity" "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" - "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" - "version" "1.12.3" - -"once@^1.3.0", "once@^1.3.1", "once@^1.4.0": - "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" - "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "wrappy" "1" - -"onetime@^5.1.0": - "integrity" "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==" - "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "mimic-fn" "^2.1.0" - -"onetime@^6.0.0": - "integrity" "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==" - "resolved" "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "mimic-fn" "^4.0.0" - -"optionator@^0.9.1": - "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" - "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" - "version" "0.9.1" - dependencies: - "deep-is" "^0.1.3" - "fast-levenshtein" "^2.0.6" - "levn" "^0.4.1" - "prelude-ls" "^1.2.1" - "type-check" "^0.4.0" - "word-wrap" "^1.2.3" - -"ora@^5.4.1": - "integrity" "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==" - "resolved" "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" - "version" "5.4.1" - dependencies: - "bl" "^4.1.0" - "chalk" "^4.1.0" - "cli-cursor" "^3.1.0" - "cli-spinners" "^2.5.0" - "is-interactive" "^1.0.0" - "is-unicode-supported" "^0.1.0" - "log-symbols" "^4.1.0" - "strip-ansi" "^6.0.0" - "wcwidth" "^1.0.1" - -"os-tmpdir@~1.0.2": - "integrity" "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" - "resolved" "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - "version" "1.0.2" - -"otplib@11.0.1": - "integrity" "sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ==" - "resolved" "https://registry.npmjs.org/otplib/-/otplib-11.0.1.tgz" - "version" "11.0.1" - dependencies: - "thirty-two" "1.0.2" - -"p-limit@^3.0.2": - "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "yocto-queue" "^0.1.0" - -"p-locate@^5.0.0": - "integrity" "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==" - "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "p-limit" "^3.0.2" - -"p-map@^1.1.1": - "integrity" "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" - "resolved" "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz" - "version" "1.2.0" - -"p-map@^4.0.0": - "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" - "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "aggregate-error" "^3.0.0" - -"parent-module@^1.0.0": - "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" - "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "callsites" "^3.0.0" - -"parse-full-name@^1.2.6": - "integrity" "sha512-uIaENXJFmZfzulBndhHJayi7ZEifJ1bXKaWYmySa04EmMX7eIcsufiAgWTYiJqWRa/Sq7JWPGtCIXFAoUfF7gw==" - "resolved" "https://registry.npmjs.org/parse-full-name/-/parse-full-name-1.2.6.tgz" - "version" "1.2.6" - -"path-exists@^4.0.0": - "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - "version" "4.0.0" - -"path-is-absolute@^1.0.0": - "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - "version" "1.0.1" - -"path-is-inside@^1.0.1": - "integrity" "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - "resolved" "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" - "version" "1.0.2" - -"path-key@^3.0.0", "path-key@^3.1.0": - "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - "version" "3.1.1" - -"path-key@^4.0.0": - "integrity" "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" - "resolved" "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" - "version" "4.0.0" - -"picomatch@^2.0.4", "picomatch@^2.3.1": - "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - "version" "2.3.1" - -"pidtree@^0.6.0": - "integrity" "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==" - "resolved" "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz" - "version" "0.6.0" - -"pify@^2.0.0": - "integrity" "sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - "version" "2.3.0" - -"pify@^3.0.0": - "integrity" "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" - "resolved" "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" - "version" "3.0.0" - -"pinkie-promise@^2.0.0": - "integrity" "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==" - "resolved" "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "pinkie" "^2.0.0" - -"pinkie@^2.0.0": - "integrity" "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" - "resolved" "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" - "version" "2.0.4" - -"prebuild-install@^5.3.4": - "integrity" "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==" - "resolved" "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz" - "version" "5.3.6" - dependencies: - "detect-libc" "^1.0.3" - "expand-template" "^2.0.3" - "github-from-package" "0.0.0" - "minimist" "^1.2.3" - "mkdirp-classic" "^0.5.3" - "napi-build-utils" "^1.0.1" - "node-abi" "^2.7.0" - "noop-logger" "^0.1.1" - "npmlog" "^4.0.1" - "pump" "^3.0.0" - "rc" "^1.2.7" - "simple-get" "^3.0.3" - "tar-fs" "^2.0.0" - "tunnel-agent" "^0.6.0" - "which-pm-runs" "^1.0.0" - -"prelude-ls@^1.2.1": - "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - "version" "1.2.1" - -"prettier@2.8.1": - "integrity" "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==" - "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz" - "version" "2.8.1" - -"process-nextick-args@~2.0.0": - "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - "version" "2.0.1" - -"promise-inflight@^1.0.1": - "integrity" "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" - "resolved" "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" - "version" "1.0.1" - -"promise-retry@^2.0.1": - "integrity" "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==" - "resolved" "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "err-code" "^2.0.2" - "retry" "^0.12.0" - -"pump@^3.0.0": - "integrity" "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==" - "resolved" "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "end-of-stream" "^1.1.0" - "once" "^1.3.1" - -"punycode@^2.1.0": - "integrity" "sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==" - "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz" - "version" "2.2.0" - -"qrcode-generator@^1.4.4": - "integrity" "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==" - "resolved" "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz" - "version" "1.4.4" - -"queue-microtask@^1.2.2": - "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - "version" "1.2.3" - -"rc@^1.2.7": - "integrity" "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==" - "resolved" "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" - "version" "1.2.8" - dependencies: - "deep-extend" "^0.6.0" - "ini" "~1.3.0" - "minimist" "^1.2.0" - "strip-json-comments" "~2.0.1" - -"readable-stream@^2.0.6": - "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - "version" "2.3.7" - dependencies: - "core-util-is" "~1.0.0" - "inherits" "~2.0.3" - "isarray" "~1.0.0" - "process-nextick-args" "~2.0.0" - "safe-buffer" "~5.1.1" - "string_decoder" "~1.1.1" - "util-deprecate" "~1.0.1" - -"readable-stream@^3.1.1", "readable-stream@^3.4.0", "readable-stream@^3.6.0": - "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - "version" "3.6.0" - dependencies: - "inherits" "^2.0.3" - "string_decoder" "^1.1.1" - "util-deprecate" "^1.0.1" - -"regexpp@^3.2.0": - "integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" - "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - "version" "3.2.0" - -"resolve-from@^4.0.0": - "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - "version" "4.0.0" - -"restore-cursor@^3.1.0": - "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" - "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "onetime" "^5.1.0" - "signal-exit" "^3.0.2" - -"retry@^0.12.0": - "integrity" "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" - "resolved" "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" - "version" "0.12.0" - -"reusify@^1.0.4": - "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - "version" "1.0.4" - -"rfdc@^1.3.0": - "integrity" "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" - "resolved" "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" - "version" "1.3.0" - -"rimraf@^2.2.8": - "integrity" "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" - "version" "2.6.2" - dependencies: - "glob" "^7.0.5" - -"rimraf@^2.6.1": - "integrity" "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" - "version" "2.6.2" - dependencies: - "glob" "^7.0.5" - -"rimraf@^3.0.2": - "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "glob" "^7.1.3" - -"rimraf@~2.4.0": - "integrity" "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz" - "version" "2.4.5" - dependencies: - "glob" "^6.0.1" - -"rlogin@^1.0.0": - "integrity" "sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==" - "resolved" "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz" - "version" "1.0.0" - -"rsvp@^4.8.4": - "integrity" "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" - "resolved" "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz" - "version" "4.8.5" - -"run-async@^2.4.0": - "integrity" "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" - "resolved" "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" - "version" "2.4.1" - -"run-parallel@^1.1.9": - "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" - "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "queue-microtask" "^1.2.2" - -"rxjs@^7.5.5", "rxjs@^7.5.7": - "integrity" "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==" - "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz" - "version" "7.8.0" - dependencies: - "tslib" "^2.1.0" - -"safe-buffer@^5.0.1", "safe-buffer@~5.1.0", "safe-buffer@~5.1.1": - "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - "version" "5.1.2" - -"safe-json-stringify@~1": - "integrity" "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==" - "resolved" "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz" - "version" "1.2.0" - -"safer-buffer@^2.0.2", "safer-buffer@^2.1.0", "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", "safer-buffer@~2.1.0": - "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - "version" "2.1.2" - -"sane@5.0.1": - "integrity" "sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q==" - "resolved" "https://registry.npmjs.org/sane/-/sane-5.0.1.tgz" - "version" "5.0.1" + encoding "^0.1.12" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: + version "3.3.4" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" + integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== + dependencies: + yallist "^4.0.0" + +minizlib@^2.0.0, minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@~0.5.1: + version "0.5.6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +moment@2.29.4, moment@^2.19.3: + version "2.29.4" + resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== + +ms@2.1.2, ms@^2.0.0: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mv@~2: + version "2.1.1" + resolved "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz" + integrity "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==" + dependencies: + mkdirp "~0.5.1" + ncp "~2.0.0" + rimraf "~2.4.0" + +nan@^2.10.0, nan@^2.14.0, nan@^2.15.0, nan@^2.16.0: + version "2.16.0" + resolved "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz" + integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== + +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + +ncp@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz" + integrity "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==" + +negotiator@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +nntp-server@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/nntp-server/-/nntp-server-3.1.0.tgz" + integrity sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw== + dependencies: + debug "^4.3.3" + denque "^2.0.1" + serialize-error "^8.1.0" + split2 "^4.1.0" + +node-abi@^2.7.0: + version "2.30.1" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" + integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w== + dependencies: + semver "^5.4.1" + +node-addon-api@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== + +node-addon-api@^4.2.0: + version "4.3.0" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz" + integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== + +node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-gyp@8.x: + version "8.4.1" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + integrity "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + +node-pty@0.10.1: + version "0.10.1" + resolved "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz" + integrity sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg== + dependencies: + nan "^2.14.0" + +nodemailer@6.7.7: + version "6.7.7" + resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz" + integrity sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA== + +noop-logger@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" + integrity sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ== + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npm-run-path@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz" + integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + dependencies: + path-key "^4.0.0" + +npmlog@^4.0.1, npmlog@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +npmlog@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + +object-inspect@^1.12.2: + version "1.12.3" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + dependencies: + mimic-fn "^2.1.0" + +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + integrity "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + +otplib@11.0.1: + version "11.0.1" + resolved "https://registry.npmjs.org/otplib/-/otplib-11.0.1.tgz" + integrity sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ== + dependencies: + thirty-two "1.0.2" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" + integrity "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + +picomatch@^2.0.4, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pidtree@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz" + integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity "sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + integrity "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + integrity "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + integrity "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" + +prebuild-install@^5.3.4: + version "5.3.6" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.6.tgz#7c225568d864c71d89d07f8796042733a3f54291" + integrity sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg== + dependencies: + detect-libc "^1.0.3" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^2.7.0" + noop-logger "^0.1.1" + npmlog "^4.0.1" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^3.0.3" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + which-pm-runs "^1.0.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier@2.8.1: + version "2.8.1" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz" + integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0: + version "2.2.0" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz" + integrity sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw== + +qrcode-generator@^1.4.4: + version "1.4.4" + resolved "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz" + integrity sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +readable-stream@^2.0.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + +rimraf@^2.2.8, rimraf@^2.6.1: + version "2.6.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" + integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== + dependencies: + glob "^7.0.5" + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rimraf@~2.4.0: + version "2.4.5" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz" + integrity "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==" + dependencies: + glob "^6.0.1" + +rlogin@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz" + integrity "sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==" + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.5.5, rxjs@^7.5.7: + version "7.8.0" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz" + integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== + dependencies: + tslib "^2.1.0" + +safe-buffer@^5.0.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-json-stringify@~1: + version "1.2.0" + resolved "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz" + integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/sane/-/sane-5.0.1.tgz" + integrity sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q== dependencies: "@cnakazawa/watch" "^1.0.3" - "anymatch" "^3.1.1" - "capture-exit" "^2.0.0" - "exec-sh" "^0.3.4" - "execa" "^4.0.0" - "fb-watchman" "^2.0.1" - "micromatch" "^4.0.2" - "minimist" "^1.1.1" - "walker" "~1.0.5" - -"sanitize-filename@^1.6.3": - "integrity" "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==" - "resolved" "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz" - "version" "1.6.3" - dependencies: - "truncate-utf8-bytes" "^1.0.0" - -"seedrandom@^3.0.5": - "integrity" "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" - "resolved" "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz" - "version" "3.0.5" - -"semver@^5.4.1": - "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - "version" "5.7.1" - -"semver@^6.0.0": - "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - "version" "6.3.0" - -"semver@^7.3.2", "semver@^7.3.5": - "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - "version" "7.3.7" - dependencies: - "lru-cache" "^6.0.0" - -"serialize-error@^8.1.0": - "integrity" "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==" - "resolved" "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz" - "version" "8.1.0" - dependencies: - "type-fest" "^0.20.2" - -"set-blocking@^2.0.0", "set-blocking@~2.0.0": - "integrity" "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - "version" "2.0.0" - -"sharp@^0.25.2": - "integrity" "sha512-umSzJJ1oBwIOfwFFt/fJ7JgCva9FvrEU2cbbm7u/3hSDZhXvkME8WE5qpaJqLIe2Har5msF5UG4CzYlEg5o3BQ==" - "resolved" "https://registry.npmjs.org/sharp/-/sharp-0.25.4.tgz" - "version" "0.25.4" - dependencies: - "color" "^3.1.2" - "detect-libc" "^1.0.3" - "node-addon-api" "^3.0.0" - "npmlog" "^4.1.2" - "prebuild-install" "^5.3.4" - "semver" "^7.3.2" - "simple-get" "^4.0.0" - "tar" "^6.0.2" - "tunnel-agent" "^0.6.0" - -"shebang-command@^2.0.0": - "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" - "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "shebang-regex" "^3.0.0" - -"shebang-regex@^3.0.0": - "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - "version" "3.0.0" - -"signal-exit@^3.0.0", "signal-exit@^3.0.2", "signal-exit@^3.0.7": - "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - "version" "3.0.7" - -"simple-concat@^1.0.0": - "integrity" "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - "resolved" "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" - "version" "1.0.1" - -"simple-get@^3.0.3": - "integrity" "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==" - "resolved" "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz" - "version" "3.1.1" - dependencies: - "decompress-response" "^4.2.0" - "once" "^1.3.1" - "simple-concat" "^1.0.0" - -"simple-get@^4.0.0": - "integrity" "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==" - "resolved" "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "decompress-response" "^6.0.0" - "once" "^1.3.1" - "simple-concat" "^1.0.0" - -"simple-swizzle@^0.2.2": - "integrity" "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==" - "resolved" "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" - "version" "0.2.2" - dependencies: - "is-arrayish" "^0.3.1" - -"slice-ansi@^3.0.0": - "integrity" "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==" - "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "ansi-styles" "^4.0.0" - "astral-regex" "^2.0.0" - "is-fullwidth-code-point" "^3.0.0" - -"slice-ansi@^4.0.0": - "integrity" "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==" - "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "ansi-styles" "^4.0.0" - "astral-regex" "^2.0.0" - "is-fullwidth-code-point" "^3.0.0" - -"slice-ansi@^5.0.0": - "integrity" "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==" - "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "ansi-styles" "^6.0.0" - "is-fullwidth-code-point" "^4.0.0" - -"smart-buffer@^4.2.0": - "integrity" "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" - "resolved" "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" - "version" "4.2.0" - -"socks-proxy-agent@^6.0.0": - "integrity" "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==" - "resolved" "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz" - "version" "6.2.1" - dependencies: - "agent-base" "^6.0.2" - "debug" "^4.3.3" - "socks" "^2.6.2" - -"socks@^2.6.2": - "integrity" "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==" - "resolved" "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz" - "version" "2.7.0" - dependencies: - "ip" "^2.0.0" - "smart-buffer" "^4.2.0" - -"split2@^4.1.0": - "integrity" "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" - "resolved" "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz" - "version" "4.1.0" - -"sqlite3-trans@1.3.0": - "integrity" "sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg==" - "resolved" "https://registry.npmjs.org/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "lodash" "^4.17.15" - -"sqlite3@5.0.11": - "integrity" "sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA==" - "resolved" "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz" - "version" "5.0.11" + anymatch "^3.1.1" + capture-exit "^2.0.0" + exec-sh "^0.3.4" + execa "^4.0.0" + fb-watchman "^2.0.1" + micromatch "^4.0.2" + minimist "^1.1.1" + walker "~1.0.5" + +sanitize-filename@^1.6.3: + version "1.6.3" + resolved "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz" + integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== + dependencies: + truncate-utf8-bytes "^1.0.0" + +seedrandom@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7" + integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg== + +semver@^5.4.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.5: + version "7.3.7" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +serialize-error@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz" + integrity sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ== + dependencies: + type-fest "^0.20.2" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +sharp@^0.25.2: + version "0.25.4" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.25.4.tgz#1a8e542144a07ab7e9316ab89de80182b827c363" + integrity sha512-umSzJJ1oBwIOfwFFt/fJ7JgCva9FvrEU2cbbm7u/3hSDZhXvkME8WE5qpaJqLIe2Har5msF5UG4CzYlEg5o3BQ== + dependencies: + color "^3.1.2" + detect-libc "^1.0.3" + node-addon-api "^3.0.0" + npmlog "^4.1.2" + prebuild-install "^5.3.4" + semver "^7.3.2" + simple-get "^4.0.0" + tar "^6.0.2" + tunnel-agent "^0.6.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.1.tgz#cc7ba77cfbe761036fbfce3d021af25fc5584d55" + integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA== + dependencies: + decompress-response "^4.2.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-get@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^6.0.0: + version "6.2.1" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz" + integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.7.0" + resolved "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz" + integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + +split2@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz" + integrity sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ== + +sqlite3-trans@1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz" + integrity sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg== + dependencies: + lodash "^4.17.15" + +sqlite3@5.0.11: + version "5.0.11" + resolved "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz" + integrity sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA== dependencies: "@mapbox/node-pre-gyp" "^1.0.0" - "node-addon-api" "^4.2.0" - "tar" "^6.1.11" + node-addon-api "^4.2.0" + tar "^6.1.11" optionalDependencies: - "node-gyp" "8.x" + node-gyp "8.x" -"ssh2@1.11.0": - "integrity" "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==" - "resolved" "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz" - "version" "1.11.0" +ssh2@1.11.0: + version "1.11.0" + resolved "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz" + integrity sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw== dependencies: - "asn1" "^0.2.4" - "bcrypt-pbkdf" "^1.0.2" + asn1 "^0.2.4" + bcrypt-pbkdf "^1.0.2" optionalDependencies: - "cpu-features" "~0.0.4" - "nan" "^2.16.0" - -"sshpk@^1.14.1": - "integrity" "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==" - "resolved" "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" - "version" "1.17.0" - dependencies: - "asn1" "~0.2.3" - "assert-plus" "^1.0.0" - "bcrypt-pbkdf" "^1.0.0" - "dashdash" "^1.12.0" - "ecc-jsbn" "~0.1.1" - "getpass" "^0.1.1" - "jsbn" "~0.1.0" - "safer-buffer" "^2.0.2" - "tweetnacl" "~0.14.0" - -"ssri@^8.0.0", "ssri@^8.0.1": - "integrity" "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==" - "resolved" "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" - "version" "8.0.1" - dependencies: - "minipass" "^3.1.1" - -"string_decoder@^1.1.1": - "integrity" "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "safe-buffer" "~5.1.0" - -"string_decoder@~1.1.1": - "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "safe-buffer" "~5.1.0" - -"string-argv@^0.3.1": - "integrity" "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==" - "resolved" "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" - "version" "0.3.1" - -"string-width@^1.0.1": - "integrity" "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "code-point-at" "^1.0.0" - "is-fullwidth-code-point" "^1.0.0" - "strip-ansi" "^3.0.0" - -"string-width@^1.0.2 || 2 || 3 || 4", "string-width@^4.1.0", "string-width@^4.2.0", "string-width@^4.2.3": - "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - "version" "4.2.3" - dependencies: - "emoji-regex" "^8.0.0" - "is-fullwidth-code-point" "^3.0.0" - "strip-ansi" "^6.0.1" - -"string-width@^5.0.0": - "integrity" "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" - "version" "5.1.2" - dependencies: - "eastasianwidth" "^0.2.0" - "emoji-regex" "^9.2.2" - "strip-ansi" "^7.0.1" - -"strip-ansi@^3.0.0", "strip-ansi@^3.0.1": - "integrity" "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "ansi-regex" "^2.0.0" - -"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": - "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "ansi-regex" "^5.0.1" - -"strip-ansi@^7.0.1": - "integrity" "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "ansi-regex" "^6.0.1" - -"strip-final-newline@^2.0.0": - "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - "version" "2.0.0" - -"strip-final-newline@^3.0.0": - "integrity" "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" - "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" - "version" "3.0.0" - -"strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1": - "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - "version" "3.1.1" - -"strip-json-comments@~2.0.1": - "integrity" "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" - "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" - "version" "2.0.1" - -"striptags@^4.0.0-alpha.4": - "integrity" "sha512-/0jWyVWhpg9ciRHfjKYBpMHXct/HrFRfsR2HU77nGPbc8SPcVSIHZlZR/0TG3MyPq2C+HiHuwx8BlbcdI/cNbw==" - "resolved" "https://registry.npmjs.org/striptags/-/striptags-4.0.0-alpha.4.tgz" - "version" "4.0.0-alpha.4" - -"supports-color@^7.1.0": - "integrity" "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz" - "version" "7.1.0" - dependencies: - "has-flag" "^4.0.0" - -"systeminformation@5.12.3": - "integrity" "sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A==" - "resolved" "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.3.tgz" - "version" "5.12.3" - -"tar-fs@^2.0.0": - "integrity" "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==" - "resolved" "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "chownr" "^1.1.1" - "mkdirp-classic" "^0.5.2" - "pump" "^3.0.0" - "tar-stream" "^2.1.4" - -"tar-stream@^2.1.4": - "integrity" "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==" - "resolved" "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" - "version" "2.2.0" - dependencies: - "bl" "^4.0.3" - "end-of-stream" "^1.4.1" - "fs-constants" "^1.0.0" - "inherits" "^2.0.3" - "readable-stream" "^3.1.1" - -"tar@^6.0.2", "tar@^6.1.11", "tar@^6.1.2": - "integrity" "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==" - "resolved" "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" - "version" "6.1.11" - dependencies: - "chownr" "^2.0.0" - "fs-minipass" "^2.0.0" - "minipass" "^3.0.0" - "minizlib" "^2.1.1" - "mkdirp" "^1.0.3" - "yallist" "^4.0.0" - -"telnet-socket@0.2.4": - "integrity" "sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ==" - "resolved" "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz" - "version" "0.2.4" - dependencies: - "binary-parser" "1.6.2" - "buffers" "github:NuSkooler/node-buffers" - -"temptmp@^1.1.0": - "integrity" "sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ==" - "resolved" "https://registry.npmjs.org/temptmp/-/temptmp-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "del" "^3.0.0" - -"text-table@^0.2.0": - "integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - "version" "0.2.0" - -"thirty-two@1.0.2": - "integrity" "sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==" - "resolved" "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz" - "version" "1.0.2" - -"through@^2.3.6", "through@^2.3.8": - "integrity" "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - "version" "2.3.8" - -"tmp@^0.0.33": - "integrity" "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==" - "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" - "version" "0.0.33" - dependencies: - "os-tmpdir" "~1.0.2" - -"tmpl@1.0.x": - "integrity" "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - "resolved" "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" - "version" "1.0.5" - -"to-regex-range@^5.0.1": - "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" - "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "is-number" "^7.0.0" - -"tr46@~0.0.3": - "integrity" "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - "version" "0.0.3" - -"truncate-utf8-bytes@^1.0.0": - "integrity" "sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==" - "resolved" "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "utf8-byte-length" "^1.0.1" - -"tslib@^2.1.0": - "integrity" "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" - "version" "2.3.1" - -"tunnel-agent@^0.6.0": - "integrity" "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==" - "resolved" "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" - "version" "0.6.0" - dependencies: - "safe-buffer" "^5.0.1" - -"tweetnacl@^0.14.3", "tweetnacl@~0.14.0": - "integrity" "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - "resolved" "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" - "version" "0.14.5" - -"type-check@^0.4.0", "type-check@~0.4.0": - "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" - "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - "version" "0.4.0" - dependencies: - "prelude-ls" "^1.2.1" - -"type-fest@^0.20.2": - "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - "version" "0.20.2" - -"type-fest@^0.21.3": - "integrity" "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" - "version" "0.21.3" - -"unique-filename@^1.1.1": - "integrity" "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==" - "resolved" "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "unique-slug" "^2.0.0" - -"unique-slug@^2.0.0": - "integrity" "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==" - "resolved" "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "imurmurhash" "^0.1.4" - -"universalify@^1.0.0": - "integrity" "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" - "resolved" "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz" - "version" "1.0.0" - -"universalify@^2.0.0": - "integrity" "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - "resolved" "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" - "version" "2.0.0" - -"uri-js@^4.2.2": - "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" - "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - "version" "4.4.1" - dependencies: - "punycode" "^2.1.0" - -"utf8-byte-length@^1.0.1": - "integrity" "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - "resolved" "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz" - "version" "1.0.4" - -"util-deprecate@^1.0.1", "util-deprecate@~1.0.1": - "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - "version" "1.0.2" - -"uuid-parse@1.1.0": - "integrity" "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==" - "resolved" "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz" - "version" "1.1.0" - -"uuid@8.3.2": - "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - "version" "8.3.2" - -"verror@1.10.0": - "integrity" "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==" - "resolved" "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" - "version" "1.10.0" - dependencies: - "assert-plus" "^1.0.0" - "core-util-is" "1.0.2" - "extsprintf" "^1.2.0" - -"vscode-json-languageservice@^4.1.6": - "integrity" "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==" - "resolved" "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "jsonc-parser" "^3.0.0" - "vscode-languageserver-textdocument" "^1.0.3" - "vscode-languageserver-types" "^3.16.0" - "vscode-nls" "^5.0.0" - "vscode-uri" "^3.0.3" - -"vscode-languageserver-textdocument@^1.0.3": - "integrity" "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==" - "resolved" "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz" - "version" "1.0.8" - -"vscode-languageserver-types@^3.16.0": - "integrity" "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==" - "resolved" "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz" - "version" "3.17.2" - -"vscode-nls@^5.0.0": - "integrity" "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==" - "resolved" "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz" - "version" "5.2.0" - -"vscode-uri@^3.0.3": - "integrity" "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==" - "resolved" "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz" - "version" "3.0.7" - -"walker@~1.0.5": - "integrity" "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==" - "resolved" "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz" - "version" "1.0.7" - dependencies: - "makeerror" "1.0.x" - -"wcwidth@^1.0.1": - "integrity" "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==" - "resolved" "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "defaults" "^1.0.3" - -"webidl-conversions@^3.0.0": - "integrity" "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - "version" "3.0.1" - -"whatwg-url@^5.0.0": - "integrity" "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==" - "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "tr46" "~0.0.3" - "webidl-conversions" "^3.0.0" - -"which-pm-runs@^1.0.0": - "integrity" "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==" - "resolved" "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz" - "version" "1.1.0" - -"which@^2.0.1", "which@^2.0.2": - "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" - "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "isexe" "^2.0.0" - -"wide-align@^1.1.0", "wide-align@^1.1.2", "wide-align@^1.1.5": - "integrity" "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==" - "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" - "version" "1.1.5" - dependencies: - "string-width" "^1.0.2 || 2 || 3 || 4" - -"word-wrap@^1.2.3": - "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - "version" "1.2.3" - -"wrap-ansi@^6.2.0": - "integrity" "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" - "version" "6.2.0" - dependencies: - "ansi-styles" "^4.0.0" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" - -"wrap-ansi@^7.0.0": - "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - "version" "7.0.0" - dependencies: - "ansi-styles" "^4.0.0" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" - -"wrappy@1": - "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - "version" "1.0.2" - -"ws@7.5.9": - "integrity" "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" - "resolved" "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" - "version" "7.5.9" - -"yallist@^4.0.0": - "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - "version" "4.0.0" - -"yaml@^2.1.3": - "integrity" "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==" - "resolved" "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz" - "version" "2.2.1" - -"yazl@^2.5.1": - "integrity" "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==" - "resolved" "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz" - "version" "2.5.1" - dependencies: - "buffer-crc32" "~0.2.3" - -"yocto-queue@^0.1.0": - "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - "version" "0.1.0" + cpu-features "~0.0.4" + nan "^2.16.0" + +sshpk@^1.14.1: + version "1.17.0" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +string-argv@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" + integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.0: + version "5.1.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string_decoder@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz" + integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== + dependencies: + safe-buffer "~5.1.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +striptags@^4.0.0-alpha.4: + version "4.0.0-alpha.4" + resolved "https://registry.yarnpkg.com/striptags/-/striptags-4.0.0-alpha.4.tgz#824f1ac040f824574316ce87a3663c0c4df9900d" + integrity sha512-/0jWyVWhpg9ciRHfjKYBpMHXct/HrFRfsR2HU77nGPbc8SPcVSIHZlZR/0TG3MyPq2C+HiHuwx8BlbcdI/cNbw== + +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + +systeminformation@5.12.3: + version "5.12.3" + resolved "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.3.tgz" + integrity sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A== + +tar-fs@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: + version "6.1.11" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +telnet-socket@0.2.4: + version "0.2.4" + resolved "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz" + integrity sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ== + dependencies: + binary-parser "1.6.2" + buffers "github:NuSkooler/node-buffers" + +temptmp@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/temptmp/-/temptmp-1.1.0.tgz" + integrity sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ== + dependencies: + del "^3.0.0" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + +thirty-two@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz" + integrity "sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==" + +through@^2.3.6, through@^2.3.8: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + integrity "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmpl@1.0.x: + version "1.0.5" + resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +truncate-utf8-bytes@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz" + integrity "sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==" + dependencies: + utf8-byte-length "^1.0.1" + +tslib@^2.1.0: + version "2.3.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + integrity "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +utf8-byte-length@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz" + integrity "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + +uuid-parse@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz" + integrity sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A== + +uuid@8.3.2: + version "8.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vscode-json-languageservice@^4.1.6: + version "4.2.1" + resolved "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz" + integrity sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA== + dependencies: + jsonc-parser "^3.0.0" + vscode-languageserver-textdocument "^1.0.3" + vscode-languageserver-types "^3.16.0" + vscode-nls "^5.0.0" + vscode-uri "^3.0.3" + +vscode-languageserver-textdocument@^1.0.3: + version "1.0.8" + resolved "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz" + integrity sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q== + +vscode-languageserver-types@^3.16.0: + version "3.17.2" + resolved "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz" + integrity sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA== + +vscode-nls@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz" + integrity sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng== + +vscode-uri@^3.0.3: + version "3.0.7" + resolved "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz" + integrity sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA== + +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz" + integrity "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==" + dependencies: + makeerror "1.0.x" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + integrity "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==" + dependencies: + defaults "^1.0.3" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-pm-runs@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.1.0.tgz#35ccf7b1a0fce87bd8b92a478c9d045785d3bf35" + integrity sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA== + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0, wide-align@^1.1.2, wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + +ws@7.5.9: + version "7.5.9" + resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^2.1.3: + version "2.2.1" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz" + integrity sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw== + +yazl@^2.5.1: + version "2.5.1" + resolved "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz" + integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw== + dependencies: + buffer-crc32 "~0.2.3" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From a09fe4894fe4d477f050c448567283560865b1da Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 10 Feb 2023 22:29:33 -0700 Subject: [PATCH 135/233] Durp --- core/activitypub/actor.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index c2d94caa0..b5427b4e6 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -63,6 +63,11 @@ module.exports = class Actor extends ActivityPubObject { return true; } + static fromJsonString(s) { + const obj = ActivityPubObject.fromJsonString(s); + return new Actor(obj); + } + static get WellKnownActorTypes() { return ['Person', 'Group', 'Organization', 'Service', 'Application']; } @@ -220,7 +225,7 @@ module.exports = class Actor extends ActivityPubObject { apDb.run( `DELETE FROM actor_cache - WHERE DATETIME(timestamp) > DATETIME("now", "+${ActorCacheMaxAgeDays}");`, + WHERE DATETIME(timestamp, "+${ActorCacheMaxAgeDays} days") > DATETIME("now");`, err => { if (err) { // :TODO: log me From df55c3fa6d0720caa8785fcc6049f041dead3be7 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 11 Feb 2023 20:27:50 -0700 Subject: [PATCH 136/233] New MCI for AP subject, show subj and custom info format on config --- .../activitypub_user_config_main.ans | Bin 3177 -> 3193 bytes art/themes/luciano_blocktronics/theme.hjson | 6 ++ core/activitypub/note.js | 2 +- core/activitypub/user_config.js | 57 ++++++++++++++++++ core/activitypub/util.js | 7 ++- core/predefined_mci.js | 23 +++++++ core/toggle_menu_view.js | 4 ++ docs/_docs/art/mci.md | 1 + 8 files changed, 98 insertions(+), 2 deletions(-) diff --git a/art/themes/luciano_blocktronics/activitypub_user_config_main.ans b/art/themes/luciano_blocktronics/activitypub_user_config_main.ans index bd591ead34eb4a3c384ac3200cef33a9c46366ce..91c7f5f00b6641020f0a0da31180885c42c556aa 100644 GIT binary patch delta 46 zcmaDU@l#@h0Xvs;w6RgHYKV`a!Q@5`jmhV@IT`Oyu4R+hT*7{qg~ia2pJ%cwj|u=@ C_6@-R delta 31 ncmew<@ls-g0sCYFR&B=nlWW-|Hn*^!WnnQe{?9!*lt%>sx7`Yp diff --git a/art/themes/luciano_blocktronics/theme.hjson b/art/themes/luciano_blocktronics/theme.hjson index 361f7c3e3..45237c243 100644 --- a/art/themes/luciano_blocktronics/theme.hjson +++ b/art/themes/luciano_blocktronics/theme.hjson @@ -430,6 +430,9 @@ // :TODO: move this to the right area, rename, etc. mainMenuActivityPubUserConfig: { + config: { + mainInfoFormat10: "{subject}" + } 0: { mci: { TM1: { @@ -459,6 +462,9 @@ TM8: { focusTextStyle: first lower } + TL10: { + width: 40 + } } } } diff --git a/core/activitypub/note.js b/core/activitypub/note.js index 1d80ed790..185e750fa 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -270,7 +270,7 @@ module.exports = class Note extends ActivityPubObject { } // If the Note is marked sensitive, prefix the subject - if (this.sensitive) { + if (this.sensitive && message.subject.indexOf('[NSFW]') === -1) { message.subject = `[NSFW] ${message.subject}`; } diff --git a/core/activitypub/user_config.js b/core/activitypub/user_config.js index 895253878..220d7f552 100644 --- a/core/activitypub/user_config.js +++ b/core/activitypub/user_config.js @@ -1,6 +1,8 @@ const { MenuModule } = require('../menu_module'); const ActivityPubSettings = require('./settings'); const { Errors } = require('../enig_error'); +const { getServer } = require('../listening_server'); +const { userNameToSubject } = require('./util'); // deps const async = require('async'); @@ -27,9 +29,20 @@ const MciViewIds = { icon: 6, manageImagesButton: 7, saveOrCancel: 8, + + customRangeStart: 10, }, }; +const EnabledViewGroup = [ + MciViewIds.main.manuallyApproveFollowersToggle, + MciViewIds.main.hideSocialGraphToggle, + MciViewIds.main.showRealNameToggle, + MciViewIds.main.image, + MciViewIds.main.icon, + MciViewIds.main.manageImagesButton, +]; + exports.getModule = class ActivityPubUserConfig extends MenuModule { constructor(options) { super(options); @@ -159,6 +172,14 @@ exports.getModule = class ActivityPubUserConfig extends MenuModule { truncate(apSettings.icon, { length: iconView.getWidth() }) ); + this._toggleEnabledViewGroup(); + this._updateCustomViews(); + + enabledToggleView.on('index update', () => { + this._toggleEnabledViewGroup(); + this._updateCustomViews(); + }); + return callback(null); }, ], @@ -167,4 +188,40 @@ exports.getModule = class ActivityPubUserConfig extends MenuModule { } ); } + + _toggleEnabledViewGroup() { + const enabledToggleView = this.getView('main', MciViewIds.main.enabledToggle); + EnabledViewGroup.forEach(id => { + const v = this.getView('main', id); + v.acceptsFocus = enabledToggleView.isTrue(); + }); + } + + _updateCustomViews() { + const enabledToggleView = this.getView('main', MciViewIds.main.enabledToggle); + const ws = this._webServer(); + const enabled = enabledToggleView.isTrue(); + const formatObj = { + enabled, + status: enabled ? 'enabled' : 'disabled', + subject: enabled + ? ws + ? userNameToSubject(this.client.user.username, ws) + : 'N/A' + : '', + }; + + this.updateCustomViewTextsWithFilter( + 'main', + MciViewIds.main.customRangeStart, + formatObj + ); + } + + _webServer() { + if (undefined === this.webServer) { + this.webServer = getServer('codes.l33t.enigma.web.server'); + } + return this.webServer ? this.webServer.instance : null; + } }; diff --git a/core/activitypub/util.js b/core/activitypub/util.js index 88e249ff2..9b1c6eac5 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -26,6 +26,7 @@ exports.messageBodyToHtml = messageBodyToHtml; exports.messageToHtml = messageToHtml; exports.htmlToMessageBody = htmlToMessageBody; exports.userNameFromSubject = userNameFromSubject; +exports.userNameToSubject = userNameToSubject; exports.extractMessageMetadata = extractMessageMetadata; exports.recipientIdsFromObject = recipientIdsFromObject; exports.sendFollowRequest = sendFollowRequest; @@ -144,7 +145,7 @@ function getUserProfileTemplatedBody( const varMap = { ACTOR_OBJ: JSON.stringify(userAsActor), - SUBJECT: `@${user.username}@${webServer.getDomain()}`, + SUBJECT: userNameToSubject(user.username, webServer), INBOX: userAsActor.inbox, SHARED_INBOX: userAsActor.endpoints.sharedInbox, OUTBOX: userAsActor.outbox, @@ -228,6 +229,10 @@ function userNameFromSubject(subject) { return subject.replace(/^acct:(.+)$/, '$1'); } +function userNameToSubject(userName, webServer) { + return `@${userName}@${webServer.getDomain()}`; +} + function extractMessageMetadata(body) { const metadata = { mentions: new Set(), hashTags: new Set() }; diff --git a/core/predefined_mci.js b/core/predefined_mci.js index 01d81d907..321daec36 100644 --- a/core/predefined_mci.js +++ b/core/predefined_mci.js @@ -13,6 +13,9 @@ const ANSI = require('./ansi_term.js'); const UserProps = require('./user_property.js'); const SysProps = require('./system_property.js'); const SysLogKeys = require('./system_log.js'); +const ActivityPubSettings = require('./activitypub/settings'); +const { userNameToSubject } = require('./activitypub/util'); +const { getServer } = require('./listening_server'); // deps const packageJson = require('../package.json'); @@ -82,6 +85,15 @@ function userStatAsCountString(client, statName, defaultValue) { return toNumberWithCommas(value); } +// lazy cache +let cachedWebServer; +function getWebServer() { + if (undefined === cachedWebServer) { + cachedWebServer = getServer('codes.l33t.enigma.web.server'); + } + return cachedWebServer ? cachedWebServer.instance : null; +} + const PREDEFINED_MCI_GENERATORS = { // // Board @@ -133,6 +145,17 @@ const PREDEFINED_MCI_GENERATORS = { UR: function realName(client) { return userStatAsString(client, UserProps.RealName, ''); }, + AS: function activityPubSubjectName(client) { + const activityPubSettings = ActivityPubSettings.fromUser(client.user); + if (!activityPubSettings.enabled) { + return '(disabled)'; + } + const webServer = getWebServer(); + if (!webServer) { + return 'N/A'; + } + return userNameToSubject(client.user.username, webServer); + }, LO: function location(client) { return userStatAsString(client, UserProps.Location, ''); }, diff --git a/core/toggle_menu_view.js b/core/toggle_menu_view.js index ad0961528..0e70b94ba 100644 --- a/core/toggle_menu_view.js +++ b/core/toggle_menu_view.js @@ -87,6 +87,10 @@ ToggleMenuView.prototype.setFalse = function () { this.updateSelection(); }; +ToggleMenuView.prototype.isTrue = function () { + return this.focusedItemIndex === 0; +}; + ToggleMenuView.prototype.setFromBoolean = function (bool) { return bool ? this.setTrue() : this.setFalse(); }; diff --git a/docs/_docs/art/mci.md b/docs/_docs/art/mci.md index c1444f186..15b7b6733 100644 --- a/docs/_docs/art/mci.md +++ b/docs/_docs/art/mci.md @@ -39,6 +39,7 @@ There are many predefined MCI codes that can be used anywhere on the system (pla | `UI` | Current user's user ID | | `UG` | Current user's group membership(s) | | `UR` | Current user's real name | +| `AS` | ActivityPub subject, ie: "@SomeUser@yourhost.com", "(disabled)" if AP is not enabled for the user | | `LO` | Current user's location | | `UA` | Current user's age | | `BD` | Current user's birthday (using theme date format) | From b577c1b847c72714b1bd77d3b372befb461f9595 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Sun, 12 Feb 2023 13:38:52 -0600 Subject: [PATCH 137/233] Added default connection timeout and new config option outbound.connectionTimeoutMilliseconds --- core/http_util.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/core/http_util.js b/core/http_util.js index d7bf57a85..b7b01437c 100644 --- a/core/http_util.js +++ b/core/http_util.js @@ -1,10 +1,14 @@ const { Errors } = require('./enig_error.js'); // deps -const { isString, isObject, truncate } = require('lodash'); +const { isString, isObject, truncate, get, has } = require('lodash'); const https = require('https'); const httpSignature = require('http-signature'); const crypto = require('crypto'); +const Config = require('./config.js').get; + +const TimeoutConfigPath = 'outbound.connectionTimeoutMilliseconds'; +const DefaultTimeoutMilliseconds = 5000; exports.getJson = getJson; exports.postJson = postJson; @@ -56,6 +60,15 @@ function postJson(url, json, options, cb) { } function _makeRequest(url, options, cb) { + let defaultTimeout = DefaultTimeoutMilliseconds; + // Only set to config value if it has one, this allows us to set it + // to zero, but still have a default if none is set + if (has(Config(), TimeoutConfigPath)) { + defaultTimeout = get(Config(), TimeoutConfigPath); + } + + options = Object.assign({}, options, { timeout: defaultTimeout }); // Let options override default timeout if needed + if (options.body) { options.headers['Content-Length'] = Buffer.from(options.body).length; From 194a5b012e428233846db726be83f041e3bbb91d Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 12 Feb 2023 17:48:34 -0700 Subject: [PATCH 138/233] Add image URL editor for AcitvityPub user config --- .../activitypub_user_config_images.ans | Bin 0 -> 2151 bytes art/themes/luciano_blocktronics/theme.hjson | 15 +++ core/activitypub/user_config.js | 95 ++++++++++++++++-- core/file_area_list.js | 4 +- core/menu_stack.js | 8 +- 5 files changed, 107 insertions(+), 15 deletions(-) create mode 100644 art/themes/luciano_blocktronics/activitypub_user_config_images.ans diff --git a/art/themes/luciano_blocktronics/activitypub_user_config_images.ans b/art/themes/luciano_blocktronics/activitypub_user_config_images.ans new file mode 100644 index 0000000000000000000000000000000000000000..b61239faa7d2ffd2abfcf6ca4f42e8026a5d6d74 GIT binary patch literal 2151 zcmds2!D_-l5Y=7^enF|1xd`noCPks1q67&vQfd^6r!+<>brYxx?YAb7FKOv?b~iR_ z0wJ}R?!ovbGw;pp&TQHXjkTb?=nf2x#Q^wM8yGtKe7lg3i221d^ z;K7sUzpP)QeTZey30{9^U!HQ>Y8W7&Wg@RpgR9!;296gHcVwyf!tst>S?y^dXs zVV%&j7+EBz&eBfOYLi(;tJ)PAye4S=#aZT|8e1P1tH_S2&zp}FDkr}$sG~csV~{|9 zaMNQP$t&)!gsYU7CNZrfO`!HCPZWS0NXHqe?=Gk2Y-DL#K9NFXhEe#=qW!k;?ZK#P dx}oV^{o}mRXg2Q~7Y$lx_RxX(*yJet{Q^i{urvSw literal 0 HcmV?d00001 diff --git a/art/themes/luciano_blocktronics/theme.hjson b/art/themes/luciano_blocktronics/theme.hjson index 45237c243..934ef6f77 100644 --- a/art/themes/luciano_blocktronics/theme.hjson +++ b/art/themes/luciano_blocktronics/theme.hjson @@ -467,6 +467,21 @@ } } } + 1: { + mci: { + ML1: { + height: 4 + width: 70 + } + ML2: { + height: 4 + width: 70 + } + TM3: { + focusTextStyle: first lower + } + } + } } // :TODO: move this to the right area, rename, etc. diff --git a/core/activitypub/user_config.js b/core/activitypub/user_config.js index 220d7f552..09d1386be 100644 --- a/core/activitypub/user_config.js +++ b/core/activitypub/user_config.js @@ -25,21 +25,26 @@ const MciViewIds = { manuallyApproveFollowersToggle: 2, hideSocialGraphToggle: 3, showRealNameToggle: 4, - image: 5, - icon: 6, + imageUrl: 5, + iconUrl: 6, manageImagesButton: 7, saveOrCancel: 8, customRangeStart: 10, }, + images: { + imageUrl: 1, + iconUrl: 2, + saveOrCancel: 3, + }, }; const EnabledViewGroup = [ MciViewIds.main.manuallyApproveFollowersToggle, MciViewIds.main.hideSocialGraphToggle, MciViewIds.main.showRealNameToggle, - MciViewIds.main.image, - MciViewIds.main.icon, + MciViewIds.main.imageUrl, + MciViewIds.main.iconUrl, MciViewIds.main.manageImagesButton, ]; @@ -52,7 +57,7 @@ exports.getModule = class ActivityPubUserConfig extends MenuModule { }); this.menuMethods = { - submit: (formData, extraArgs, cb) => { + mainSubmit: (formData, extraArgs, cb) => { switch (formData.submitId) { case MciViewIds.main.manageImagesButton: return this._manageImagesButton(cb); @@ -70,6 +75,13 @@ exports.getModule = class ActivityPubUserConfig extends MenuModule { ); } }, + imagesSubmit: (formData, extraArgs, cb) => { + const save = get(formData, 'value.imagesSaveOrCancel') === 0; + return save ? this._saveImages(formData.value, cb) : this._backToMain(cb); + }, + backToMain: (formData, extraArgs, cb) => { + return this._backToMain(cb); + }, }; } @@ -89,8 +101,14 @@ exports.getModule = class ActivityPubUserConfig extends MenuModule { ); } + _backToMain(cb) { + this.viewControllers.images.setFocus(false); + return this._displayMainPage(true, cb); + } + _manageImagesButton(cb) { - return cb(null); + this.viewControllers.main.setFocus(false); + return this._displayImagesPage(true, cb); } _save(values, cb) { @@ -126,6 +144,26 @@ exports.getModule = class ActivityPubUserConfig extends MenuModule { }); } + _saveImages(values, cb) { + const apSettings = ActivityPubSettings.fromUser(this.client.user); + apSettings.image = values.imageUrl.trim(); + apSettings.icon = values.iconUrl.trim(); + + apSettings.persistToUserProperties(this.client.user, err => { + if (err) { + if (err) { + const user = this.client.user; + this.client.log.warn( + { error: err.message, user: user.username }, + `Failed saving ActivityPub settings for user "${user.username}"` + ); + } + } + + return this._backToMain(cb); + }); + } + _displayMainPage(clearScreen, cb) { async.series( [ @@ -140,7 +178,9 @@ exports.getModule = class ActivityPubUserConfig extends MenuModule { callback => { return this.validateMCIByViewIds( 'main', - Object.values(MciViewIds.main), + Object.values(MciViewIds.main).filter( + i => i !== MciViewIds.main.customRangeStart + ), callback ); }, @@ -155,8 +195,8 @@ exports.getModule = class ActivityPubUserConfig extends MenuModule { MciViewIds.main.hideSocialGraphToggle ); const showRealNameToggleView = v(MciViewIds.main.showRealNameToggle); - const imageView = v(MciViewIds.main.image); - const iconView = v(MciViewIds.main.icon); + const imageView = v(MciViewIds.main.imageUrl); + const iconView = v(MciViewIds.main.iconUrl); const apSettings = ActivityPubSettings.fromUser(this.client.user); enabledToggleView.setFromBoolean(apSettings.enabled); @@ -189,6 +229,43 @@ exports.getModule = class ActivityPubUserConfig extends MenuModule { ); } + _displayImagesPage(clearScreen, cb) { + async.series( + [ + callback => { + return this.displayArtAndPrepViewController( + 'images', + FormIds.images, + { clearScreen }, + callback + ); + }, + callback => { + return this.validateMCIByViewIds( + 'images', + Object.values(MciViewIds.images), + callback + ); + }, + callback => { + const v = id => this.getView('images', id); + + const imageView = v(MciViewIds.images.imageUrl); + const iconView = v(MciViewIds.images.iconUrl); + + const apSettings = ActivityPubSettings.fromUser(this.client.user); + imageView.setText(apSettings.image); + iconView.setText(apSettings.icon); + + return callback(null); + }, + ], + err => { + return cb(err); + } + ); + } + _toggleEnabledViewGroup() { const enabledToggleView = this.getView('main', MciViewIds.main.enabledToggle); EnabledViewGroup.forEach(id => { diff --git a/core/file_area_list.js b/core/file_area_list.js index 9a778468e..13e7eed6b 100644 --- a/core/file_area_list.js +++ b/core/file_area_list.js @@ -3,9 +3,7 @@ // ENiGMA½ const MenuModule = require('./menu_module.js').MenuModule; -const ViewController = require('./view_controller.js').ViewController; const ansi = require('./ansi_term.js'); -const theme = require('./theme.js'); const FileEntry = require('./file_entry.js'); const stringFormat = require('./string_format.js'); const FileArea = require('./file_base_area.js'); @@ -344,7 +342,7 @@ exports.getModule = class FileAreaList extends MenuModule { ); } - displayArtDataPrepCallback(name, artData, viewController) { + displayArtDataPrepCallback(name, artData) { if (name === 'details') { try { this.detailsInfoArea = { diff --git a/core/menu_stack.js b/core/menu_stack.js index 961fdc7e2..8ab4a4e8d 100644 --- a/core/menu_stack.js +++ b/core/menu_stack.js @@ -81,6 +81,8 @@ module.exports = class MenuStack { prev(cb) { const menuResult = this.top().instance.getMenuResult(); + const currentModuleInfo = this.top(); + // :TODO: leave() should really take a cb... this.pop().instance.leave(); // leave & remove current @@ -91,6 +93,7 @@ module.exports = class MenuStack { extraArgs: previousModuleInfo.extraArgs, savedState: previousModuleInfo.savedState, lastMenuResult: menuResult, + currentModuleInfo, }; return this.goto(previousModuleInfo.name, opts, cb); @@ -102,14 +105,13 @@ module.exports = class MenuStack { } goto(name, options, cb) { - const currentModuleInfo = this.top(); - if (!cb && _.isFunction(options)) { cb = options; options = {}; } - options = options || {}; + + const currentModuleInfo = options.currentModuleInfo || this.top(); const self = this; if (currentModuleInfo && name === currentModuleInfo.name) { From 69cb0c5907437c82edd4866ce40661e2a8624037 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 12 Feb 2023 17:51:36 -0700 Subject: [PATCH 139/233] default timeout --- core/http_util.js | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/core/http_util.js b/core/http_util.js index b7b01437c..98f8936ba 100644 --- a/core/http_util.js +++ b/core/http_util.js @@ -1,13 +1,11 @@ const { Errors } = require('./enig_error.js'); // deps -const { isString, isObject, truncate, get, has } = require('lodash'); +const { isString, isObject, truncate } = require('lodash'); const https = require('https'); const httpSignature = require('http-signature'); const crypto = require('crypto'); -const Config = require('./config.js').get; -const TimeoutConfigPath = 'outbound.connectionTimeoutMilliseconds'; const DefaultTimeoutMilliseconds = 5000; exports.getJson = getJson; @@ -60,14 +58,7 @@ function postJson(url, json, options, cb) { } function _makeRequest(url, options, cb) { - let defaultTimeout = DefaultTimeoutMilliseconds; - // Only set to config value if it has one, this allows us to set it - // to zero, but still have a default if none is set - if (has(Config(), TimeoutConfigPath)) { - defaultTimeout = get(Config(), TimeoutConfigPath); - } - - options = Object.assign({}, options, { timeout: defaultTimeout }); // Let options override default timeout if needed + options = Object.assign({}, { timeout: DefaultTimeoutMilliseconds }, options); if (options.body) { options.headers['Content-Length'] = Buffer.from(options.body).length; From 2aec375bee980a0195e3cab8a6fb962d844a7e08 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 17 Feb 2023 20:53:57 -0700 Subject: [PATCH 140/233] Driveby: getItem(x) vs getItems()[x] --- core/wfc.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/wfc.js b/core/wfc.js index 13ef6cde7..fe16f7eae 100644 --- a/core/wfc.js +++ b/core/wfc.js @@ -116,7 +116,7 @@ exports.getModule = class WaitingForCallerModule extends MenuModule { ); if (nodeStatusSelectionView) { - const item = nodeStatusView.getItems()[index]; + const item = nodeStatusView.getItem(index); this._updateNodeStatusSelection(nodeStatusSelectionView, item); } } @@ -200,7 +200,7 @@ exports.getModule = class WaitingForCallerModule extends MenuModule { if (nodeStatusView && nodeStatusSelectionView) { nodeStatusView.on('index update', index => { - const item = nodeStatusView.getItems()[index]; + const item = nodeStatusView.getItem(index); this._updateNodeStatusSelection( nodeStatusSelectionView, item @@ -405,7 +405,7 @@ exports.getModule = class WaitingForCallerModule extends MenuModule { if (nodeStatusSelectionView) { const nodeStatusView = this.getView('main', MciViewIds.main.nodeStatus); if (nodeStatusView) { - const item = nodeStatusView.getItems()[this.selectedNodeStatusIndex]; + const item = nodeStatusView.getItem(this.selectedNodeStatusIndex); this._updateNodeStatusSelection(nodeStatusSelectionView, item); } } @@ -596,7 +596,7 @@ exports.getModule = class WaitingForCallerModule extends MenuModule { MciViewIds.main.selectedNodeStatusInfo ); if (nodeStatusSelectionView) { - const item = nodeStatusView.getItems()[0]; + const item = nodeStatusView.getItem(0); this._updateNodeStatusSelection(nodeStatusSelectionView, item); } } From e8c42a9b2e4515d704d71d5fe1eb137c36076b8b Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 17 Feb 2023 21:46:24 -0700 Subject: [PATCH 141/233] ActivityPub Social Manager, and many updates to Search functionality * Manage Following/Followers (WIP, bugs, some missing functionality) * Search for Actors (WIP, some bugs) --- .../activitypub_actor_search_main.ans | Bin 2834 -> 2839 bytes .../activitypub_actor_view.ans | Bin 3326 -> 3370 bytes .../activitypub_social_manager.ans | Bin 0 -> 2077 bytes art/themes/luciano_blocktronics/theme.hjson | 45 ++- core/activitypub/actor.js | 9 +- core/activitypub/actor_search.js | 221 ++++++++--- core/activitypub/collection.js | 95 ++++- core/activitypub/const.js | 10 + core/activitypub/follow_util.js | 64 +++ core/activitypub/social_manager.js | 372 ++++++++++++++++++ core/activitypub/user_config.js | 5 +- core/activitypub/util.js | 24 +- .../content/web_handlers/activitypub.js | 207 ++++++++-- core/vertical_menu_view.js | 1 - 14 files changed, 921 insertions(+), 132 deletions(-) create mode 100644 art/themes/luciano_blocktronics/activitypub_social_manager.ans create mode 100644 core/activitypub/follow_util.js create mode 100644 core/activitypub/social_manager.js diff --git a/art/themes/luciano_blocktronics/activitypub_actor_search_main.ans b/art/themes/luciano_blocktronics/activitypub_actor_search_main.ans index 711255cc8d3deb85ceff110a695dc422556f5143..1f7a6074d7f19ed397b482f455114215d406c6e1 100644 GIT binary patch delta 77 zcmbOvHeGB(FB_|Lw6S^aS zo10iv3HBh+cAz6&fR1FJoWaSb1@`l;BVb>dqolMOgo zMD~OH!UYL0gWUUfK-|eioH3IV*jQOM19_9Lai$$sHIz(#HcTI>n3m=&ZbcXA@D jG~)rNsXVMVp<G=vtiOJbOLG#?n20Sv8pK*sz=40pQxqn9iqQ)#Ybn;rZYBsmhoE!ze z$s5^Zfkv@T4qy*vb4e^oRS1~8lHE(#H!-g?F(;=|!LgvAD8DSVSix;F8;294+hk7; zeIQxM5h?_<#4Ic24OqkyAqivxB^PoiO}6FX-~5bQhLPF8c*bAHo7bV}9oO8aDeoZ?|6SYBS*&A6V$^al!b7VpE!Eys+JAu1!gU8u?4E%e?wQqrE z-`Ug2L%FrHw1$X4j|b(2XyQ9$GZDBEm~fSZQCtJ^8j36@B^+uhXn0KhjSN@!XATty zrFx1tn>Ye%9LM-|Z<)EzeoI(g8<&ynsrPDSb7p|+02Xq45Us)#KZAI?OTQxDMR63S z(Gy^hZL-Gulc~V!Cnf|lst-VS;q@w;PfWXB0GpRjt2E<&w(_qktee~7#Lj4LrAf{! zsfhQYglHs%3jJK_RwQSKP(!8>!oQ%#b&UmKiBXqj=Y`bx8q`&YBqMGf{=VvA6?fje zt}0ais4Ez4d4fWP+`t3W4Lpk$GaU6rRJ&KSd~$mY!djFHkXoh4Gdl7j2iiX>PE9xn z9b=?@ckSDAXJVR)YUGri;N%VAmz}&I#n6P7348tbOT%cjX2z94$Avrgz+!5%sC<3` D-;bN* literal 0 HcmV?d00001 diff --git a/art/themes/luciano_blocktronics/theme.hjson b/art/themes/luciano_blocktronics/theme.hjson index 934ef6f77..f1af5eb9d 100644 --- a/art/themes/luciano_blocktronics/theme.hjson +++ b/art/themes/luciano_blocktronics/theme.hjson @@ -484,16 +484,42 @@ } } + activityPubFollowingManager: { + config: { + selectedActorInfoFormat: "|00|15{preferredUsername}\n|02{name}\n{summary}" + statusIndicatorEnabled: "|00|10√" + staticIndicatorDisabled: "|00|12X" + } + 0: { + mci: { + VM1: { + height: 15 + width: 30 + itemFormat: "|00|03{subject}|00 {statusIndicator}" + focusItemFormat: "|00|19|15{subject}|00 {statusIndicator}" + } + MT2: { + height: 15 + width: 32 + } + TM3: { + focusTextStyle: first upper + } + } + } + } + // :TODO: move this to the right area, rename, etc. mainMenuActivityPubActorSearch: { + config: { + followingIndicator: "|00|14> |10Following|08!|14 <" + notFollowingIndicator: "|00|14> |02Not Following|14 <" + viewInfoFormat10: "{actorFollowingIndicator}" + } 0: { mci: { TL1: { width: 70 - } - BT2: { - width: 20 - focusTextStyle: upper submit: true } } @@ -524,14 +550,9 @@ height: 3 mode: preview } - BT8: { - focusTextStyle: upper - submit: true - } - BT9: { - text: back - focusTextStyle: upper - submit: true + TL10: { + width: 24 + } } } diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index b5427b4e6..1d49752af 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -11,7 +11,7 @@ const { queryWebFinger } = require('../webfinger'); const EnigAssert = require('../enigma_assert'); const ActivityPubSettings = require('./settings'); const ActivityPubObject = require('./object'); -const { ActivityStreamMediaType } = require('./const'); +const { ActivityStreamMediaType, Collections } = require('./const'); const apDb = require('../database').dbs.activitypub; const Config = require('../config').get; @@ -73,7 +73,12 @@ module.exports = class Actor extends ActivityPubObject { } static get WellKnownLinkTypes() { - return ['inbox', 'outbox', 'following', 'followers']; + return [ + Collections.Inbox, + Collections.Outbox, + Collections.Following, + Collections.Followers, + ]; } static fromLocalUser(user, webServer, cb) { diff --git a/core/activitypub/actor_search.js b/core/activitypub/actor_search.js index 6ce5c5634..36045e45c 100644 --- a/core/activitypub/actor_search.js +++ b/core/activitypub/actor_search.js @@ -3,11 +3,15 @@ const { Errors } = require('../enig_error'); const Actor = require('../activitypub/actor'); const moment = require('moment'); const { htmlToMessageBody } = require('./util'); +const { Collections } = require('./const'); const Collection = require('./collection'); +const EnigAssert = require('../enigma_assert'); +const { sendFollowRequest, sendUnfollowRequest } = require('./follow_util'); +const { getServer } = require('../listening_server'); // deps const async = require('async'); -const { get, truncate, isEmpty } = require('lodash'); +const { get, isEmpty, isObject, cloneDeep } = require('lodash'); exports.moduleInfo = { name: 'ActivityPub Actor Search', @@ -22,8 +26,7 @@ const FormIds = { const MciViewIds = { main: { - searchUrl: 1, - searchButton: 2, + searchQuery: 1, }, view: { userName: 1, @@ -33,8 +36,8 @@ const MciViewIds = { numberFollowers: 5, numberFollowing: 6, summary: 7, - followButton: 8, - cancelButton: 9, + + customRangeStart: 10, }, }; @@ -47,27 +50,34 @@ exports.getModule = class ActivityPubActorSearch extends MenuModule { }); this.menuMethods = { - submit: (formData, extraArgs, cb) => { - switch (formData.submitId) { - case MciViewIds.main.searchUrl: { - return this._search(formData.value, cb); - } - case MciViewIds.main.searchButton: { - return this._search(formData.value, cb); - } - - default: - cb( - Errors.UnexpectedState( - `Unexpected submitId: ${formData.submitId}` - ) + search: (formData, extraArgs, cb) => { + return this._search(formData.value, cb); + }, + toggleFollowKeyPressed: (formData, extraArgs, cb) => { + return this._toggleFollowStatus(err => { + if (err) { + this.client.log.error( + { error: err.message }, + 'Failed to toggle follow status' ); - } + } + return cb(err); + }); + }, + backKeyPressed: (formData, extraArgs, cb) => { + return this._displayMainPage(true, cb); }, }; } initSequence() { + this.webServer = getServer('codes.l33t.enigma.web.server'); + if (!this.webServer) { + this.client.log('Could not get Web server'); + return this.prevMenu(); + } + this.webServer = this.webServer.instance; + async.series( [ callback => { @@ -84,7 +94,7 @@ exports.getModule = class ActivityPubActorSearch extends MenuModule { } _search(values, cb) { - const searchString = values['searchUrl'].trim(); + const searchString = values.searchQuery.trim(); //TODO: Handle empty searchString Actor.fromId(searchString, (err, remoteActor) => { if (err) { @@ -95,11 +105,15 @@ exports.getModule = class ActivityPubActorSearch extends MenuModule { // TODO: Add error to page for failure to find actor return this._displayMainPage(true, cb); } - return this._displayListScreen(remoteActor, cb); + + this.selectedActorInfo = remoteActor; + return this._displayViewPage(cb); }); } - _displayListScreen(remoteActor, cb) { + _displayViewPage(cb) { + EnigAssert(isObject(this.selectedActorInfo), 'No Actor selected!'); + async.series( [ callback => { @@ -122,59 +136,65 @@ exports.getModule = class ActivityPubActorSearch extends MenuModule { callback => { return this.validateMCIByViewIds( 'view', - Object.values(MciViewIds.view), + Object.values(MciViewIds.view).filter( + id => id !== MciViewIds.view.customRangeStart + ), callback ); }, + callback => { + this._updateCollectionItemCount(Collections.Following, () => { + return this._updateCollectionItemCount( + Collections.Followers, + callback + ); + }); + }, callback => { const v = id => this.getView('view', id); const nameView = v(MciViewIds.view.userName); - nameView.setText( - truncate(remoteActor.preferredUsername, { - length: nameView.getWidth(), - }) - ); + nameView.setText(this.selectedActorInfo.preferredUsername); const fullNameView = v(MciViewIds.view.fullName); - fullNameView.setText( - truncate(remoteActor.name, { length: fullNameView.getWidth() }) - ); + fullNameView.setText(this.selectedActorInfo.name); const datePublishedView = v(MciViewIds.view.datePublished); - if (isEmpty(remoteActor.published)) { + if (isEmpty(this.selectedActorInfo.published)) { datePublishedView.setText('Not available.'); } else { - const publishedDate = moment(remoteActor.published); + const publishedDate = moment(this.selectedActorInfo.published); datePublishedView.setText( publishedDate.format(this.getDateFormat()) ); } const manualFollowersView = v(MciViewIds.view.manualFollowers); - manualFollowersView.setText(remoteActor.manuallyApprovesFollowers); + manualFollowersView.setText( + this.selectedActorInfo.manuallyApprovesFollowers + ); const followerCountView = v(MciViewIds.view.numberFollowers); - this._updateViewWithCollectionItemCount( - remoteActor.followers, - followerCountView + followerCountView.setText( + this.selectedActorInfo._followersCount > -1 + ? this.selectedActorInfo._followersCount + : '--' ); const followingCountView = v(MciViewIds.view.numberFollowing); - this._updateViewWithCollectionItemCount( - remoteActor.following, - followingCountView + followingCountView.setText( + this.selectedActorInfo._followingCount > -1 + ? this.selectedActorInfo._followingCount + : '--' ); const summaryView = v(MciViewIds.view.summary); - summaryView.setText(htmlToMessageBody(remoteActor.summary)); + summaryView.setText( + htmlToMessageBody(this.selectedActorInfo.summary) + ); summaryView.redraw(); - const followButtonView = v(MciViewIds.view.followButton); - // TODO: FIXME: Real status - followButtonView.setText('follow'); - - return callback(null); + return this._setFollowStatus(callback); }, ], err => { @@ -183,6 +203,102 @@ exports.getModule = class ActivityPubActorSearch extends MenuModule { ); } + _setFollowStatus(cb) { + Collection.ownedObjectByNameAndId( + Collections.Following, + this.client.user, + this.selectedActorInfo.id, + (err, followingActorEntry) => { + if (err) { + return cb(err); + } + + this.selectedActorInfo._isFollowing = followingActorEntry ? true : false; + this.selectedActorInfo._followingIndicator = + this._getFollowingIndicator(); + + this.updateCustomViewTextsWithFilter( + 'view', + MciViewIds.view.customRangeStart, + this._getCustomInfoFormatObject() + ); + + return cb(null); + } + ); + } + + _toggleFollowStatus(cb) { + // catch early key presses + if (!this.selectedActorInfo) { + return; + } + + this.selectedActorInfo._isFollowing = !this.selectedActorInfo._isFollowing; + this.selectedActorInfo._followingIndicator = this._getFollowingIndicator(); + + const finish = e => { + this.updateCustomViewTextsWithFilter( + 'view', + MciViewIds.view.customRangeStart, + this._getCustomInfoFormatObject() + ); + + return cb(e); + }; + + const actor = this._getSelectedActor(); // actor info -> actor + return this.selectedActorInfo._isFollowing + ? sendFollowRequest(this.client.user, actor, this.webServer, finish) + : sendUnfollowRequest(this.client.user, actor, this.webServer, finish); + } + + _getSelectedActor() { + const actor = cloneDeep(this.selectedActorInfo); + + // nuke our added properties + delete actor._isFollowing; + delete actor._followingIndicator; + delete actor._followingCount; + delete actor._followersCount; + + return actor; + } + + _getFollowingIndicator() { + return this.selectedActorInfo._isFollowing + ? this.config.followingIndicator || 'Following' + : this.config.notFollowingIndicator || 'Not following'; + } + + _getCustomInfoFormatObject() { + const formatObj = { + followingCount: this.selectedActorInfo._followingCount, + followerCount: this.selectedActorInfo._followersCount, + }; + + const v = f => { + return this.selectedActorInfo[f] || ''; + }; + + Object.assign(formatObj, { + actorId: v('id'), + actorSubject: v('subject'), + actorType: v('type'), + actorName: v('name'), + actorSummary: v('summary'), + actorPreferredUsername: v('preferredUsername'), + actorUrl: v('url'), + actorImage: v('image'), + actorIcon: v('icon'), + actorFollowing: this.selectedActorInfo._isFollowing, + actorFollowingIndicator: v('_followingIndicator'), + text: v('name'), + }); + + return formatObj; + } + _displayMainPage(clearScreen, cb) { async.series( [ @@ -208,17 +324,20 @@ exports.getModule = class ActivityPubActorSearch extends MenuModule { ); } - _updateViewWithCollectionItemCount(collectionUrl, view) { + _updateCollectionItemCount(collectionName, cb) { + const collectionUrl = this.selectedActorInfo[collectionName]; this._retrieveCountFromCollectionUrl(collectionUrl, (err, count) => { if (err) { this.client.log.warn( { err: err }, `Unable to get Collection count for ${collectionUrl}` ); - view.setText('--'); + this.selectedActorInfo[`_${collectionName}Count`] = -1; } else { - view.setText(count); + this.selectedActorInfo[`_${collectionName}Count`] = count; } + + return cb(null); }); } @@ -229,7 +348,7 @@ exports.getModule = class ActivityPubActorSearch extends MenuModule { } Collection.getRemoteCollectionStats(collectionUrl, (err, stats) => { - return cb(err, stats.totalItems); + return cb(err, err ? null : stats.totalItems); }); } }; diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index d613a0b9d..ad94a61c3 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -7,6 +7,7 @@ const { Errors } = require('../enig_error.js'); const { PublicCollectionId: APPublicCollectionId, ActivityStreamMediaType, + Collections, } = require('./const'); const UserProps = require('../user_property'); const { getJson } = require('../http_util'); @@ -55,7 +56,7 @@ module.exports = class Collection extends ActivityPubObject { static followers(collectionId, page, cb) { return Collection.publicOrderedById( - 'followers', + Collections.Followers, collectionId, page, e => e.id, @@ -65,7 +66,7 @@ module.exports = class Collection extends ActivityPubObject { static following(collectionId, page, cb) { return Collection.publicOrderedById( - 'following', + Collections.Following, collectionId, page, e => e.id, @@ -74,13 +75,19 @@ module.exports = class Collection extends ActivityPubObject { } static outbox(collectionId, page, cb) { - return Collection.publicOrderedById('outbox', collectionId, page, null, cb); + return Collection.publicOrderedById( + Collections.Outbox, + collectionId, + page, + null, + cb + ); } static addFollower(owningUser, followingActor, webServer, ignoreDupes, cb) { const collectionId = Endpoints.followers(webServer, owningUser); return Collection.addToCollection( - 'followers', + Collections.Followers, owningUser, collectionId, followingActor.id, // Actor following owningUser @@ -95,7 +102,7 @@ module.exports = class Collection extends ActivityPubObject { const collectionId = Endpoints.makeUserUrl(webServer, owningUser) + 'follow-requests'; return Collection.addToCollection( - 'follow-requests', + Collections.FollowRequests, owningUser, collectionId, requestingActor.id, // Actor requesting to follow owningUser @@ -109,7 +116,7 @@ module.exports = class Collection extends ActivityPubObject { static addFollowing(owningUser, followingActor, webServer, ignoreDupes, cb) { const collectionId = Endpoints.following(webServer, owningUser); return Collection.addToCollection( - 'following', + Collections.Following, owningUser, collectionId, followingActor.id, // Actor owningUser is following @@ -123,7 +130,7 @@ module.exports = class Collection extends ActivityPubObject { static addOutboxItem(owningUser, outboxItem, isPrivate, webServer, ignoreDupes, cb) { const collectionId = Endpoints.outbox(webServer, owningUser); return Collection.addToCollection( - 'outbox', + Collections.Outbox, owningUser, collectionId, outboxItem.id, @@ -137,7 +144,7 @@ module.exports = class Collection extends ActivityPubObject { static addInboxItem(inboxItem, owningUser, webServer, ignoreDupes, cb) { const collectionId = Endpoints.inbox(webServer, owningUser); return Collection.addToCollection( - 'inbox', + Collections.Inbox, owningUser, collectionId, inboxItem.id, @@ -150,7 +157,7 @@ module.exports = class Collection extends ActivityPubObject { static addSharedInboxItem(inboxItem, ignoreDupes, cb) { return Collection.addToCollection( - 'sharedInbox', + Collections.SharedInbox, null, // N/A Collection.PublicCollectionId, inboxItem.id, @@ -161,13 +168,79 @@ module.exports = class Collection extends ActivityPubObject { ); } - static objectById(objectId, cb) { + // Get Object(s) by ID; There may be multiples as they may be + // e.g. Actors belonging to multiple followers collections. + // This method also returns information about the objects + // and any items that can't be parsed + static objectsById(objectId, cb) { + apDb.all( + `SELECT name, timestamp, owner_actor_id, object_json, is_private + FROM collection + WHERE object_id = ?;`, + [objectId], + (err, rows) => { + if (err) { + return cb(err); + } + + const results = (rows || []).map(r => { + const info = { + info: this._rowToObjectInfo(r), + object: ActivityPubObject.fromJsonString(r.object_json), + }; + if (!info.object) { + info.raw = r.object_json; + } + return info; + }); + + return cb(null, results); + } + ); + } + + static ownedObjectByNameAndId(collectionName, owningUser, objectId, cb) { + const actorId = owningUser.getProperty(UserProps.ActivityPubActorId); + if (!actorId) { + return cb( + Errors.MissingProperty( + `User "${owningUser.username}" is missing property '${UserProps.ActivityPubActorId}'` + ) + ); + } + + apDb.get( + `SELECT name, timestamp, owner_actor_id, object_json, is_private + FROM collection + WHERE name = ? AND owner_actor_id = ? AND object_id = ? + LIMIT 1;`, + [collectionName, actorId, objectId], + (err, row) => { + if (err) { + return cb(err); + } + + if (!row) { + return cb(null, null); + } + + const obj = ActivityPubObject.fromJsonString(row.object_json); + if (!obj) { + return cb(Errors.Invalid('Failed to parse Object JSON')); + } + + return cb(null, obj, Collection._rowToObjectInfo(row)); + } + ); + } + + static objectByNameAndId(collectionName, objectId, cb) { apDb.get( `SELECT name, timestamp, owner_actor_id, object_json, is_private FROM collection WHERE name = ? AND object_id = ? LIMIT 1;`, - [objectId], + [collectionName, objectId], (err, row) => { if (err) { return cb(err); diff --git a/core/activitypub/const.js b/core/activitypub/const.js index 56221a035..751b2ea47 100644 --- a/core/activitypub/const.js +++ b/core/activitypub/const.js @@ -31,3 +31,13 @@ exports.HttpSignatureSignHeaders = [ 'digest', 'content-type', ]; + +const Collections = { + Following: 'following', + Followers: 'followers', + FollowRequests: 'followRequests', + Outbox: 'outbox', + Inbox: 'inbox', + SharedInbox: 'sharedInbox', +}; +exports.Collections = Collections; diff --git a/core/activitypub/follow_util.js b/core/activitypub/follow_util.js new file mode 100644 index 000000000..8256ea1e3 --- /dev/null +++ b/core/activitypub/follow_util.js @@ -0,0 +1,64 @@ +const { Collections, WellKnownActivity } = require('./const'); +const ActivityPubObject = require('./object'); +const UserProps = require('../user_property'); +const { Errors } = require('../enig_error'); +const Collection = require('./collection'); + +exports.sendFollowRequest = sendFollowRequest; +exports.sendUnfollowRequest = sendUnfollowRequest; + +function sendFollowRequest(fromUser, toActor, webServer, cb) { + const fromActorId = fromUser.getProperty(UserProps.ActivityPubActorId); + if (!fromActorId) { + return cb( + Errors.MissingProperty( + `User missing "${UserProps.ActivityPubActorId}" property` + ) + ); + } + + // We always add to the following collection; + // We expect an async follow up request to our server of + // Accept or Reject but it's not guaranteed + Collection.addFollowing(fromUser, toActor, webServer, true, err => { + if (err) { + return cb(err); + } + + const followRequest = new ActivityPubObject({ + id: ActivityPubObject.makeObjectId(webServer, 'follow'), + type: WellKnownActivity.Follow, + actor: fromActorId, + object: toActor.id, + }); + + return followRequest.sendTo(toActor.inbox, fromUser, webServer, cb); + }); +} + +function sendUnfollowRequest(fromUser, toActor, webServer, cb) { + const fromActorId = fromUser.getProperty(UserProps.ActivityPubActorId); + if (!fromActorId) { + return cb( + Errors.MissingProperty( + `User missing "${UserProps.ActivityPubActorId}" property` + ) + ); + } + + // Always remove from the local collection, notify the remote server + Collection.removeOwnedById(Collections.Following, fromUser, toActor.inbox, err => { + if (err) { + return cb(err); + } + + const undoRequest = new ActivityPubObject({ + id: ActivityPubObject.makeObjectId(webServer, 'undo'), + type: WellKnownActivity.Undo, + actor: fromActorId, + object: toActor.id, + }); + + return undoRequest.sendTo(toActor.inbox, fromUser, webServer, cb); + }); +} diff --git a/core/activitypub/social_manager.js b/core/activitypub/social_manager.js new file mode 100644 index 000000000..588fe3bf6 --- /dev/null +++ b/core/activitypub/social_manager.js @@ -0,0 +1,372 @@ +const { MenuModule } = require('../menu_module'); +const Collection = require('./collection'); +const { getServer } = require('../listening_server'); +const Endpoints = require('./endpoint'); +const Actor = require('./actor'); +const stringFormat = require('../string_format'); +const { pipeToAnsi } = require('../color_codes'); +const MultiLineEditTextView = + require('../multi_line_edit_text_view').MultiLineEditTextView; +const { sendFollowRequest, sendUnfollowRequest } = require('./follow_util'); +const { Collections } = require('./const'); + +// deps +const async = require('async'); +const { get, cloneDeep } = require('lodash'); + +exports.moduleInfo = { + name: 'ActivityPub Social Manager', + desc: 'Manages ActivityPub Actors the current user is following or being followed by.', + author: 'NuSkooler', +}; + +const FormIds = { + main: 0, +}; + +const MciViewIds = { + main: { + actorList: 1, + selectedActorInfo: 2, + navMenu: 3, + + customRangeStart: 10, + }, +}; + +exports.getModule = class ActivityPubFollowingManager extends MenuModule { + constructor(options) { + super(options); + this.setConfigWithExtraArgs(options); + + this.followingActors = []; + this.followerActors = []; + this.currentCollection = Collections.Following; + + this.menuMethods = { + spaceKeyPressed: (formData, extraArgs, cb) => { + return this._toggleSelectedActorStatus(cb); + }, + listKeyPressed: (formData, extraArgs, cb) => { + const actorListView = this.getView('main', MciViewIds.main.actorList); + if (actorListView) { + const keyName = get(formData, 'key.name'); + switch (keyName) { + case 'down arrow': + actorListView.focusNext(); + break; + case 'up arrow': + actorListView.focusPrevious(); + break; + } + } + return cb(null); + }, + }; + } + + initSequence() { + this.webServer = getServer('codes.l33t.enigma.web.server'); + if (!this.webServer) { + this.client.log('Could not get Web server'); + return this.prevMenu(); + } + this.webServer = this.webServer.instance; + + async.series( + [ + callback => { + return this.beforeArt(callback); + }, + callback => { + return this._displayMainPage(callback); + }, + ], + () => { + this.finishedLoading(); + } + ); + } + + _displayMainPage(cb) { + async.series( + [ + callback => { + return this.displayArtAndPrepViewController( + 'main', + FormIds.main, + { clearScreen: true }, + callback + ); + }, + callback => { + return this.validateMCIByViewIds( + 'main', + Object.values(MciViewIds.main).filter( + id => id !== MciViewIds.main.customRangeStart + ), + callback + ); + }, + callback => { + this._fetchActorList( + Collections.Following, + (err, followingActors) => { + if (err) { + return callback(err); + } + return this._fetchActorList( + Collections.Followers, + (err, followerActors) => { + if (err) { + return callback(err); + } + + this.followingActors = followingActors; + this.followerActors = followerActors; + + return callback(null); + } + ); + } + ); + }, + callback => { + const v = id => this.getView('main', id); + + const actorListView = v(MciViewIds.main.actorList); + const selectedActorInfoView = v(MciViewIds.main.selectedActorInfo); + const navMenuView = v(MciViewIds.main.navMenu); + + // We start with following + this._switchTo(Collections.Following); + + actorListView.on('index update', index => { + const selectedActor = this._getSelectedActorItem(index); + this._updateSelectedActorInfo( + selectedActorInfoView, + selectedActor + ); + }); + + navMenuView.on('index update', index => { + if (0 === index) { + this._switchTo(Collections.Following); + } else { + this._switchTo(Collections.Followers); + } + }); + + return callback(null); + }, + ], + err => { + return cb(err); + } + ); + } + + _switchTo(collectionName) { + this.currentCollection = collectionName; + const actorListView = this.getView('main', MciViewIds.main.actorList); + if (Collections.Following === collectionName) { + actorListView.setItems(this.followingActors); + } else { + actorListView.setItems(this.followerActors); + } + actorListView.redraw(); + + const selectedActor = this._getSelectedActorItem( + actorListView.getFocusItemIndex() + ); + const selectedActorInfoView = this.getView( + 'main', + MciViewIds.main.selectedActorInfo + ); + if (selectedActor) { + this._updateSelectedActorInfo(selectedActorInfoView, selectedActor); + } else { + selectedActorInfoView.setText(''); + } + } + + _getSelectedActorItem(index) { + if (this.currentCollection === Collections.Following) { + return this.followingActors[index]; + } else { + return this.followerActors[index]; + } + } + + _getCurrentActorList() { + return this.currentCollection === Collections.Following + ? this.followingActors + : this.followerActors; + } + + _updateSelectedActorInfo(view, actorInfo) { + if (actorInfo) { + const selectedActorInfoFormat = + this.config.selectedActorInfoFormat || '{text}'; + + const s = stringFormat(selectedActorInfoFormat, actorInfo); + + if (view instanceof MultiLineEditTextView) { + view.setAnsi(pipeToAnsi(s, this.client)); + } else { + view.setText(s); + } + } + + this.updateCustomViewTextsWithFilter( + 'main', + MciViewIds.main.customRangeStart, + this._getCustomInfoFormatObject(actorInfo) + ); + } + + _toggleSelectedActorStatus(cb) { + const actorListView = this.getView('main', MciViewIds.main.actorList); + const selectedActor = this._getSelectedActorItem( + actorListView.getFocusItemIndex() + ); + if (selectedActor) { + selectedActor.status = !selectedActor.status; + selectedActor.statusIndicator = this._getStatusIndicator( + selectedActor.status + ); + + async.series( + [ + callback => { + if (Collections.Following === this.currentCollection) { + return this._followingActorToggled(selectedActor, callback); + } else { + return this._followerActorToggled(selectedActor, callback); + } + }, + ], + err => { + if (err) { + this.client.log.error( + { error: err.message, type: this.currentCollection }, + `Failed to toggle "${this.currentCollection}" status` + ); + } + + // :TODO: we really need updateItem() call on MenuView + actorListView.setItems(this._getCurrentActorList()); + actorListView.redraw(); // oof + + return cb(null); + } + ); + } + } + + _followingActorToggled(actorInfo, cb) { + // Local user/Actor wants to follow or un-follow + const wantsToFollow = actorInfo.status; + const actor = this._actorInfoToActor(actorInfo); + + return wantsToFollow + ? sendFollowRequest(this.client.user, actor, this.webServer, cb) + : sendUnfollowRequest(this.client.user, actor, this.webServer, cb); + } + + _actorInfoToActor(actorInfo) { + const actor = cloneDeep(actorInfo); + + // nuke our added properties + delete actor.subject; + delete actor.text; + delete actor.status; + delete actor.statusIndicator; + + return actor; + } + + _followerActorToggled(actorInfo, cb) { + return cb(null); + } + + _getCustomInfoFormatObject(actorInfo) { + const formatObj = { + followingCount: this.followingActors.length, + followerCount: this.followerActors.length, + }; + + const v = f => { + return actorInfo ? actorInfo[f] || '' : ''; + }; + + Object.assign(formatObj, { + selectedActorId: v('id'), + selectedActorSubject: v('subject'), + selectedActorType: v('type'), + selectedActorName: v('name'), + selectedActorSummary: v('summary'), + selectedActorPreferredUsername: v('preferredUsername'), + selectedActorUrl: v('url'), + selectedActorImage: v('image'), + selectedActorIcon: v('icon'), + selectedActorStatus: actorInfo ? actorInfo.status : false, + selectedActorStatusIndicator: v('statusIndicator'), + text: v('name'), + }); + + return formatObj; + } + + _getStatusIndicator(enabled) { + return enabled + ? this.config.statusIndicatorEnabled || '√' + : this.config.statusIndicatorDisabled || 'X'; + } + + _fetchActorList(collectionName, cb) { + const collectionId = Endpoints[collectionName](this.webServer, this.client.user); + Collection[collectionName](collectionId, 'all', (err, collection) => { + if (err) { + return cb(err); + } + + if (!collection.orderedItems || collection.orderedItems.length < 1) { + return cb(null, []); + } + + const statusIndicator = this._getStatusIndicator(true); + + async.mapLimit( + collection.orderedItems, + 4, + (actorId, nextActorId) => { + Actor.fromId(actorId, (err, actor, subject) => { + if (err) { + this.client.log.warn({ actorId }, 'Failed to retrieve Actor'); + return nextActorId(null, null); + } + + // Add some of our own properties + Object.assign(actor, { + subject, + status: true, + statusIndicator, + text: actor.name, + }); + + return nextActorId(null, actor); + }); + }, + (err, actorsList) => { + if (err) { + return cb(err); + } + + actorsList = actorsList.filter(f => f); // drop nulls + return cb(null, actorsList); + } + ); + }); + } +}; diff --git a/core/activitypub/user_config.js b/core/activitypub/user_config.js index 09d1386be..11657b60d 100644 --- a/core/activitypub/user_config.js +++ b/core/activitypub/user_config.js @@ -51,10 +51,7 @@ const EnabledViewGroup = [ exports.getModule = class ActivityPubUserConfig extends MenuModule { constructor(options) { super(options); - - this.config = Object.assign({}, get(options, 'menuConfig.config'), { - extraArgs: options.extraArgs, - }); + this.setConfigWithExtraArgs(options); this.menuMethods = { mainSubmit: (formData, extraArgs, cb) => { diff --git a/core/activitypub/util.js b/core/activitypub/util.js index 9b1c6eac5..34d6ea40a 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -3,8 +3,7 @@ const { Errors, ErrorReasons } = require('../enig_error'); const UserProps = require('../user_property'); const ActivityPubSettings = require('./settings'); const { stripAnsiControlCodes } = require('../string_util'); -const { WellKnownRecipientFields, WellKnownActivity } = require('./const'); -const ActivityPubObject = require('./object'); +const { WellKnownRecipientFields } = require('./const'); const Log = require('../logger').log; // deps @@ -29,7 +28,6 @@ exports.userNameFromSubject = userNameFromSubject; exports.userNameToSubject = userNameToSubject; exports.extractMessageMetadata = extractMessageMetadata; exports.recipientIdsFromObject = recipientIdsFromObject; -exports.sendFollowRequest = sendFollowRequest; // :TODO: more info in default // this profile template is the *default* for both WebFinger @@ -264,23 +262,3 @@ function recipientIdsFromObject(obj) { return Array.from(new Set(ids)); } - -function sendFollowRequest(fromUser, toActor, webServer, cb) { - const fromActorId = fromUser.getProperty(UserProps.ActivityPubActorId); - if (!fromActorId) { - return cb( - Errors.MissingProperty( - `User missing "${UserProps.ActivityPubActorId}" property` - ) - ); - } - - const followRequest = new ActivityPubObject({ - id: ActivityPubObject.makeObjectId(webServer, 'follow'), - type: WellKnownActivity.Follow, - actor: fromActorId, - object: toActor.id, - }); - - return followRequest.sendTo(toActor.inbox, fromUser, webServer, cb); -} diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 44802e73b..ce8af7213 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -8,6 +8,7 @@ const Endpoints = require('../../../activitypub/endpoint'); const { ActivityStreamMediaType, WellKnownActivity, + Collections, } = require('../../../activitypub/const'); const Config = require('../../../config').get; const Activity = require('../../../activitypub/activity'); @@ -64,7 +65,12 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { req, resp, (req, resp, signature) => { - return this._inboxPostHandler(req, resp, signature, 'inbox'); + return this._inboxPostHandler( + req, + resp, + signature, + Collections.Inbox + ); } ); }, @@ -82,7 +88,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { req, resp, signature, - 'sharedInbox' + Collections.SharedInbox ); } ); @@ -262,7 +268,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { switch (activity.type) { case WellKnownActivity.Accept: - break; + return this._inboxAcceptActivity(resp, activity); case WellKnownActivity.Add: break; @@ -292,17 +298,17 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { case WellKnownActivity.Follow: // Follow requests are only allowed directly - if ('inbox' === inboxType) { + if (Collections.Inbox === inboxType) { return this._inboxFollowActivity(resp, remoteActor, activity); } break; case WellKnownActivity.Reject: - break; + return this._inboxRejectActivity(resp, activity); case WellKnownActivity.Undo: // We only Undo from private inboxes - if ('inbox' === inboxType) { + if (Collections.Inbox === inboxType) { // Only Follow Undo's currently supported const type = _.get(activity, 'object.type'); if (WellKnownActivity.Follow === type) { @@ -330,6 +336,21 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } + _inboxAcceptActivity(resp, activity) { + const acceptWhat = _.get(activity, 'object.type'); + switch (acceptWhat) { + case WellKnownActivity.Follow: + return this._inboxAcceptFollowActivity(resp, activity); + + default: + this.log.warn( + { type: acceptWhat }, + 'Invalid or unsupported "Accept" type' + ); + return this.webServer.notImplemented(resp); + } + } + _inboxCreateActivity(resp, activity) { const createWhat = _.get(activity, 'object.type'); switch (createWhat) { @@ -341,10 +362,23 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { { type: createWhat }, 'Invalid or unsupported "Create" type' ); - return this.webServer.resourceNotFound(resp); + return this.webServer.notImplemented(resp); } } + _inboxAcceptFollowActivity(resp, activity) { + // Currently Accept's to Follow's are really just a formality; + // we'll log it, but that's about it for now + this.log.info( + { + remoteActorId: activity.actor, + localActorId: _.get(activity, 'object.actor'), + }, + 'Follow request Accepted' + ); + return this.webServer.accepted(resp); + } + _inboxCreateNoteActivity(resp, activity) { const note = new Note(activity.object); if (!note.isValid()) { @@ -380,10 +414,107 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { ); } - _inboxDeleteActivity(inboxType, signature, resp /*, activity*/) { - // :TODO: Implement me! + _inboxRejectFollowActivity(resp, activity) { + // A user Rejected our local Actor/user's Follow request; + // Update the local Collection to reflect this fact. + const remoteActorId = activity.actor; + const localActorId = _.get(activity, 'object.actor'); + + if (!remoteActorId || !localActorId) { + return this.webServer.badRequest(resp); + } + + userFromActorId(localActorId, (err, localUser) => { + if (err) { + return this.webServer.resourceNotFound(resp); + } + + Collection.removeOwnedById( + Collections.Following, + localUser, + remoteActorId, + err => { + if (err) { + this.log.error( + { remoteActorId, localActorId }, + 'Failed removing "following" record' + ); + } + return this.webServer.accepted(resp); + } + ); + }); + } + + _inboxDeleteActivity(inboxType, signature, resp, activity) { + const objectId = _.get(activity, 'object.id', activity.object); + + this.log.info({ inboxType, objectId }, 'Incoming Delete request'); + // :TODO: we need to DELETE the existing stored Message object if this is a Note, or associated if this is an Actor // :TODO: delete / invalidate any actor cache if actor + Collection.objectsById(objectId, (err, objectsInfo) => { + if (err) { + this.log.warn({ objectId }); + // We'll respond accepted so they don't keep trying + return this.webServer.accepted(resp); + } + + if (objectsInfo.length === 0) { + return this.webServer.resourceNotFound(resp); + } + + // Generally we'd have a 1:1 objectId -> object here, but it's + // possible for example, that we're being asked to delete an Actor; + // If this is the case, they may be following multiple local Actor/users + // and we have multiple entries. + async.forEachSeries( + objectsInfo, + (objInfo, nextObjInfo) => { + if (objInfo.object) { + // Based on the collection we find this entry in, + // we may have additional validation or actions + switch (objInfo.info.name) { + case Collections.Inbox: + if (inboxType !== Collections.Inbox) { + // :TODO: LOG ME + return nextObjInfo(null); + } + break; + + case Collections.SharedInbox: + if (inboxType !== Collections.SharedInbox) { + // :TODO: log me + return nextObjInfo(null); + } + break; + default: + break; + } + + return nextObjInfo(null); + } else { + // it's unparsable, so we'll delete it + Collection.removeById(objInfo.info.name, objectId, err => { + if (err) { + this.log.warn( + { objectId, collectionName: objInfo.info.name }, + 'Failed to remove object' + ); + } + return nextObjInfo(null); + }); + } + }, + err => { + if (err) { + // :TODO: log me + } + return this.webServer.accepted(resp); + } + ); + }); + return this.webServer.accepted(resp); } @@ -402,7 +533,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { const activityPubSettings = ActivityPubSettings.fromUser(localUser); if (!activityPubSettings.manuallyApproveFollowers) { this._recordAcceptedFollowRequest(localUser, remoteActor, activity); - return this.webServer.ok(resp); + return this.webServer.accepted(resp); } // User manually approves requests; add them to their requests collection @@ -416,12 +547,27 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.internalServerError(resp, err); } - return this.webServer.ok(resp); + return this.webServer.accepted(resp); } ); }); } + _inboxRejectActivity(resp, activity) { + const rejectWhat = _.get(activity, 'object.type'); + switch (rejectWhat) { + case WellKnownActivity.Follow: + return this._inboxRejectFollowActivity(resp, activity); + + default: + this.log.warn( + { type: rejectWhat }, + 'Invalid or unsupported "Reject" type' + ); + return this.webServer.notImplemented(resp); + } + } + _inboxUndoActivity(resp, remoteActor, activity) { const localActorId = _.get(activity, 'object.object'); @@ -435,22 +581,27 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.resourceNotFound(resp); } - Collection.removeOwnedById('followers', localUser, remoteActor.id, err => { - if (err) { - return this.webServer.internalServerError(resp, err); - } + Collection.removeOwnedById( + Collections.Followers, + localUser, + remoteActor.id, + err => { + if (err) { + return this.webServer.internalServerError(resp, err); + } - this.log.info( - { - username: localUser.username, - userId: localUser.userId, - remoteActorId: remoteActor.id, - }, - 'Undo "Follow" (un-follow) success' - ); + this.log.info( + { + username: localUser.username, + userId: localUser.userId, + remoteActorId: remoteActor.id, + }, + 'Undo "Follow" (un-follow) success' + ); - return this.webServer.accepted(resp); - }); + return this.webServer.accepted(resp); + } + ); }); } @@ -712,18 +863,18 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { _followingGetHandler(req, resp) { this.log.debug({ url: req.url }, 'Request for "following"'); - return this._actorCollectionRequest('following', req, resp); + return this._actorCollectionRequest(Collections.Following, req, resp); } _followersGetHandler(req, resp) { this.log.debug({ url: req.url }, 'Request for "followers"'); - return this._actorCollectionRequest('followers', req, resp); + return this._actorCollectionRequest(Collections.Followers, req, resp); } // https://docs.gotosocial.org/en/latest/federation/behaviors/outbox/ _outboxGetHandler(req, resp) { this.log.debug({ url: req.url }, 'Request for "outbox"'); - return this._actorCollectionRequest('outbox', req, resp); + return this._actorCollectionRequest(Collections.Outbox, req, resp); } _singlePublicNoteGetHandler(req, resp) { diff --git a/core/vertical_menu_view.js b/core/vertical_menu_view.js index be5ce1329..3379ca179 100644 --- a/core/vertical_menu_view.js +++ b/core/vertical_menu_view.js @@ -11,7 +11,6 @@ const pipeToAnsi = require('./color_codes.js').pipeToAnsi; // deps const util = require('util'); const _ = require('lodash'); -const { throws } = require('assert'); exports.VerticalMenuView = VerticalMenuView; From 560d608cd2b7c1f0bac9e33cbebca42b6bffdace Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 17 Feb 2023 23:18:24 -0700 Subject: [PATCH 142/233] Better HTML stripping, fix display of summary, etc. --- .../activitypub_social_manager.ans | Bin 2077 -> 2077 bytes art/themes/luciano_blocktronics/theme.hjson | 4 ++-- core/activitypub/social_manager.js | 20 +++++++++++++++--- core/activitypub/util.js | 8 +++---- core/servers/content/web.js | 9 +++++--- package.json | 4 +++- yarn.lock | 20 +++++++++++++----- 7 files changed, 46 insertions(+), 19 deletions(-) diff --git a/art/themes/luciano_blocktronics/activitypub_social_manager.ans b/art/themes/luciano_blocktronics/activitypub_social_manager.ans index 56af586e812a7763381831c4790f07211674274c..c5fd35d660d1baecc2422ccae092372b3b7201bc 100644 GIT binary patch delta 73 zcmbO$Fjrs$7t>@BCZ);!%v_VtF|$uLVCSElz{W8-gh^p?9h2O|1E|6Z%>FPXn-!R^ Mu`rrX{?4uj00ajVt^fc4 delta 64 zcmbO$Fjrs$7t_Q8T$8z&lqSz%lA9dDqyXZU0Ga2Q*(V#Y^G{A- { + a.plainTextSummary = htmlToMessageBody(a.summary); + return a; + }; + + this.followingActors = followingActors.map(mapper); + this.followerActors = followerActors.map(mapper); return callback(null); } @@ -212,7 +218,11 @@ exports.getModule = class ActivityPubFollowingManager extends MenuModule { const s = stringFormat(selectedActorInfoFormat, actorInfo); if (view instanceof MultiLineEditTextView) { - view.setAnsi(pipeToAnsi(s, this.client)); + const opts = { + prepped: false, + forceLineTerm: true, + }; + view.setAnsi(pipeToAnsi(s, this.client), opts); } else { view.setText(s); } @@ -282,6 +292,7 @@ exports.getModule = class ActivityPubFollowingManager extends MenuModule { delete actor.text; delete actor.status; delete actor.statusIndicator; + delete actor.plainTextSummary; return actor; } @@ -306,6 +317,9 @@ exports.getModule = class ActivityPubFollowingManager extends MenuModule { selectedActorType: v('type'), selectedActorName: v('name'), selectedActorSummary: v('summary'), + selectedActorPlainTextSummary: actorInfo + ? htmlToMessageBody(actorInfo.summary || '') + : '', selectedActorPreferredUsername: v('preferredUsername'), selectedActorUrl: v('url'), selectedActorImage: v('image'), diff --git a/core/activitypub/util.js b/core/activitypub/util.js index 34d6ea40a..0f6564bbf 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -13,9 +13,9 @@ const waterfall = require('async/waterfall'); const fs = require('graceful-fs'); const paths = require('path'); const moment = require('moment'); -const { striptags } = require('striptags'); const { encode, decode } = require('html-entities'); const { isString } = require('lodash'); +const { stripHtml } = require('string-strip-html'); exports.parseTimestampOrNow = parseTimestampOrNow; exports.isValidLink = isValidLink; @@ -217,10 +217,8 @@ function messageToHtml(message) { } function htmlToMessageBody(html) { - //
    ,
    , and
    ,
    -> \r\n - //

    -> \r\n - html = html.replace(/(?:<\/?br ?\/?>)|(?:<\/p>)/g, '\r\n'); - return striptags(decode(html)); + const res = stripHtml(decode(html)); + return res.result; } function userNameFromSubject(subject) { diff --git a/core/servers/content/web.js b/core/servers/content/web.js index 92a38dbb7..3062689cc 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -149,9 +149,12 @@ exports.getModule = class WebServerModule extends ServerModule { createServer(cb) { if (this.enableHttp) { - this.httpServer = http.createServer((req, resp) => - this.routeRequest(req, resp) - ); + this.httpServer = http.createServer((req, resp) => { + resp.on('error', err => { + this.log.error({ error: err.message }, 'Response error'); + }); + this.routeRequest(req, resp); + }); } const config = Config(); diff --git a/package.json b/package.json index 490c9397a..fc84926c5 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ ], "dependencies": { "@breejs/later": "4.1.0", + "add": "^2.0.6", "async": "3.2.4", "avatar-generator": "^2.0.4", "binary-parser": "2.1.0", @@ -64,13 +65,14 @@ "sqlite3": "5.0.11", "sqlite3-trans": "1.3.0", "ssh2": "1.11.0", - "striptags": "^4.0.0-alpha.4", + "string-strip-html": "8.4.0", "systeminformation": "5.12.3", "telnet-socket": "0.2.4", "temptmp": "^1.1.0", "uuid": "8.3.2", "uuid-parse": "1.1.0", "ws": "7.5.9", + "yarn": "^1.22.19", "yazl": "^2.5.1" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index 53cf5057b..344836b33 100644 --- a/yarn.lock +++ b/yarn.lock @@ -131,6 +131,11 @@ acorn@^8.8.0: resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== +add@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/add/-/add-2.0.6.tgz#248f0a9f6e5a528ef2295dbeec30532130ae2235" + integrity sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q== + agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" @@ -2598,6 +2603,11 @@ string-argv@^0.3.1: resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== +string-strip-html@8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/string-strip-html/-/string-strip-html-8.4.0.tgz#3baf7fc56ef566393077a6941e8ba13c91b43d0b" + integrity sha512-ajjEpk0V1G0+/RrX08I2pSj/kfsYU5wkUKWEKPQJXVQpdahZNSljiuWVqf8UgrB2E9DvFcougbl1gPwHzkuEDg== + string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -2680,11 +2690,6 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -striptags@^4.0.0-alpha.4: - version "4.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/striptags/-/striptags-4.0.0-alpha.4.tgz#824f1ac040f824574316ce87a3663c0c4df9900d" - integrity sha512-/0jWyVWhpg9ciRHfjKYBpMHXct/HrFRfsR2HU77nGPbc8SPcVSIHZlZR/0TG3MyPq2C+HiHuwx8BlbcdI/cNbw== - supports-color@^7.1.0: version "7.1.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz" @@ -3005,6 +3010,11 @@ yaml@^2.1.3: resolved "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz" integrity sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw== +yarn@^1.22.19: + version "1.22.19" + resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.19.tgz#4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447" + integrity sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ== + yazl@^2.5.1: version "2.5.1" resolved "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz" From 62735411f6868d9cfb5df4caa1c2ab72eadbd1f7 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 19 Feb 2023 19:54:46 -0700 Subject: [PATCH 143/233] Fix longstanding itemFormat/focusItemFormat issue --- .../activitypub_social_manager.ans | Bin 2077 -> 2129 bytes art/themes/luciano_blocktronics/theme.hjson | 9 +++--- .../servers/content/web_handlers/nodeinfo2.js | 10 +++--- core/string_util.js | 29 ++++++++++++++++-- core/vertical_menu_view.js | 6 ++++ core/view.js | 7 +++++ 6 files changed, 50 insertions(+), 11 deletions(-) diff --git a/art/themes/luciano_blocktronics/activitypub_social_manager.ans b/art/themes/luciano_blocktronics/activitypub_social_manager.ans index c5fd35d660d1baecc2422ccae092372b3b7201bc..5348f1b233f06dd66be3c667f04afd2a7ac5d78a 100644 GIT binary patch delta 185 zcmbO$a8Y2x3&wi0+{EOP{33;%%;FO1Xaj3wvs?w~XhUmbque7v02YEUfowyt7)Trp z;F1s>X1T?wIjPAdsVNE&Gc)tj@_}kV211NOGXW^am^=9(o5JJ}CWXlbOd6BVF|$uL dVCSElz{W9If!QC%-mJiUjfKhb`Q#t$ssQWONrC_X delta 74 zcmca8Fjrv13q~HJ+{EOP{33;%%;J)X8^wf+Q*%<2OHxx5Ai|k>Y59{4*d!-kV3M2M b!K5&G4U@{m11y^_Fh#L4nQxw~!=VZQ7U3G1 diff --git a/art/themes/luciano_blocktronics/theme.hjson b/art/themes/luciano_blocktronics/theme.hjson index e3946cebe..185dc8562 100644 --- a/art/themes/luciano_blocktronics/theme.hjson +++ b/art/themes/luciano_blocktronics/theme.hjson @@ -97,7 +97,7 @@ mci: { VM1: { height: 10 - width: 20 + width: 71 itemFormat: "|00|11{userName:<12}|08: |03{oneliner:<59.59}" } TM2: { @@ -229,6 +229,7 @@ VM1: { height: 10 itemFormat: "|00|11{userName:<12}|08: |03{oneliner:<59.59}" + width: 71 } TM2: { focusTextStyle: first lower @@ -486,7 +487,7 @@ activityPubFollowingManager: { config: { - selectedActorInfoFormat: "|00|15{preferredUsername}\n|02{name}\n{plainTextSummary}" + selectedActorInfoFormat: "|00|15{preferredUsername} |08(|02{name}|08)\n|07following|08: {statusIndicator}\n\n|06{plainTextSummary}" statusIndicatorEnabled: "|00|10√" staticIndicatorDisabled: "|00|12X" } @@ -494,13 +495,13 @@ mci: { VM1: { height: 15 - width: 30 + width: 35 itemFormat: "|00|03{subject}|00 {statusIndicator}" focusItemFormat: "|00|19|15{subject}|00 {statusIndicator}" } MT2: { height: 15 - width: 38 + width: 34 } TM3: { focusTextStyle: first upper diff --git a/core/servers/content/web_handlers/nodeinfo2.js b/core/servers/content/web_handlers/nodeinfo2.js index 4be7f85c9..9adab0ef3 100644 --- a/core/servers/content/web_handlers/nodeinfo2.js +++ b/core/servers/content/web_handlers/nodeinfo2.js @@ -72,10 +72,12 @@ exports.getModule = class NodeInfo2WebHadnler extends WebHandlerModule { }, // :TODO: Only list what's enabled protocols: ['telnet', 'ssh', 'gopher', 'nntp', 'ws', 'activitypub'], - services: { - inbound: [], - outbound: [''], - }, + + // :TODO: what should we really be doing here??? + // services: { + // inbound: [], + // outbound: [], + // }, openRegistrations: !config.general.closedSystem, usage: { users: { diff --git a/core/string_util.js b/core/string_util.js index 3f78b37dd..6f1a6a019 100644 --- a/core/string_util.js +++ b/core/string_util.js @@ -19,6 +19,7 @@ exports.debugEscapedString = debugEscapedString; exports.stringFromNullTermBuffer = stringFromNullTermBuffer; exports.stringToNullTermBuffer = stringToNullTermBuffer; exports.renderSubstr = renderSubstr; +exports.renderTruncate = renderTruncate; exports.renderStringLength = renderStringLength; exports.ansiRenderStringLength = ansiRenderStringLength; exports.formatByteSizeAbbr = formatByteSizeAbbr; @@ -136,13 +137,12 @@ function stylizeString(s, style) { return s; } -function pad(s, len, padChar, justify, stringSGR, padSGR, useRenderLen) { +function pad(s, len, padChar, justify, stringSGR, padSGR, useRenderLen = true) { len = len || 0; padChar = padChar || ' '; justify = justify || 'left'; stringSGR = stringSGR || ''; padSGR = padSGR || ''; - useRenderLen = _.isUndefined(useRenderLen) ? true : useRenderLen; const renderLen = useRenderLen ? renderStringLength(s) : s.length; const padlen = len >= renderLen ? len - renderLen : 0; @@ -290,6 +290,29 @@ function renderSubstr(str, start, length) { return out; } +const DefaultTruncateLen = 30; +const DefaultTruncateOmission = '...'; + +function renderTruncate(str, options) { + // shortcut for empty strings + if (0 === str.length) { + return str; + } + + options = options || {}; + options.length = options.length || DefaultTruncateLen; + options.omission = _.isString(options.omission) + ? options.omission + : DefaultTruncateOmission; + + let out = renderSubstr(str, 0, options.length - options.omission.length); + if (out.length < str.length) { + out += options.omission; + } + + return out; +} + // // Method to return the "rendered" length taking into account Pipe and ANSI color codes. // @@ -464,7 +487,7 @@ function isAnsiLine(line) { // * Pipe codes // * Extended (CP437) ASCII - https://www.ascii-codes.com/ // * Tabs -// * Contigous 3+ spaces before the end of the line +// * Contiguous 3+ spaces before the end of the line // function isFormattedLine(line) { if (renderStringLength(line) < line.length) { diff --git a/core/vertical_menu_view.js b/core/vertical_menu_view.js index 3379ca179..d8c2875a0 100644 --- a/core/vertical_menu_view.js +++ b/core/vertical_menu_view.js @@ -98,12 +98,18 @@ function VerticalMenuView(options) { sgr = index === self.focusedItemIndex ? self.getFocusSGR() : self.getSGR(); } + text = strUtil.renderTruncate(text, { + length: this.dimens.width, + omission: this.truncateOmission, + }); + text = `${sgr}${strUtil.pad( `${text}${this.styleSGR1}`, this.dimens.width, this.fillChar, this.justify )}`; + self.client.term.write(`${ansi.goto(item.row, self.position.col)}${text}`); this.setRenderCacheItem(index, text, item.focused); }; diff --git a/core/view.js b/core/view.js index ed8f08d06..a82751b53 100644 --- a/core/view.js +++ b/core/view.js @@ -50,6 +50,7 @@ function View(options) { this.textStyle = options.textStyle || 'normal'; this.focusTextStyle = options.focusTextStyle || this.textStyle; this.offsetsApplied = false; + this.truncateOmission = options.truncateOmission || ''; if (options.id) { this.setId(options.id); @@ -273,6 +274,12 @@ View.prototype.setPropertyValue = function (propName, value) { this.validate = value; } break; + + case 'truncateOmission': + if (_.isString(value)) { + this.truncateOmission = value; + } + break; } if (/styleSGR[0-9]{1,2}/.test(propName)) { From 53eff2715af033156d74a719ec57534fd61452c5 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 19 Feb 2023 19:55:53 -0700 Subject: [PATCH 144/233] Docs --- docs/_docs/art/views/vertical_menu_view.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_docs/art/views/vertical_menu_view.md b/docs/_docs/art/views/vertical_menu_view.md index ed439dbc1..e11e087c8 100644 --- a/docs/_docs/art/views/vertical_menu_view.md +++ b/docs/_docs/art/views/vertical_menu_view.md @@ -31,6 +31,7 @@ Items can be selected on a menu via the cursor keys, Page Up, Page Down, Home, a | `fillChar` | Specifies a character to fill extra space in the menu with. Defaults to an empty space | | `items` | List of items to show in the menu. See **Items** below. | `focusItemFormat` | Sets the format for a focused list entry. See **Entry Formatting** in [MCI](../mci.md) | +| `truncateOmission` | Sets the omission characters for truncated text if used. Defaults to an empty string. Commonly set to "..." | ### Hot Keys From e963f18ba43b7821e0347e528c26d0608685bf0f Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Mon, 20 Feb 2023 13:08:11 -0600 Subject: [PATCH 145/233] Several cosmetic fixes for off-by-one in padding and display issues when resetting lists --- art/themes/luciano_blocktronics/theme.hjson | 4 +- core/full_menu_view.js | 87 ++++++++++++++++----- core/string_util.js | 12 +-- core/vertical_menu_view.js | 18 +++-- 4 files changed, 88 insertions(+), 33 deletions(-) diff --git a/art/themes/luciano_blocktronics/theme.hjson b/art/themes/luciano_blocktronics/theme.hjson index e3946cebe..638132fb3 100644 --- a/art/themes/luciano_blocktronics/theme.hjson +++ b/art/themes/luciano_blocktronics/theme.hjson @@ -495,8 +495,8 @@ VM1: { height: 15 width: 30 - itemFormat: "|00|03{subject}|00 {statusIndicator}" - focusItemFormat: "|00|19|15{subject}|00 {statusIndicator}" + itemFormat: "|00{statusIndicator} |00|03{subject}" + focusItemFormat: "|00{statusIndicator} |00|19|15{subject}" } MT2: { height: 15 diff --git a/core/full_menu_view.js b/core/full_menu_view.js index b3bb2415b..396e827fb 100644 --- a/core/full_menu_view.js +++ b/core/full_menu_view.js @@ -59,7 +59,7 @@ function FullMenuView(options) { } for (let i = 0; i < this.dimens.height; i++) { - const text = `${strUtil.pad(this.fillChar, width, this.fillChar, 'left')}`; + const text = strUtil.pad('', width, this.fillChar); this.client.term.write( `${ansi.goto( this.position.row + i, @@ -77,6 +77,7 @@ function FullMenuView(options) { this.autoAdjustHeightIfEnabled(); this.pages = []; // reset + this.currentPage = 0; // reset currentPage when pages reset // Calculate number of items visible per column this.itemsPerRow = Math.floor(this.dimens.height / (this.itemSpacing + 1)); @@ -240,14 +241,25 @@ function FullMenuView(options) { sgr = index === this.focusedItemIndex ? this.getFocusSGR() : this.getSGR(); } - let renderLength = strUtil.renderStringLength(text); - if (this.hasTextOverflow() && item.col + renderLength > this.dimens.width) { + const renderLength = strUtil.renderStringLength(text); + + let relativeColumn = item.col - this.position.col; + if (relativeColumn < 0) { + relativeColumn = 0; + this.client.log.warn( + { itemCol: item.col, positionColumn: this.position.col }, + 'Invalid item column detected in full menu' + ); + } + + if (relativeColumn + renderLength > this.dimens.width) { + const overflow = this.hasTextOverflow() ? this.textOverflow : ''; text = strUtil.renderSubstr( text, 0, - this.dimens.width - (item.col + this.textOverflow.length) - ) + this.textOverflow; + this.dimens.width - (relativeColumn + overflow.length) + ) + overflow; } let padLength = Math.min(item.fixedLength + 1, this.dimens.width); @@ -270,14 +282,29 @@ FullMenuView.prototype.redraw = function () { this.cachePositions(); + // In case we get in a bad state, try to recover + if (this.currentPage < 0) { + this.currentPage = 0; + } + if (this.items.length) { - for ( - let i = this.pages[this.currentPage].start; - i <= this.pages[this.currentPage].end; - ++i + if ( + this.currentPage > this.pages.length || + !_.isObject(this.pages[this.currentPage]) ) { - this.items[i].focused = this.focusedItemIndex === i; - this.drawItem(i); + this.client.log.warn( + { currentPage: this.currentPage, pagesLength: this.pages.length }, + 'Invalid state! in full menu redraw' + ); + } else { + for ( + let i = this.pages[this.currentPage].start; + i <= this.pages[this.currentPage].end; + ++i + ) { + this.items[i].focused = this.focusedItemIndex === i; + this.drawItem(i); + } } } }; @@ -358,6 +385,10 @@ FullMenuView.prototype.setItems = function (items) { this.oldDimens = Object.assign({}, this.dimens); } + // Reset the page on new items + this.currentPage = 0; + this.focusedItemIndex = 0; + FullMenuView.super_.prototype.setItems.call(this, items); this.positionCacheExpired = true; @@ -378,10 +409,20 @@ FullMenuView.prototype.focusNext = function () { this.focusedItemIndex = 0; this.currentPage = 0; } else { - this.focusedItemIndex++; - if (this.focusedItemIndex > this.pages[this.currentPage].end) { - this.clearPage(); - this.currentPage++; + if ( + this.currentPage > this.pages.length || + !_.isObject(this.pages[this.currentPage]) + ) { + this.client.log.warn( + { currentPage: this.currentPage, pagesLength: this.pages.length }, + 'Invalid state in focusNext for full menu view' + ); + } else { + this.focusedItemIndex++; + if (this.focusedItemIndex > this.pages[this.currentPage].end) { + this.clearPage(); + this.currentPage++; + } } } @@ -397,9 +438,19 @@ FullMenuView.prototype.focusPrevious = function () { this.currentPage = this.pages.length - 1; } else { this.focusedItemIndex--; - if (this.focusedItemIndex < this.pages[this.currentPage].start) { - this.clearPage(); - this.currentPage--; + if ( + this.currentPage > this.pages.length || + !_.isObject(this.pages[this.currentPage]) + ) { + this.client.log.warn( + { currentPage: this.currentPage, pagesLength: this.pages.length }, + 'Bad focus state, ignoring call to focusPrevious.' + ); + } else { + if (this.focusedItemIndex < this.pages[this.currentPage].start) { + this.clearPage(); + this.currentPage--; + } } } diff --git a/core/string_util.js b/core/string_util.js index 3f78b37dd..066548b9a 100644 --- a/core/string_util.js +++ b/core/string_util.js @@ -145,29 +145,29 @@ function pad(s, len, padChar, justify, stringSGR, padSGR, useRenderLen) { useRenderLen = _.isUndefined(useRenderLen) ? true : useRenderLen; const renderLen = useRenderLen ? renderStringLength(s) : s.length; - const padlen = len >= renderLen ? len - renderLen : 0; + const padLen = len > renderLen ? len - renderLen : 0; switch (justify) { case 'L': case 'left': - s = `${stringSGR}${s}${padSGR}${Array(padlen).join(padChar)}`; + s = `${stringSGR}${s}${padSGR}${padChar.repeat(padLen)}`; break; case 'C': case 'center': case 'both': { - const right = Math.ceil(padlen / 2); - const left = padlen - right; + const right = Math.ceil(padLen / 2); + const left = padLen - right; s = `${padSGR}${Array(left + 1).join( padChar - )}${stringSGR}${s}${padSGR}${Array(right + 1).join(padChar)}`; + )}${stringSGR}${s}${padSGR}${padChar.repeat(right)}`; } break; case 'R': case 'right': - s = `${padSGR}${Array(padlen).join(padChar)}${stringSGR}${s}`; + s = `${padSGR}${padChar.repeat(padLen)}${stringSGR}${s}`; break; default: diff --git a/core/vertical_menu_view.js b/core/vertical_menu_view.js index 3379ca179..bf3ac57bf 100644 --- a/core/vertical_menu_view.js +++ b/core/vertical_menu_view.js @@ -98,6 +98,11 @@ function VerticalMenuView(options) { sgr = index === self.focusedItemIndex ? self.getFocusSGR() : self.getSGR(); } + const renderLength = strUtil.renderStringLength(text); + if (renderLength > this.dimens.width) { + text = strUtil.renderSubstr(text, 0, this.dimens.width); + } + text = `${sgr}${strUtil.pad( `${text}${this.styleSGR1}`, this.dimens.width, @@ -137,18 +142,16 @@ VerticalMenuView.prototype.redraw = function () { // erase old items // :TODO: optimize this: only needed if a item is removed or new max width < old. if (this.oldDimens) { - const blank = new Array(Math.max(this.oldDimens.width, this.dimens.width)).join( - ' ' - ); - let seq = ansi.goto(this.position.row, this.position.col) + this.getSGR() + blank; - let row = this.position.row + 1; + const blank = ' '.repeat(Math.max(this.oldDimens.width, this.dimens.width)); + let row = this.position.row; const endRow = row + this.oldDimens.height - 2; while (row <= endRow) { - seq += ansi.goto(row, this.position.col) + blank; + this.client.term.write( + ansi.goto(row, this.position.col) + this.getSGR() + blank + ); row += 1; } - this.client.term.write(seq); delete this.oldDimens; } @@ -241,6 +244,7 @@ VerticalMenuView.prototype.setItems = function (items) { if (this.items && this.items.length) { this.oldDimens = Object.assign({}, this.dimens); } + this.focusedItemIndex = 0; VerticalMenuView.super_.prototype.setItems.call(this, items); From c79bb1e99fd5a70ca02a516717481bbe58be59f5 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Mon, 20 Feb 2023 13:49:05 -0600 Subject: [PATCH 146/233] Added documentation for overflow and made consistent between views --- core/full_menu_view.js | 13 +++++++------ core/vertical_menu_view.js | 16 ++++++++++++---- docs/_docs/art/views/vertical_menu_view.md | 10 ++++++++++ 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/core/full_menu_view.js b/core/full_menu_view.js index 9a46f6b3a..7b20b8f59 100644 --- a/core/full_menu_view.js +++ b/core/full_menu_view.js @@ -253,12 +253,13 @@ function FullMenuView(options) { } if (relativeColumn + renderLength > this.dimens.width) { - const overflow = this.hasTextOverflow() ? this.textOverflow : ''; - - text = strUtil.renderTruncate(text, { - length: this.dimens.width - (relativeColumn + overflow.length), - omission: overflow, - }); + if (this.hasTextOverflow()) { + text = strUtil.renderTruncate(text, { + length: + this.dimens.width - (relativeColumn + this.textOverflow.length), + omission: this.textOverflow, + }); + } } let padLength = Math.min(item.fixedLength + 1, this.dimens.width); diff --git a/core/vertical_menu_view.js b/core/vertical_menu_view.js index e34794c8a..f08a66e4a 100644 --- a/core/vertical_menu_view.js +++ b/core/vertical_menu_view.js @@ -98,10 +98,12 @@ function VerticalMenuView(options) { sgr = index === self.focusedItemIndex ? self.getFocusSGR() : self.getSGR(); } - text = strUtil.renderTruncate(text, { - length: this.dimens.width, - omission: this.textOverflow, - }); + if (this.hasTextOverflow()) { + text = strUtil.renderTruncate(text, { + length: this.dimens.width, + omission: this.textOverflow, + }); + } text = `${sgr}${strUtil.pad( `${text}${this.styleSGR1}`, @@ -405,6 +407,12 @@ VerticalMenuView.prototype.focusLast = function () { return VerticalMenuView.super_.prototype.focusLast.call(this); }; +VerticalMenuView.prototype.setTextOverflow = function (overflow) { + VerticalMenuView.super_.prototype.setTextOverflow.call(this, overflow); + + this.positionCacheExpired = true; +}; + VerticalMenuView.prototype.setFocusItems = function (items) { VerticalMenuView.super_.prototype.setFocusItems.call(this, items); diff --git a/docs/_docs/art/views/vertical_menu_view.md b/docs/_docs/art/views/vertical_menu_view.md index e11e087c8..2a66bc36b 100644 --- a/docs/_docs/art/views/vertical_menu_view.md +++ b/docs/_docs/art/views/vertical_menu_view.md @@ -29,6 +29,7 @@ Items can be selected on a menu via the cursor keys, Page Up, Page Down, Home, a | `justify` | Sets the justification of each item in the list. Options: left (default), right, center | | `itemFormat` | Sets the format for a list entry. See **Entry Formatting** in [MCI](../mci.md) | | `fillChar` | Specifies a character to fill extra space in the menu with. Defaults to an empty space | +| `textOverflow` | If an entry cannot be displayed due to `width`, set overflow characters. See **Text Overflow** below | | `items` | List of items to show in the menu. See **Items** below. | `focusItemFormat` | Sets the format for a focused list entry. See **Entry Formatting** in [MCI](../mci.md) | | `truncateOmission` | Sets the omission characters for truncated text if used. Defaults to an empty string. Commonly set to "..." | @@ -70,6 +71,15 @@ If the list is for display only (there is no form action associated with it) you ["First item", "Second item", "Third Item"] ``` +### Text Overflow + +The `textOverflow` option is used to specify what happens when a text string is too long to fit in the `width` defined. If an entry is too long to display in the width specified + +> :information_source: If `textOverflow` is not specified at all, a menu can become wider than the `width` if needed to display a single column. + +> :information_source: Setting `textOverflow` to an empty string `textOverflow: ""` will cause the item to be truncated if necessary without any characters displayed + +> :information_source: Otherwise, setting `textOverflow` to one or more characters will truncate the value if necessary and display those characters at the end. i.e. `textOverflow: ...` ## Example From 3d1ac922dcc8fd2a4ae47719afd912718f61e779 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Mon, 20 Feb 2023 13:54:35 -0600 Subject: [PATCH 147/233] Added default overflow to theme --- art/themes/luciano_blocktronics/theme.hjson | 1 + 1 file changed, 1 insertion(+) diff --git a/art/themes/luciano_blocktronics/theme.hjson b/art/themes/luciano_blocktronics/theme.hjson index a2e826987..8730f78db 100644 --- a/art/themes/luciano_blocktronics/theme.hjson +++ b/art/themes/luciano_blocktronics/theme.hjson @@ -498,6 +498,7 @@ width: 35 itemFormat: "|00{statusIndicator} |00|03{subject}" focusItemFormat: "|00{statusIndicator} |00|19|15{subject}" + textOverflow: "..." } MT2: { height: 15 From 51c58b5d8ad756c05666bb3587ad98996d52a971 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 20 Feb 2023 14:28:18 -0700 Subject: [PATCH 148/233] Fixes --- art/themes/luciano_blocktronics/theme.hjson | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/art/themes/luciano_blocktronics/theme.hjson b/art/themes/luciano_blocktronics/theme.hjson index 185dc8562..2b4588bc0 100644 --- a/art/themes/luciano_blocktronics/theme.hjson +++ b/art/themes/luciano_blocktronics/theme.hjson @@ -497,14 +497,15 @@ height: 15 width: 35 itemFormat: "|00|03{subject}|00 {statusIndicator}" - focusItemFormat: "|00|19|15{subject}|00 {statusIndicator}" + focusItemFormat: "|00|19|15{subject!styleUpper}|00 {statusIndicator}" } MT2: { height: 15 width: 34 } TM3: { - focusTextStyle: first upper + focusTextStyle: first lower + styleSGR1: "|00|08" } } } @@ -591,7 +592,7 @@ VM1: { height: 11 width: 22 - focusTextStyle: first upper + focusTextStyle: first lower itemFormat: "|00|07{bbsName}" focusItemFormat: "|00|19|15{bbsName!styleFirstLower}" } @@ -617,7 +618,7 @@ ET8: { width: 32 } TM17: { - focusTextStyle: first upper + focusTextStyle: first lower } } } @@ -805,7 +806,7 @@ 4: { mci: { HM1: { - focusTextStyle: first upper + focusTextStyle: first lower } } } From 8668eedce24f654b1c237216c3b49d85c62b1032 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Mon, 20 Feb 2023 16:21:42 -0600 Subject: [PATCH 149/233] New submenu for activitypub --- art/themes/luciano_blocktronics/MMENU.ANS | Bin 3654 -> 4238 bytes .../luciano_blocktronics/activitypub_menu.ans | Bin 0 -> 3948 bytes .../activitypub_social_manager.ans | Bin 2129 -> 2129 bytes core/activitypub/actor_search.js | 3 + core/oputil/oputil_config.js | 1 + misc/menu_templates/activitypub.in.hjson | 264 ++++++++++++++++++ misc/menu_templates/main.in.hjson | 4 + 7 files changed, 272 insertions(+) create mode 100644 art/themes/luciano_blocktronics/activitypub_menu.ans create mode 100644 misc/menu_templates/activitypub.in.hjson diff --git a/art/themes/luciano_blocktronics/MMENU.ANS b/art/themes/luciano_blocktronics/MMENU.ANS index 28792570e5b996b3aa75892df137062e73b64ed6..198c7d23e1b9fea2ff61a6293311a649e3cfb80a 100644 GIT binary patch literal 4238 zcmb7H!EW0|5OvU7Pd)WeU$zAdw1)tcTu29A@F}fcX*LKyyTg8&5*Mp<#-X#iTxhDgFKE29DR-e9-?=<4oP(Y)daYX zgnUe$>@fDah&ZF0YK6(JYqMC1X^-3idPgy|a*0K7nualXFb65F(Nr~cRs?38 zLOKKi?8H9w%GgDtqiR#3%(Jwx@4VZF7}1XkwT9g}Rs z3ORFzVbM?L1QkeDR2Zyw3^fEyIp zSEy^TAw^^164N6UTrN+yA_ezZi61g$&*|LEw-iXYDPaa90CdG-zD&bD2H;B ztYjnW{&1rC4uexKg${66ZB-lv5Y1yI5)^44C?*LGN+{MH;>8e*{i;j6aTfBZ5ozG1dZX9yCLHc5 z>7=ktV;X&ML454T0~)gURU^#o`PqjHbN>F~6DCl#sr~wro4iYTYJaPQ`}=-sAA3KF z`%Ihx*MkE|fHfS@h~8~jz;2T-pneCUVuQA#H~T7p$Y>l;>M*w_?=F5Vej6`FV<%oz z!UtbO65~OxNBADEz*RRm@)9gPO&lkd65I9AB?J?@DX%hhoY|9$KVk2_8OJ`7b@YY8 zb>D141tTyy&~wyNI0k-3Th{H)aisq>CWZZ)#e{lY`s5@T)YVnV3Nr|0v${^#nMtcG z6`PRd+^%56lMjNf%FT7Y-d1Uomz#hJFk5(}BCQ*R{nBbGkt*QYUWsOjPEo z<+IEm1M^V3&sBb#Hkq+$4h|@P#Qffq+SXZR>LzVSNljqpMA#0jio9<2c#APx%jUoN4pH^IO> zCnYkVmdb;_b;v4yn+q~y{_K-o7v(Z7%qF|5SE=tjT9n?R++>uZ`VwVF16!}X3Ag;) zrhF?~-*tSjKEP@4g+Wfl+om2aUESo_ZH7upTWO7Gf*s^#NLNjMn>Y8Lx63FJSXI%k zvfHA`O_dety;cz168{p(Ce G;r<`C1KxE2 literal 3654 zcmb_f%Wm676m_-%x+>5`y_qfyw2J_wY*P)qa?+s4!bXuI-FQXIv@C!l7Niuz`6|c1 zLjwGhpy!-BLsGVzZYl$mX68Q5J@+y6{zYKF<+O^k|zs)*@vVS#i$weTSz5Jv7Rg$lYkAhnbdPTZ$47M-&~_?Mr8oSY*y* zEo4Vc*h>BVG#?o=3a50))OSwHph;Co;0XpyUrT_?g1F8g0n-_B>m0Lbwq#cOUCY3_ z;RNELAW%9yVh}srBBp@bpzuiyEn|c=DnyAfGVTM0`~-v$oU4e<91Bw$ve(NH&b0y( z1Rp|q)&|6kj;PW{aaaH;bH;$5Mh4D?z0gL|X6$n`gIFSEN{E6Ycq|bcpDH^e25>BS zW>jPu>c~mop{YcryiWnqIX(fGPMB+Wh;dj7kicOti|p=*;n)rWr?MJwa?3yyyKET} zk~9)wBHv?)oq9ut{?gSk7RW&pvAOM^BWJsKVvInjh2>C)}B=ZT-)%F?;RqH2~JJT zpNvCURS7~YFi1#Ey^;BQbE32lG7wSe7^F`k`4uI}WBM7Ieg- z8mlRkK+J(@1y%u~RXbrh8Y^Bvxc*6#u&p^$Et*6h&&21 zTcdg)Hwv-m zTn}zT7?Yqg28iyln-mJk$llcCh&@0F?;yH?fOzh~mKw|XqG|GF;qto3Aq=#D1pz*F zM@f7^SKP|{qFP_CmfJettg5w%TDAHz+AQ;C;}&^Y7Ih;DfM!uB%`9Ot@C3W@@o(6_ z@IYV&s{gK6pYl!Ne7=J333f{Qy9j676t!zM`G#N=lhPMBiB`8e;^nH@MCg&c$nXyE zIEa`Py%?}ISr`-cuA=Fys;V1MzJ@cwg>!PvuaWEqOC_hdYc_=+pvPD2)Za#l+ncI! z)w*1*i(qNAr69u;Fw&{Tf}t;t5=o>fGvlu##_LsCxXZjTgW)~K*Hk6U%-36A)t~vB zfaoCgmzUr+3Si-;{Aoyn9NyaTRtjE!ih(T4>M}3gy0~o?c`PehuA)S>E*NJ0IXJfd z_sud2unAvns#j{pP}Y(~c@nK5816+SDfQbt>gS7_Rq?4nc2p<~&N|#XUoXb+{I=Yz zTwRp;om<@Gu}mVBqP4l7zwhPoG(m9w)D7^Y**Fy%#V3*!y8mpYPwlIdgygerl`X`48eKnOy(? diff --git a/art/themes/luciano_blocktronics/activitypub_menu.ans b/art/themes/luciano_blocktronics/activitypub_menu.ans new file mode 100644 index 0000000000000000000000000000000000000000..5530a12d8a423634fcd798245b53acb189030e46 GIT binary patch literal 3948 zcmb_f%TC)+5Dn_Co9?=3HvR<1RLLSMK&WCtg;YSQvWgJUNZdrc)ZYSrCzkvtsOOxy zFDGu=AdKYrKIY7sGc(twKPg?&pA5#km8<)cua#@~Q@SNCjd?F!UDq~j`je8Ixotob zjj%Qt!?*^PChDff&fSqKc;Sf__*>S5)!qh!ushBzmjq582%5XZ5NISM0$R@3jYWXK z?||m8B70crnRknjvoYj+5znRj2;Na1&jf}cMgX_bn`MKb8h}~=Tt`5`r%g5(2VEr2 z%FVRGWYg4Kf@pL^_mngtH-KJJ49i^U;GA3Im^>JRl3Q4)7CJM6ZJa_l1Oe>8Jtby% z8Zzl1-~sTgp*N*1b{K*IXh>&cuCNqLabORT{i0yLt$pPBoS|EklOBku zGBEKIbK_!;0KXD2kU^m%OwKbrVA*HdnMOS0IOO`1m-*fF=t z8K6)%LV{2)8B`Iux zyJ>6U7=Sd-buqPat&}!~!?vr7z;@(xT3}YKqyq&Fk8!FMmX=bUlmH7mc$A}-CMF8c z;dq{{_7%04p;zb0JgOWlimZGr6bO^SWt+52*@o$jg(206s>Cw$;q&m#Agls|um-5= zh&eG10S_s`5hN@%(PpV2e5+^>2&{}8Pe5b>hk6Q6VsUnLu4eVFPdChE3&Cd~L6WST zBJ7T2l3*)^+TFlk4ng1lb;%lMA&(kK11r-TwT3rgyQfr1u}yOt$+-}p(>T)5!mFVV z-QL0J(fQHo&y%x#6@Z)$-SOe~Gi*T)EBD#~LYjQr1C1kq@d-_Erxe@`KUq{36&&hIrQk)3rn3RAk< zQQ}!JkLcB{F9nr-ix41`mHc7^w;k0*xkML0_!~9Al$`bel@#(yqiAE7V`**ea;1ttHsUD;`eNRUAXCd zdVP5pwEVW^kv@MAW%! zOzPbh64PP1{gnAa06^t`3-pn{54T5Lx9ITEdgrcNY(LZCgD3SHv|@eUhWfmHoIMl| z3smPURd8U};S;Y6{Qp { + if (this.viewControllers.view) { + this.viewControllers.view.setFocus(false); + } return this.displayArtAndPrepViewController( 'main', FormIds.main, diff --git a/core/oputil/oputil_config.js b/core/oputil/oputil_config.js index d979f9b77..0bde1a087 100644 --- a/core/oputil/oputil_config.js +++ b/core/oputil/oputil_config.js @@ -250,6 +250,7 @@ function buildNewConfig() { 'new_user.in.hjson', 'doors.in.hjson', 'file_base.in.hjson', + 'activitypub.in.hjson', ]; let includeFiles = []; diff --git a/misc/menu_templates/activitypub.in.hjson b/misc/menu_templates/activitypub.in.hjson new file mode 100644 index 000000000..8621371d8 --- /dev/null +++ b/misc/menu_templates/activitypub.in.hjson @@ -0,0 +1,264 @@ +{ + "menus": { + "activityPubMenu": { + "desc": "Menu for all ActivityPub actions", + "art": "activitypub_menu", + "prompt": "menuCommand", + "submit": [ + { + "value": { + "command": "S" + }, + "action": "@menu:activityPubActorSearch" + }, + { + "value": { + "command": "C" + }, + "action": "@menu:activityPubUserConfig" + }, + { + "value": { + "command": "M" + }, + "action": "@menu:activityPubFollowingManager" + }, + { + "value": { + "command": "Q" + }, + "action": "@menu:mainMenu" + }, + ] + }, + "activityPubActorSearch": { + "desc": "Viewing ActivityPub", + "module": "activitypub/actor_search", + "config": { + "cls": true, + "art": { + "main": "activitypub_actor_search_main", + "view": "activitypub_actor_view" + } + }, + "form": { + "0": { + "mci": { + "ET1": { + "focus": true, + "maxLength": 70, + "argName": "searchQuery", + "submit": true + } + }, + "submit": { + "*": [ + { + "value": { + "searchQuery": null + }, + "action": "@method:search" + } + ] + }, + "actionKeys": [ + { + "keys": [ + "escape" + ], + "action": "@systemMethod:prevMenu" + } + ] + }, + "1": { + "mci": {}, + "actionKeys": [ + { + "keys": [ + "escape", + "q", + "shift + q" + ], + "action": "@method:backKeyPressed" + }, + { + "keys": [ + "space" + ], + "action": "@method:toggleFollowKeyPressed" + } + ] + } + } + }, + "activityPubUserConfig": { + "desc": "ActivityPub Config", + "module": "./activitypub/user_config", + "config": { + "art": { + "main": "activitypub_user_config_main", + "images": "activitypub_user_config_images" + } + }, + "form": { + "0": { + "mci": { + "TM1": { + "focus": true, + "items": [ + "yes", + "no" + ], + "argName": "enabled" + }, + "TM2": { + "items": [ + "yes", + "no" + ], + "argName": "manuallyApproveFollowers" + }, + "TM3": { + "items": [ + "yes", + "no" + ], + "argName": "hideSocialGraph" + }, + "TM4": { + "items": [ + "yes", + "no" + ], + "argName": "showRealName" + }, + "TL5": { + "argName": "image" + }, + "TL6": { + "argName": "icon" + }, + "BT7": { + "text": "manage images", + "argName": "manageImages", + "submit": true, + "justify": "center" + }, + "TM8": { + "items": [ + "save", + "cancel" + ], + "submit": true, + "argName": "saveOrCancel" + } + }, + "submit": { + "*": [ + { + // :TODO: we need a way to just want the argName *for the submitting item* and drop others + "value": { + "manageImages": null + }, + "action": "@method:mainSubmit" + } + ] + }, + "actionKeys": "@reference:common.escToPrev" + }, + "1": { + "mci": { + "ML1": { + "argName": "imageUrl", + "mode": "edit", + "scrollMode": "start", + "focus": true, + "tabSwitchesView": true + }, + "ML2": { + "argName": "iconUrl", + "mode": "edit", + "scrollMode": "start", + "tabSwitchesView": true + }, + "TM3": { + "items": [ + "save", + "cancel" + ], + "submit": true, + "argName": "imagesSaveOrCancel" + } + }, + "submit": { + "*": [ + { + "value": { + "imagesSaveOrCancel": null + }, + "action": "@method:imagesSubmit" + } + ] + }, + "actionKeys": [ + { + "keys": [ + "escape" + ], + "action": "@method:backToMain" + } + ] + } + } + }, + "activityPubFollowingManager": { + "desc": "Social Manager", + "module": "./activitypub/social_manager", + "config": { + "art": { + "main": "activitypub_social_manager" + } + }, + "form": { + "0": { + "mci": { + "VM1": {}, + "MT2": { + "mode": "preview", + "acceptsFocus": false, + "acceptsInput": false + }, + "TM3": { + "focus": true, + "items": [ + "following", + "followers" + ] + } + }, + "actionKeys": [ + { + "keys": [ + "space" + ], + "action": "@method:spaceKeyPressed" + }, + { + "keys": [ + "down arrow", + "up arrow" + ], + "action": "@method:listKeyPressed" + }, + { + "keys": [ + "escape" + ], + "action": "@systemMethod:prevMenu" + } + ] + } + } + } + } +} \ No newline at end of file diff --git a/misc/menu_templates/main.in.hjson b/misc/menu_templates/main.in.hjson index 208892ab1..755d87986 100644 --- a/misc/menu_templates/main.in.hjson +++ b/misc/menu_templates/main.in.hjson @@ -113,6 +113,10 @@ value: { command: "M" } action: @menu:messageBaseMainMenu } + { + value: { command: "A" } + action: @menu:activityPubMenu + } { value: { command: "E" } action: @menu:privateMailMenu From 036a3dcd586f1d423c8665894511120d5e70fe96 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 20 Feb 2023 16:01:16 -0700 Subject: [PATCH 150/233] Remove actor_cache; use a special collection --- core/activitypub/actor.js | 76 +++++++--------------- core/activitypub/collection.js | 115 +++++++++++++++++++++++++++++++++ core/activitypub/const.js | 3 + core/database.js | 31 ++++----- 4 files changed, 156 insertions(+), 69 deletions(-) diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 1d49752af..35ce3ab74 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -12,16 +12,15 @@ const EnigAssert = require('../enigma_assert'); const ActivityPubSettings = require('./settings'); const ActivityPubObject = require('./object'); const { ActivityStreamMediaType, Collections } = require('./const'); -const apDb = require('../database').dbs.activitypub; const Config = require('../config').get; // deps const _ = require('lodash'); const mimeTypes = require('mime-types'); const { getJson } = require('../http_util.js'); -const { getISOTimestampString } = require('../database.js'); const moment = require('moment'); const paths = require('path'); +const Collection = require('./collection.js'); const ActorCacheExpiration = moment.duration(15, 'days'); const ActorCacheMaxAgeDays = 125; // hasn't been used in >= 125 days, nuke it. @@ -204,16 +203,11 @@ module.exports = class Actor extends ActivityPubObject { // cache our entry if (actor) { - apDb.run( - `REPLACE INTO actor_cache (actor_id, actor_json, subject, timestamp) - VALUES (?, ?, ?, ?);`, - [id, JSON.stringify(actor), subject, getISOTimestampString()], - err => { - if (err) { - // :TODO: log me - } + Collection.addActor(actor, subject, err => { + if (err) { + // :TODO: Log me } - ); + }); } }); }); @@ -228,17 +222,13 @@ module.exports = class Actor extends ActivityPubObject { return; } - apDb.run( - `DELETE FROM actor_cache - WHERE DATETIME(timestamp, "+${ActorCacheMaxAgeDays} days") > DATETIME("now");`, - err => { - if (err) { - // :TODO: log me - } - - return cb(null); // always non-fatal + Collection.removeOldActorEntries(ActorCacheMaxAgeDays, err => { + if (err) { + // :TODO: log me } - ); + + return cb(null); // always non-fatal + }); } static _fromRemoteQuery(id, cb) { @@ -262,40 +252,22 @@ module.exports = class Actor extends ActivityPubObject { } static _fromCache(actorIdOrSubject, cb) { - apDb.get( - `SELECT actor_json, subject, timestamp - FROM actor_cache - WHERE actor_id = ? OR subject = ? - LIMIT 1;`, - [actorIdOrSubject, actorIdOrSubject], - (err, row) => { - if (err) { - return cb(err); - } - - if (!row) { - return cb(Errors.DoesNotExist()); - } - - const timestamp = moment(row.timestamp); - const needsRefresh = moment().isAfter( - timestamp.add(ActorCacheExpiration) - ); - - const obj = ActivityPubObject.fromJsonString(row.actor_json); - if (!obj || !obj.isValid()) { - return cb(Errors.Invalid('Failed to create ActivityPub object')); - } + Collection.actor(actorIdOrSubject, (err, actor, info) => { + if (err) { + return cb(err); + } - const actor = new Actor(obj); - if (!actor.isValid()) { - return cb(Errors.Invalid('Failed to create Actor object')); - } + const needsRefresh = moment().isAfter( + info.timestamp.add(ActorCacheExpiration) + ); - const subject = row.subject || actor.id; - return cb(null, actor, subject, needsRefresh); + actor = new Actor(actor); + if (!actor.isValid()) { + return cb(Errors.Invalid('Failed to create Actor object')); } - ); + + return cb(null, actor, info.subject, needsRefresh); + }); } static _fromWebFinger(actorQuery, cb) { diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index ad94a61c3..6cc915448 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -8,6 +8,7 @@ const { PublicCollectionId: APPublicCollectionId, ActivityStreamMediaType, Collections, + ActorCollectionId, } = require('./const'); const UserProps = require('../user_property'); const { getJson } = require('../http_util'); @@ -15,6 +16,7 @@ const { getJson } = require('../http_util'); // deps const { isString } = require('lodash'); const Log = require('../logger'); +const async = require('async'); module.exports = class Collection extends ActivityPubObject { constructor(obj) { @@ -168,6 +170,119 @@ module.exports = class Collection extends ActivityPubObject { ); } + // Actors is a special collection + static actor(actorIdOrSubject, cb) { + // We always store subjects prefixed with '@' + if (!/^https?:\/\//.test(actorIdOrSubject) && '@' !== actorIdOrSubject[0]) { + actorIdOrSubject = `@${actorIdOrSubject}`; + } + + apDb.get( + `SELECT c.name, c.timestamp, c.owner_actor_id, c.is_private, c.object_json, m.meta_value + FROM collection c, collection_object_meta m + WHERE c.collection_id = ? AND c.name = ? AND (c.object_id LIKE ? OR (m.object_id = c.object_id AND m.meta_name = ? AND m.meta_value LIKE ?)) + LIMIT 1;`, + [ + ActorCollectionId, + Collections.Actors, + actorIdOrSubject, + 'actor_subject', + actorIdOrSubject, + ], + (err, row) => { + if (err) { + return cb(err); + } + + if (!row) { + return cb( + Errors.DoesNotExist(`No Actor found for "${actorIdOrSubject}"`) + ); + } + + const obj = ActivityPubObject.fromJsonString(row.object_json); + if (!obj) { + return cb(Errors.Invalid('Failed to parse Object JSON')); + } + + const info = Collection._rowToObjectInfo(row); + if (row.meta_value) { + info.subject = row.meta_value; + } else { + info.subject = obj.id; + } + + return cb(null, obj, info); + } + ); + } + + static addActor(actor, subject, cb) { + async.waterfall( + [ + callback => { + return apDb.beginTransaction(callback); + }, + (trans, callback) => { + trans.run( + `REPLACE INTO collection (collection_id, name, timestamp, owner_actor_id, object_id, object_json, is_private) + VALUES(?, ?, ?, ?, ?, ?, ?);`, + [ + ActorCollectionId, + Collections.Actors, + getISOTimestampString(), + APPublicCollectionId, + actor.id, + JSON.stringify(actor), + false, + ], + err => { + return callback(err, trans); + } + ); + }, + (trans, callback) => { + trans.run( + `REPLACE INTO collection_object_meta (collection_id, name, object_id, meta_name, meta_value) + VALUES(?, ?, ?, ?, ?);`, + [ + ActorCollectionId, + Collections.Actors, + actor.id, + 'actor_subject', + subject, + ], + err => { + return callback(err, trans); + } + ); + }, + ], + (err, trans) => { + if (err) { + trans.rollback(err => { + return cb(err); + }); + } else { + trans.commit(err => { + return cb(err); + }); + } + } + ); + } + + static removeOldActorEntries(maxAgeDays, cb) { + apDb.run( + `DELETE FROM collection + WHERE collection_id = ? AND name = ? AND DATETIME(timestamp, "+${maxAgeDays} days") > DATETIME("now");`, + [ActorCollectionId, Collections.Actors], + err => { + return cb(err); + } + ); + } + // Get Object(s) by ID; There may be multiples as they may be // e.g. Actors belonging to multiple followers collections. // This method also returns information about the objects diff --git a/core/activitypub/const.js b/core/activitypub/const.js index 751b2ea47..39483bcc2 100644 --- a/core/activitypub/const.js +++ b/core/activitypub/const.js @@ -2,6 +2,8 @@ exports.ActivityStreamsContext = 'https://www.w3.org/ns/activitystreams'; exports.PublicCollectionId = 'https://www.w3.org/ns/activitystreams#Public'; exports.ActivityStreamMediaType = 'application/activity+json'; +exports.ActorCollectionId = exports.PublicCollectionId + 'Actors'; + const WellKnownActivity = { Create: 'Create', Update: 'Update', @@ -39,5 +41,6 @@ const Collections = { Outbox: 'outbox', Inbox: 'inbox', SharedInbox: 'sharedInbox', + Actors: 'actors', }; exports.Collections = Collections; diff --git a/core/database.js b/core/database.js index bab1ffbf5..007773159 100644 --- a/core/database.js +++ b/core/database.js @@ -473,23 +473,6 @@ dbs.message.run( activitypub: cb => { enableForeignKeys(dbs.activitypub); - // Actors we know about and have cached - dbs.activitypub.run( - `CREATE TABLE IF NOT EXISTS actor_cache ( - actor_id VARCHAR NOT NULL, -- Fully qualified Actor ID/URL - actor_json VARCHAR NOT NULL, -- Actor document - subject VARCHAR, -- Subject obtained from WebFinger, e.g. @Username@some.domain - timestamp DATETIME NOT NULL, -- Timestamp in which this Actor was cached - - UNIQUE(actor_id) - );` - ); - - dbs.activitypub.run( - `CREATE INDEX IF NOT EXISTS actor_cache_actor_id_index0 - ON actor_cache (actor_id);` - ); - // ActivityPub Collections of various types such as followers, following, likes, ... dbs.activitypub.run( `CREATE TABLE IF NOT EXISTS collection ( @@ -515,6 +498,20 @@ dbs.message.run( ON collection (name, collection_id);` ); + // Collection meta contains 0:N additional metadata records for a object_id in a collection + dbs.activitypub.run( + `CREATE TABLE IF NOT EXISTS collection_object_meta ( + collection_id VARCHAR NOT NULL, + name VARCHAR NOT NULL, + object_id VARCHAR NOT NULL, + meta_name VARCHAR NOT NULL, + meta_value VARCHAR NOT NULL, + + UNIQUE(collection_id, object_id, meta_name), + FOREIGN KEY(name, collection_id, object_id) REFERENCES collection(name, collection_id, object_id) ON DELETE CASCADE + );` + ); + return cb(null); }, }; From 777df9f879520df3f506bee89bec50a7241688ca Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 20 Feb 2023 16:36:34 -0700 Subject: [PATCH 151/233] Tidy names --- .../luciano_blocktronics/activitypub_menu.ans | Bin 3948 -> 3949 bytes art/themes/luciano_blocktronics/theme.hjson | 269 +++++++++--------- core/activitypub/social_manager.js | 2 +- misc/menu_templates/activitypub.in.hjson | 6 +- 4 files changed, 139 insertions(+), 138 deletions(-) diff --git a/art/themes/luciano_blocktronics/activitypub_menu.ans b/art/themes/luciano_blocktronics/activitypub_menu.ans index 5530a12d8a423634fcd798245b53acb189030e46..5b91b3bc058925d282109cb366e9930b1ad37513 100644 GIT binary patch delta 27 jcmaDO_f~GhYd%J<$*=jMIhptw7#JA?7{n+0^UDGNgOmqC delta 25 hcmaDW_eO5RYre^E_@X%(_!$@&83P!^CI|4#0swnE2Q~lz diff --git a/art/themes/luciano_blocktronics/theme.hjson b/art/themes/luciano_blocktronics/theme.hjson index 77497d37e..4243dda1f 100644 --- a/art/themes/luciano_blocktronics/theme.hjson +++ b/art/themes/luciano_blocktronics/theme.hjson @@ -429,140 +429,6 @@ } } - // :TODO: move this to the right area, rename, etc. - mainMenuActivityPubUserConfig: { - config: { - mainInfoFormat10: "{subject}" - } - 0: { - mci: { - TM1: { - focusTextStyle: first lower - } - TM2: { - focusTextStyle: first lower - } - TM3: { - focusTextStyle: first lower - } - TM4: { - focusTextStyle: first lower - } - TL5: { - width: 70 - } - TL6: { - width: 70 - } - BT7: { - width: 20 - itemFormat: "|00|08[ |03{text} |08]" - focusItemFormat: "|00|15[ |19|15{text}|16 |15]" - focusTextStyle: first lower - } - TM8: { - focusTextStyle: first lower - } - TL10: { - width: 40 - } - } - } - 1: { - mci: { - ML1: { - height: 4 - width: 70 - } - ML2: { - height: 4 - width: 70 - } - TM3: { - focusTextStyle: first lower - } - } - } - } - - activityPubFollowingManager: { - config: { - selectedActorInfoFormat: "|00|15{preferredUsername} |08(|02{name}|08)\n|07following|08: {statusIndicator}\n\n|06{plainTextSummary}" - statusIndicatorEnabled: "|00|10√" - staticIndicatorDisabled: "|00|12X" - } - 0: { - mci: { - VM1: { - height: 15 - width: 35 - itemFormat: "|00|03{subject}|00 {statusIndicator}" - focusItemFormat: "|00|19|15{subject!styleUpper}|00 {statusIndicator}" - itemFormat: "|00{statusIndicator} |00|03{subject}" - focusItemFormat: "|00{statusIndicator} |00|19|15{subject}" - textOverflow: "..." - } - MT2: { - height: 15 - width: 34 - } - TM3: { - focusTextStyle: first lower - styleSGR1: "|00|08" - } - } - } - } - - // :TODO: move this to the right area, rename, etc. - mainMenuActivityPubActorSearch: { - config: { - followingIndicator: "|00|14> |10Following|08!|14 <" - notFollowingIndicator: "|00|14> |02Not Following|14 <" - viewInfoFormat10: "{actorFollowingIndicator}" - } - 0: { - mci: { - TL1: { - width: 70 - submit: true - } - } - } - 1: { - mci: { - TL1: { - width: 70 - } - TL2: { - width: 70 - } - TL3: { - width: 70 - } - TL4: { - width: 10 - } - TL5: { - width: 4 - } - TL6: { - width: 4 - } - MT7: { - focus: true - width: 69 - height: 3 - mode: preview - } - TL10: { - width: 24 - - } - } - } - } - mainMenuRumorz: { 0: { mci: { @@ -1394,6 +1260,141 @@ } } + // + // ActivityPub + // + activityPubUserConfig: { + config: { + mainInfoFormat10: "{subject}" + } + 0: { + mci: { + TM1: { + focusTextStyle: first lower + } + TM2: { + focusTextStyle: first lower + } + TM3: { + focusTextStyle: first lower + } + TM4: { + focusTextStyle: first lower + } + TL5: { + width: 70 + } + TL6: { + width: 70 + } + BT7: { + width: 20 + itemFormat: "|00|08[ |03{text} |08]" + focusItemFormat: "|00|15[ |19|15{text}|16 |15]" + focusTextStyle: first lower + } + TM8: { + focusTextStyle: first lower + } + TL10: { + width: 40 + } + } + } + 1: { + mci: { + ML1: { + height: 4 + width: 70 + } + ML2: { + height: 4 + width: 70 + } + TM3: { + focusTextStyle: first lower + } + } + } + } + + activityPubSocialManager: { + config: { + selectedActorInfoFormat: "|00|15{preferredUsername} |08(|02{name}|08)\n|07following|08: {statusIndicator}\n\n|06{plainTextSummary}" + statusIndicatorEnabled: "|00|10√" + staticIndicatorDisabled: "|00|12X" + } + 0: { + mci: { + VM1: { + height: 15 + width: 35 + itemFormat: "|00|03{subject}|00 {statusIndicator}" + focusItemFormat: "|00|19|15{subject!styleUpper}|00 {statusIndicator}" + itemFormat: "|00{statusIndicator} |00|03{subject}" + focusItemFormat: "|00{statusIndicator} |00|19|15{subject}" + textOverflow: "..." + } + MT2: { + height: 15 + width: 34 + } + TM3: { + focusTextStyle: first lower + styleSGR1: "|00|08" + } + } + } + } + + activityPubActorSearch: { + config: { + followingIndicator: "|00|14> |10Following|08!|14 <" + notFollowingIndicator: "|00|14> |02Not Following|14 <" + viewInfoFormat10: "{actorFollowingIndicator}" + } + 0: { + mci: { + TL1: { + width: 70 + submit: true + } + } + } + 1: { + mci: { + TL1: { + width: 70 + } + TL2: { + width: 70 + } + TL3: { + width: 70 + } + TL4: { + width: 10 + } + TL5: { + width: 4 + } + TL6: { + width: 4 + } + MT7: { + focus: true + width: 69 + height: 3 + mode: preview + } + TL10: { + width: 24 + + } + } + } + } + mrc: { config: { messageFormat: "|00|10<|02{fromUserName}|10>|00 |03{message}|00" diff --git a/core/activitypub/social_manager.js b/core/activitypub/social_manager.js index bd7ddfe14..ae2bb66f8 100644 --- a/core/activitypub/social_manager.js +++ b/core/activitypub/social_manager.js @@ -35,7 +35,7 @@ const MciViewIds = { }, }; -exports.getModule = class ActivityPubFollowingManager extends MenuModule { +exports.getModule = class activityPubSocialManager extends MenuModule { constructor(options) { super(options); this.setConfigWithExtraArgs(options); diff --git a/misc/menu_templates/activitypub.in.hjson b/misc/menu_templates/activitypub.in.hjson index 8621371d8..725f680bd 100644 --- a/misc/menu_templates/activitypub.in.hjson +++ b/misc/menu_templates/activitypub.in.hjson @@ -1,7 +1,7 @@ { "menus": { "activityPubMenu": { - "desc": "Menu for all ActivityPub actions", + "desc": "ActivityPub", "art": "activitypub_menu", "prompt": "menuCommand", "submit": [ @@ -21,7 +21,7 @@ "value": { "command": "M" }, - "action": "@menu:activityPubFollowingManager" + "action": "@menu:activityPubSocialManager" }, { "value": { @@ -211,7 +211,7 @@ } } }, - "activityPubFollowingManager": { + "activityPubSocialManager": { "desc": "Social Manager", "module": "./activitypub/social_manager", "config": { From 40e07d7d84e0769e2024acb33b10f1c2796039fd Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 20 Feb 2023 16:39:51 -0700 Subject: [PATCH 152/233] Format HJSON --- misc/menu_templates/activitypub.in.hjson | 376 ++++++++++------------- 1 file changed, 157 insertions(+), 219 deletions(-) diff --git a/misc/menu_templates/activitypub.in.hjson b/misc/menu_templates/activitypub.in.hjson index 725f680bd..b83c3e503 100644 --- a/misc/menu_templates/activitypub.in.hjson +++ b/misc/menu_templates/activitypub.in.hjson @@ -1,264 +1,202 @@ { - "menus": { - "activityPubMenu": { - "desc": "ActivityPub", - "art": "activitypub_menu", - "prompt": "menuCommand", - "submit": [ + menus: { + activityPubMenu: { + desc: ActivityPub + art: activitypub_menu + prompt: menuCommand + submit: [ { - "value": { - "command": "S" - }, - "action": "@menu:activityPubActorSearch" - }, + value: {command: "S"} + action: @menu:activityPubActorSearch + } { - "value": { - "command": "C" - }, - "action": "@menu:activityPubUserConfig" - }, + value: {command: "C"} + action: @menu:activityPubUserConfig + } { - "value": { - "command": "M" - }, - "action": "@menu:activityPubSocialManager" - }, + value: {command: "M"} + action: @menu:activityPubSocialManager + } { - "value": { - "command": "Q" - }, - "action": "@menu:mainMenu" - }, + value: {command: "Q"} + action: @menu:mainMenu + } ] - }, - "activityPubActorSearch": { - "desc": "Viewing ActivityPub", - "module": "activitypub/actor_search", - "config": { - "cls": true, - "art": { - "main": "activitypub_actor_search_main", - "view": "activitypub_actor_view" + } + activityPubActorSearch: { + desc: Viewing ActivityPub + module: activitypub/actor_search + config: { + cls: true + art: { + main: activitypub_actor_search_main + view: activitypub_actor_view } - }, - "form": { - "0": { - "mci": { - "ET1": { - "focus": true, - "maxLength": 70, - "argName": "searchQuery", - "submit": true + } + form: { + 0: { + mci: { + ET1: { + focus: true + maxLength: 70 + argName: searchQuery + submit: true } - }, - "submit": { - "*": [ + } + submit: { + *: [ { - "value": { - "searchQuery": null - }, - "action": "@method:search" + value: {searchQuery: null} + action: @method:search } ] - }, - "actionKeys": [ + } + actionKeys: [ { - "keys": [ - "escape" - ], - "action": "@systemMethod:prevMenu" + keys: ["escape"] + action: @systemMethod:prevMenu } ] - }, - "1": { - "mci": {}, - "actionKeys": [ + } + 1: { + mci: {} + actionKeys: [ { - "keys": [ - "escape", - "q", - "shift + q" - ], - "action": "@method:backKeyPressed" - }, + keys: ["escape", "q", "shift + q"] + action: @method:backKeyPressed + } { - "keys": [ - "space" - ], - "action": "@method:toggleFollowKeyPressed" + keys: ["space"] + action: @method:toggleFollowKeyPressed } ] } } - }, - "activityPubUserConfig": { - "desc": "ActivityPub Config", - "module": "./activitypub/user_config", - "config": { - "art": { - "main": "activitypub_user_config_main", - "images": "activitypub_user_config_images" + } + activityPubUserConfig: { + desc: ActivityPub Config + module: ./activitypub/user_config + config: { + art: { + main: activitypub_user_config_main + images: activitypub_user_config_images } - }, - "form": { - "0": { - "mci": { - "TM1": { - "focus": true, - "items": [ - "yes", - "no" - ], - "argName": "enabled" - }, - "TM2": { - "items": [ - "yes", - "no" - ], - "argName": "manuallyApproveFollowers" - }, - "TM3": { - "items": [ - "yes", - "no" - ], - "argName": "hideSocialGraph" - }, - "TM4": { - "items": [ - "yes", - "no" - ], - "argName": "showRealName" - }, - "TL5": { - "argName": "image" - }, - "TL6": { - "argName": "icon" - }, - "BT7": { - "text": "manage images", - "argName": "manageImages", - "submit": true, - "justify": "center" - }, - "TM8": { - "items": [ - "save", - "cancel" - ], - "submit": true, - "argName": "saveOrCancel" + } + form: { + 0: { + mci: { + TM1: { + focus: true + items: ["yes", "no"] + argName: enabled + } + TM2: { + items: ["yes", "no"] + argName: manuallyApproveFollowers + } + TM3: { + items: ["yes", "no"] + argName: hideSocialGraph } - }, - "submit": { - "*": [ + TM4: { + items: ["yes", "no"] + argName: showRealName + } + TL5: {argName: "image"} + TL6: {argName: "icon"} + BT7: { + text: manage images + argName: manageImages + submit: true + justify: center + } + TM8: { + items: ["save", "cancel"] + submit: true + argName: saveOrCancel + } + } + submit: { + *: [ { // :TODO: we need a way to just want the argName *for the submitting item* and drop others - "value": { - "manageImages": null - }, - "action": "@method:mainSubmit" + value: {manageImages: null} + action: @method:mainSubmit } ] - }, - "actionKeys": "@reference:common.escToPrev" - }, - "1": { - "mci": { - "ML1": { - "argName": "imageUrl", - "mode": "edit", - "scrollMode": "start", - "focus": true, - "tabSwitchesView": true - }, - "ML2": { - "argName": "iconUrl", - "mode": "edit", - "scrollMode": "start", - "tabSwitchesView": true - }, - "TM3": { - "items": [ - "save", - "cancel" - ], - "submit": true, - "argName": "imagesSaveOrCancel" + } + actionKeys: @reference:common.escToPrev + } + 1: { + mci: { + ML1: { + argName: imageUrl + mode: edit + scrollMode: start + focus: true + tabSwitchesView: true + } + ML2: { + argName: iconUrl + mode: edit + scrollMode: start + tabSwitchesView: true + } + TM3: { + items: ["save", "cancel"] + submit: true + argName: imagesSaveOrCancel } - }, - "submit": { - "*": [ + } + submit: { + *: [ { - "value": { - "imagesSaveOrCancel": null - }, - "action": "@method:imagesSubmit" + value: {imagesSaveOrCancel: null} + action: @method:imagesSubmit } ] - }, - "actionKeys": [ + } + actionKeys: [ { - "keys": [ - "escape" - ], - "action": "@method:backToMain" + keys: ["escape"] + action: @method:backToMain } ] } } - }, - "activityPubSocialManager": { - "desc": "Social Manager", - "module": "./activitypub/social_manager", - "config": { - "art": { - "main": "activitypub_social_manager" - } - }, - "form": { - "0": { - "mci": { - "VM1": {}, - "MT2": { - "mode": "preview", - "acceptsFocus": false, - "acceptsInput": false - }, - "TM3": { - "focus": true, - "items": [ - "following", - "followers" - ] + } + activityPubSocialManager: { + desc: Social Manager + module: ./activitypub/social_manager + config: { + art: {main: "activitypub_social_manager"} + } + form: { + 0: { + mci: { + VM1: {} + MT2: {mode: "preview", acceptsFocus: false, acceptsInput: false} + TM3: { + focus: true + items: ["following", "followers"] } - }, - "actionKeys": [ + } + actionKeys: [ { - "keys": [ - "space" - ], - "action": "@method:spaceKeyPressed" - }, + keys: ["space"] + action: @method:spaceKeyPressed + } { - "keys": [ - "down arrow", - "up arrow" - ], - "action": "@method:listKeyPressed" - }, + keys: ["down arrow", "up arrow"] + action: @method:listKeyPressed + } { - "keys": [ - "escape" - ], - "action": "@systemMethod:prevMenu" + keys: ["escape"] + action: @systemMethod:prevMenu } ] } } } } -} \ No newline at end of file +} From c9f9eb9e17f29402542d06a8b04a60cadb21947d Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 20 Feb 2023 17:09:34 -0700 Subject: [PATCH 153/233] Fix SQL bug --- core/activitypub/collection.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index 6cc915448..2be907828 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -180,7 +180,7 @@ module.exports = class Collection extends ActivityPubObject { apDb.get( `SELECT c.name, c.timestamp, c.owner_actor_id, c.is_private, c.object_json, m.meta_value FROM collection c, collection_object_meta m - WHERE c.collection_id = ? AND c.name = ? AND (c.object_id LIKE ? OR (m.object_id = c.object_id AND m.meta_name = ? AND m.meta_value LIKE ?)) + WHERE c.collection_id = ? AND c.name = ? AND m.object_id = c.object_id AND (c.object_id LIKE ? OR (m.meta_name = ? AND m.meta_value LIKE ?)) LIMIT 1;`, [ ActorCollectionId, From ad1ab1f0c5d8207facfd67991a03855c3ca20c84 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 20 Feb 2023 19:13:39 -0700 Subject: [PATCH 154/233] Default to ActivityPub disabled; +op needs to opt-in --- misc/config_template.in.hjson | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/config_template.in.hjson b/misc/config_template.in.hjson index b2a191355..601f61da6 100644 --- a/misc/config_template.in.hjson +++ b/misc/config_template.in.hjson @@ -236,7 +236,7 @@ // others. // See https://www.w3.org/TR/activitypub/ activityPub: { - enabled: true + enabled: false } } From 6e53c25d9998584d4cbab63e6283366b7e1d68c7 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 20 Feb 2023 19:14:11 -0700 Subject: [PATCH 155/233] Default config sets users to AP disabled by default; users can opt-in --- core/config_default.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/config_default.js b/core/config_default.js index 4908b755a..4ebe1a901 100644 --- a/core/config_default.js +++ b/core/config_default.js @@ -139,7 +139,7 @@ module.exports = () => { // See also ./core/activitypub/settings.js activityPub: { - enabled: true, // ActivityPub enabled for this user? + enabled: false, // ActivityPub enabled for this user? manuallyApproveFollowers: false, hideSocialGraph: false, showRealName: true, From e35fc5bf4131a0e56f8c6f1db7e394ae7081e24a Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 20 Feb 2023 19:14:36 -0700 Subject: [PATCH 156/233] Fix password scrubbing --- core/logger.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/logger.js b/core/logger.js index 37f4f3190..83eac3ad4 100644 --- a/core/logger.js +++ b/core/logger.js @@ -72,7 +72,7 @@ module.exports = class Log { return JSON.parse( JSON.stringify(obj).replace( // note that we match against key names here - /"(password|passwordConfirm|key|authCode)"\s?:\s?"([^"]+)"/, + /"(password|passwordConfirm|key|authCode)"\s?:\s?"([^"]+)"/g, (match, keyName) => { return `"${keyName}":"********"`; } From 2495430faec57ff4f7f28e090be7def907b6b349 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 20 Feb 2023 19:14:46 -0700 Subject: [PATCH 157/233] Fix new user pre-creation event * We're abusing Events a bit here, so have to manually track callbacks --- core/user.js | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/core/user.js b/core/user.js index b44a7c9f4..15639b81c 100644 --- a/core/user.js +++ b/core/user.js @@ -525,12 +525,24 @@ module.exports = class User { return callback(null, trans); }, function newUserPreEvent(trans, callback) { - Events.emit(Events.getSystemEvents().NewUserPrePersist, { + const eventName = Events.getSystemEvents().NewUserPrePersist; + const subCount = Events.listenerCount(eventName); + if (subCount < 1) { + return callback(null, trans); + } + + let returned = 0; + const cbWrapper = e => { + ++returned; + if (returned >= subCount) { + return callback(e, trans); + } + }; + + Events.emit(eventName, { user: self, sessionId: createUserInfo.sessionId, - callback: err => { - return callback(err, trans); - }, + callback: cbWrapper, }); }, function saveAll(trans, callback) { From f264e4886e13bb67dd09c2409805c71f08fc4518 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 20 Feb 2023 20:09:58 -0700 Subject: [PATCH 158/233] Fix 'yes'/'no' toggles, consts for well known conf tags/etc. --- core/config_default.js | 10 +++++----- core/message_area.js | 23 +++++++++++++++++------ core/message_const.js | 12 ++++++++++++ core/new_scan.js | 5 +++-- core/toggle_menu_view.js | 6 +++--- misc/menu_templates/activitypub.in.hjson | 8 ++++---- 6 files changed, 44 insertions(+), 20 deletions(-) diff --git a/core/config_default.js b/core/config_default.js index 4ebe1a901..cdab33b1d 100644 --- a/core/config_default.js +++ b/core/config_default.js @@ -907,14 +907,14 @@ module.exports = () => { }, }, - activity_pub: { - name: 'ActivityPub Shared Inbox', - desc: 'Public and shared ActivityPub messages', + activitypub_internal: { + name: 'ActivityPub', + desc: 'Public ActivityPub messages', areas: { activitypub_shared: { - name: 'ActivityPub sharedInbox', - desc: 'Public shared inbox for ActivityPub', + name: 'ActivityPub Public', + desc: 'Public inbox for ActivityPub', alwaysExportExternal: true, subjectOptional: true, addressFlavor: 'activitypub', diff --git a/core/message_area.js b/core/message_area.js index c1a1c3a33..aed52dae4 100644 --- a/core/message_area.js +++ b/core/message_area.js @@ -11,6 +11,11 @@ const sortAreasOrConfs = require('./conf_area_util.js').sortAreasOrConfs; const UserProps = require('./user_property.js'); const StatLog = require('./stat_log.js'); const SysProps = require('./system_property.js'); +const { + SystemInternalConfTags, + WellKnownConfTags, + WellKnownAreaTags, +} = require('./message_const'); // deps const async = require('async'); @@ -93,9 +98,9 @@ function getAvailableMessageConferences(client, options) { assert(client || true === options.noClient); - // perform ACS check per conf & omit system_internal if desired + // perform ACS check per conf & omit "System Internal" if desired return _.omitBy(Config().messageConferences, (conf, confTag) => { - if (!options.includeSystemInternal && 'system_internal' === confTag) { + if (!options.includeSystemInternal && SystemInternalConfTags.includes(confTag)) { return true; } @@ -178,7 +183,7 @@ function getDefaultMessageConferenceTag(client, disableAcsCheck) { // // It's possible that we end up with nothing here! // - // Note that built in 'system_internal' is always ommited here + // Note that built in "System Internal" are always omitted here // const config = Config(); let defaultConf = _.findKey(config.messageConferences, o => o.default); @@ -192,7 +197,7 @@ function getDefaultMessageConferenceTag(client, disableAcsCheck) { // just use anything we can defaultConf = _.findKey(config.messageConferences, (conf, confTag) => { return ( - 'system_internal' !== confTag && + !SystemInternalConfTags.includes(confTag) && (true === disableAcsCheck || client.acs.hasMessageConfRead(conf)) ); }); @@ -545,7 +550,7 @@ function getNewMessageCountAddressedToUser(client, cb) { areaTags, (areaTag, nextAreaTag) => { getMessageAreaLastReadId(client.user.userId, areaTag, (_, lastMessageId) => { - lastMessageId = lastMessageId || 0; + lastMessageId = lastMessageId || 0; // eslint-disable-line no-unused-vars getNewMessageCountInAreaForUser( client.user.userId, areaTag, @@ -847,7 +852,13 @@ function trimMessageAreasScheduledEvent(args, cb) { // const maxExternalSentAgeDays = _.get( Config, - 'messageConferences.system_internal.areas.private_mail.maxExternalSentAgeDays', + [ + 'messageConferences', + WellKnownConfTags.SystemInternal, + 'areas', + WellKnownAreaTags.Private, + 'maxExternalSentAgeDays', + ], 30 ); diff --git a/core/message_const.js b/core/message_const.js index 7769663e0..1f3ea865f 100644 --- a/core/message_const.js +++ b/core/message_const.js @@ -1,3 +1,15 @@ +const WellKnownConfTags = { + Invalid: '', + SystemInternal: 'system_internal', + ActivityPubInternal: 'activitypub_internal', +}; +exports.WellKnownConfTags = WellKnownConfTags; + +exports.SystemInternalConfTags = [ + WellKnownConfTags.SystemInternal, + WellKnownConfTags.ActivityPubInternal, +]; + const WellKnownAreaTags = { Invalid: '', Private: 'private_mail', diff --git a/core/new_scan.js b/core/new_scan.js index 480f8738c..8a0c195c6 100644 --- a/core/new_scan.js +++ b/core/new_scan.js @@ -11,6 +11,7 @@ const FileBaseFilters = require('./file_base_filter.js'); const Errors = require('./enig_error.js').Errors; const { getAvailableFileAreaTags } = require('./file_base_area.js'); const { valueAsArray } = require('./misc_util.js'); +const { SystemInternalConfTags } = require('./message_const'); // deps const _ = require('lodash'); @@ -80,12 +81,12 @@ exports.getModule = class NewScanModule extends MenuModule { ); // - // Sort conferences by name, other than 'system_internal' which should + // Sort conferences by name, other than "System Internal" which should // always come first such that we display private mails/etc. before // other conferences & areas // this.sortedMessageConfs.sort((a, b) => { - if ('system_internal' === a.confTag) { + if (SystemInternalConfTags.includes(a.confTag)) { return -1; } else { return a.conf.name.localeCompare(b.conf.name, { diff --git a/core/toggle_menu_view.js b/core/toggle_menu_view.js index 0e70b94ba..42acd919d 100644 --- a/core/toggle_menu_view.js +++ b/core/toggle_menu_view.js @@ -78,17 +78,17 @@ ToggleMenuView.prototype.setFocusItemIndex = function (index) { }; ToggleMenuView.prototype.setTrue = function () { - this.setFocusItemIndex(0); + this.setFocusItemIndex(1); this.updateSelection(); }; ToggleMenuView.prototype.setFalse = function () { - this.setFocusItemIndex(1); + this.setFocusItemIndex(0); this.updateSelection(); }; ToggleMenuView.prototype.isTrue = function () { - return this.focusedItemIndex === 0; + return this.focusedItemIndex === 1; }; ToggleMenuView.prototype.setFromBoolean = function (bool) { diff --git a/misc/menu_templates/activitypub.in.hjson b/misc/menu_templates/activitypub.in.hjson index b83c3e503..5f4b148e7 100644 --- a/misc/menu_templates/activitypub.in.hjson +++ b/misc/menu_templates/activitypub.in.hjson @@ -87,19 +87,19 @@ mci: { TM1: { focus: true - items: ["yes", "no"] + items: ["no", "yes"] argName: enabled } TM2: { - items: ["yes", "no"] + items: ["no", "yes"] argName: manuallyApproveFollowers } TM3: { - items: ["yes", "no"] + items: ["no", "yes"] argName: hideSocialGraph } TM4: { - items: ["yes", "no"] + items: ["no", "yes"] argName: showRealName } TL5: {argName: "image"} From ccd229d7c6a837dbe0d1437fd9a5f0f13a28e6e2 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 20 Feb 2023 21:49:41 -0700 Subject: [PATCH 159/233] Docs, tidy --- UPGRADE.md | 11 +++++++++-- core/activitypub/actor.js | 4 ++-- core/activitypub/collection.js | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/UPGRADE.md b/UPGRADE.md index 5f2458bef..d327ac35a 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -9,10 +9,10 @@ This document covers basic upgrade notes for major ENiGMA½ version updates. # General Notes ## Configuration File Updates -In general, look at template menu files in `misc/menu_templates`, and `config_template.in.hjson` as well as the default `luciano_blocktronics/theme.hjson` files when you update. These files may come with new sections you wish to merge into your system! +In general, look at template menu files in `misc/menu_templates`, and `config_template.in.hjson` as well as the default `luciano_blocktronics/theme.hjson` files when you update. These files may come with new sections you wish to merge into your system! ### Menus & Theme Updates -Upgrades often come with changes to the default menu templates found in `misc/menu_tempaltes`. You can use these as references for changes and additions to the default menu sets. This also applies to the default `luciano_blocktronics` theme and it's `theme.hjson` file. +Upgrades often come with changes to the default menu templates found in `misc/menu_templates`. You can use these as references for changes and additions to the default menu sets. This also applies to the default `luciano_blocktronics` theme and it's `theme.hjson` file. See [Updating](./docs/admin/updating.md) for details on menu files/etc. @@ -34,6 +34,13 @@ npm install # or simply 'yarn' > :warning: Be sure to inspect these notes during any upgrades! ## 0.0.13-beta to 0.0.14-beta +* A new ActivityPub menu template has been created. Upgrades will **not** have this file present so you will need to copy the template to your `config/menus` directory and rename it appropriately (it must match the `include` statement in your main `menu.hjson` file). Example: +```bash +cp ./misc/menu_templates/activitypub.in.hjson ./config/menus/my_board_name-activitypub.hjson` +``` + +This will expose the default ActivityPub setup. Enabling ActivityPub functionality requires the web server enabled and ActivityPub itself enabled in your `config.hjson`. + ## 0.0.12-beta to 0.0.13-beta * To enable the new Waiting for Caller (WFC) support, please see [WFC](docs/modding/wfc.md). diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 35ce3ab74..f5c9b88c3 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -222,9 +222,9 @@ module.exports = class Actor extends ActivityPubObject { return; } - Collection.removeOldActorEntries(ActorCacheMaxAgeDays, err => { + Collection.removeExpiredActors(ActorCacheMaxAgeDays, err => { if (err) { - // :TODO: log me + Log.error('Failed removing expired Actor items'); } return cb(null); // always non-fatal diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index 2be907828..ac0c5af26 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -272,7 +272,7 @@ module.exports = class Collection extends ActivityPubObject { ); } - static removeOldActorEntries(maxAgeDays, cb) { + static removeExpiredActors(maxAgeDays, cb) { apDb.run( `DELETE FROM collection WHERE collection_id = ? AND name = ? AND DATETIME(timestamp, "+${maxAgeDays} days") > DATETIME("now");`, From 43cdaf0c5db43c15d1c8d9b452d37727c8748d3d Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Wed, 22 Feb 2023 12:59:17 -0600 Subject: [PATCH 160/233] Minor cleanup items --- config/achievements.hjson | 469 -------------------------------------- docs/_config.yml | 2 +- 2 files changed, 1 insertion(+), 470 deletions(-) delete mode 100644 config/achievements.hjson diff --git a/config/achievements.hjson b/config/achievements.hjson deleted file mode 100644 index 758af5622..000000000 --- a/config/achievements.hjson +++ /dev/null @@ -1,469 +0,0 @@ - /* - ./\/\." ENiGMA½ Achievement Configuration -/--/-------- - -- - - - _____________________ _____ ____________________ __________\_ / - \__ ____/\_ ____ \ /____/ / _____ __ \ / ______/ // /___jp! - // __|___// | \// |// | \// | | \// \ /___ /_____ - /____ _____| __________ ___|__| ____| \ / _____ \ - ---- \______\ -- |______\ ------ /______/ ---- |______\ - |______\ /__/ // ___/ - /__ _\ - <*> ENiGMA½ // HTTPS://GITHUB.COM/NUSKOOLER/ENIGMA-BBS <*> /__/ - - *-----------------------------------------------------------------------------* - - General Information - ------------------------------- - - - This configuration is in HJSON (http://hjson.org/) format. Strict to-spec - JSON is also perfectly valid. Use "hjson" from npm to convert to/from JSON. - - See http://hjson.org/ for more information and syntax. - - Various editors and IDEs such as Sublime Text 3 Visual Studio Code and so - on have syntax highlighting for the HJSON format which are highly recommended. - - ------------------------------- -- - - - Achievement Configuration - ------------------------------- - - - Achievements are currently fairly limited in what can trigger them. This is - being expanded upon and more will be available in the near future. For now - you should mostly be interested in: - - Perhaps adding additional *levels* of triggers & points - - Applying customizations via the achievements section in theme.hjson - - Some tips: - - For 'userStatSet' types, see user_property.js - - Don"t forget to RTFM ...er uh... see the documentation for more information and - don"t be shy to ask for help: - - BBS : Xibalba @ xibalba.l33t.codes - FTN : BBS Discussion on fsxNet or ArakNet - IRC : #enigma-bbs / FreeNode - Email : bryan@l33t.codes -*/ -{ - // Set to false to disable the achievement system - enabled : true - - art : { - localHeader: achievement_local_header - localFooter: achievement_local_footer - globalHeader: achievement_global_header - globalFooter: achievement_global_footer - } - - achievements: { - user_login_count: { - type: userStatSet - statName: login_count - match: { - 2: { - title: "Return Caller" - globalText: "{userName} has returned to {boardName}!" - text: "You've returned to {boardName}!" - points: 5 - } - 10: { - title: "Curious Caller" - globalText: "{userName} has logged into {boardName} {achievedValue} times!" - text: "You've logged into {boardName} {achievedValue} times!" - points: 10 - } - 25: { - title: "Inquisitive" - globalText: "{userName} has logged into {boardName} {achievedValue} times!" - text: "You've logged into {boardName} {achievedValue} times!" - points: 10 - } - 75: { - title: "Still Interested!" - globalText: "{userName} has logged into {boardName} {achievedValue} times!" - text: "You've logged into {boardName} {achievedValue} times!" - points: 15 - } - 100: { - title: "Regular Customer" - globalText: "{userName} has logged into {boardName} {achievedValue} times!" - text: "You've logged into {boardName} {achievedValue} times!" - points: 25 - } - 250: { - title: "Speed Dial", - globalText: "{userName} has logged into {boardName} {achievedValue} times!" - text: "You've logged into {boardName} {achievedValue} times!" - points: 50 - } - 500: { - title: "System Addict" - globalText: "{userName} the BBS {boardName} addict has logged in {achievedValue} times!" - text: "You're a {boardName} addict! You've logged in {achievedValue} times!" - points: 50 - } - } - } - - user_post_count: { - type: userStatSet - statName: post_count - match: { - 2: { - title: "Poster" - globalText: "{userName} has posted {achievedValue} messages!" - text: "You've posted {achievedValue} messages!" - points: 5 - } - 5: { - title: "Poster... again!", - globalText: "{userName} has posted {achievedValue} messages!" - text: "You've posted {achievedValue} messages!" - points: 5 - } - 20: { - title: "Just Want to Talk", - globalText: "{userName} has posted {achievedValue} messages!" - text: "You've posted {achievedValue} messages!" - points: 10 - } - 100: { - title: "Probably Just Spam", - globalText: "{userName} has posted {achievedValue} messages!" - text: "You've posted {achievedValue} messages!" - points: 25 - } - 250: { - title: "Scribe" - globalText: "{userName} the scribe has posted {achievedValue} messages!" - text: "Such a scribe! You've posted {achievedValue} messages!" - points: 50 - } - 500: { - title: "Writing a Book" - globalText: "{userName} is writing a book and has posted {achievedValue} messages!" - text: "You've posted {achievedValue} messages!" - points: 50 - } - } - } - - user_upload_count: { - type: userStatSet - statName: ul_total_count - match: { - 1: { - title: "Uploader" - globalText: "{userName} has uploaded a file!" - text: "You've uploaded somthing!" - points: 5 - } - 10: { - title: "Moar Uploads!" - globalText: "{userName} has uploaded {achievedValue} files!" - text: "You've uploaded {achievedValue} files!" - points: 10 - } - 50: { - title: "Contributor" - globalText: "{userName} has uploaded {achievedValue} files!" - text: "You've uploaded {achievedValue} files!" - points: 25 - - } - 100: { - title: "Courier" - globalText: "Courier {userName} has uploaded {achievedValue} files!" - text: "You've uploaded {achievedValue} files!" - points: 50 - } - 200: { - title: "Must Be a Drop Site" - globalText: "{userName} has uploaded a whomping {achievedValue} files!" - text: "You've uploaded a whomping {achievedValue} files!" - points: 55 - } - } - } - - user_upload_bytes: { - type: userStatSet - statName: ul_total_bytes - match: { - 10240: { - text: "UNIVAC Drum" - globalText: "{userName} has uploaded 10k. Enough to fill a UNIVAC drum!" - text: "You've uploaded 10k. Enough to fill a UNIVAC drum!" - points: 5 - } - 524288: { - title: "Kickstart" - globalText: "{userName} has uploaded 512KB, enough for a Kickstart!" - text: "You've uploaded 512KB, enough for a Kickstart!" - points: 10 - } - 1474560: { - title: "AOL Disk Anyone?" - globalText: "{userName} has uploaded 1.44M worth of data. Hopefully it's not AOL!" - title: "You've uploaded 1.44M worth of data. Hopefully it's not AOL!" - points: 10 - } - 6291456: { - title: "A Quake of a Upload" - globalText: "{userName} has uploaded 6 x 1.44MB disks worth of data. That's the size of Quake for DOS!" - text: "You've uploaded 6 x 1.44MB disks worth of data. That's the size of Quake for DOS!" - points: 20 - } - 104857600: { - title: "Zip 100" - globalText: "{userName} has uploaded a Zip 100 disk's worth of data!" - text: "You've uploaded a Zip 100 disk's worth of data!" - points: 25 - } - 1073741824: { - title: "Gigabyte!" - globalText: "{userName} has uploaded a Gigabyte worth of data!" - text: "You've uploaded a Gigabyte worth of data!" - points: 50 - } - 3407872000: { - title: "Encarta" - globalText: "{userName} has uploaded 5xCD discs worth of data. That's the size of Encarta!" - text: "You've uploaded 5xCD discs worth of data. That's the size of Encarta!" - points: 50 - } - 7025459200: { - title: "NFL_Madden_2007_USA_BLURAY_DIRFIX_PS3-PARADOX" - globalText: "{userName} has uploaded 67x100 MiB worth of data, the size of the worlds first PS3 rip!" - text: "You've uploaded 67x100 MiB worth of data, the size of the world first PS3 rip!" - points: 100 - } - 25018184499: { - title: "WaYsTeD" - globalText: "{userName} has uploaded 23.3 GiB of data, the size of the first PS4 rip: Watch.Dogs.PS4-WaYsTeD!" - text: "You've uploaded 23.3 GiB of data, the size of the first PS4 rip: Watch.Dogs.PS4-WaYsTeD!" - points: 150 - } - } - } - - user_download_count: { - type: userStatSet - statName: dl_total_count - match: { - 1: { - title: "Downloader" - globalText: "{userName} has downloaded a file!" - text: "You've downloaded somthing!" - points: 5 - } - 10: { - title: "Moar Downloads!" - globalText: "{userName} has downloaded {achievedValue} files!" - text: "You've downloaded {achievedValue} files!" - points: 10 - } - 50: { - title: "Leecher" - globalText: "{userName} has leeched {achievedValue} files!" - text: "You've leeched... er... downloaded {achievedValue} files!" - points: 15 - } - 100: { - title: "Hoarder" - globalText: "{userName} has downloaded {achievedValue} files!" - text: "Hoarding files? You've downloaded {achievedValue} files!" - points: 20 - } - 200: { - title: "Digital Archivist" - globalText: "{userName} the digital archivist has {achievedValue} files!" - text: "Building an archive? You've downloaded {achievedValue} files!" - points: 25 - } - } - } - - user_download_bytes: { - type: userStatSet - statName: dl_total_bytes - match: { - 655360: { - title: "Ought to be Enough" - globalText: "{userName} has downloaded 640K. Ought to be enough for anyone!" - text: "You've downloaded 640K. Ought to be enough for anyone!" - points: 5 - } - 1474560: { - title: "Fits on a Floppy" - globalText: "{userName} has downloaded 1.44MB worth of data!" - text: "You've downloaded 1.44MB of data!" - points: 5 - } - 104857600: { - title: "Click of Death" - globalText: "{userName} has downloaded 100MB... perhaps to a Zip Disk?" - text: "You've downloaded 100MB of data... perhaps to a Zip Disk?" - points: 10 - } - 681574400: { - title: "CD Rip" - globalText: "{userName} has downloaded a CD-ROM's worth of data!" - text: "You've downloaded a CD-ROM's worth of data!" - points: 15 - } - 1073741824: { - title: "Like One Hundred Floppys, Man" - globalText: "{userName} has downloaded {achievedValue!sizeWithAbbr} of data!" - text: "You've downloaded {achievedValue!sizeWithAbbr} of data!" - points: 25 - } - 5368709120: { - title: "That's a Lot of Bits!" - globalText: "{userName} has downloaded {achievedValue!sizeWithAbbr} of data!" - text: "You've downloaded {achievedValue!sizeWithAbbr} of data!" - } - } - } - - user_door_runs: { - type: userStatSet - statName: door_run_total_count - match: { - 1: { - title: "Nostalgia Toe Dip", - globalText: "{userName} ran a door!" - text: "You ran a door!" - points: 5 - }, - 10: { - title: "This is Kinda Fun" - globalText: "{userName} ran {achievedValue} doors!" - text: "You've run {achievedValue} doors!" - points: 10 - } - 50: { - title: "Gamer" - globalText: "{userName} ran {achievedValue} doors!" - text: "You've run {achievedValue} doors!" - points: 20 - } - 100: { - title: "Trying Them All" - globalText: "{userName} must really like textmode and has run {achievedValue} doors!" - text: "You've run {achievedValue} doors! You must really like textmode!" - points: 50 - } - 200: { - title: "Dropfile Enthusiast" - globalText: "{userName} the dropfile enthusiast ran {achievedValue} doors!" - text: "You're a dropfile enthusiast! You've run {achievedValue} doors!" - points: 55 - } - } - } - - user_individual_door_run_minutes: { - type: userStatInc - statName: door_run_total_minutes - retroactive: false - match: { - 1: { - title: "Nevermind!" - globalText: "{userName} ran a door for {achievedValue!durationMinutes}. Guess it's not their thing!" - text: "You ran a door for only {achievedValue!durationMinutes}. Not your thing?" - points: 5 - } - 10: { - title: "It's OK I Guess" - globalText: "{userName} ran a door for {achievedValue!durationMinutes}!" - text: "You ran a door for {achievedValue!durationMinutes}!" - points: 10 - } - 30: { - title: "Good Game" - globalText: "{userName} ran a door for {achievedValue!durationMinutes}!" - text: "You ran a door for {achievedValue!durationMinutes}!" - points: 20 - } - 60: { - title: "What? Limited Turns?!" - globalText: "{userName} has spent {achievedValue!durationMinutes} in a door!" - text: "You've spent {achievedValue!durationMinutes} in a door!" - points: 25 - } - 120: { - title: "It's the Only One I Know!" - globalText: "{userName} has spent {achievedValue!durationMinutes} in a door!" - text: "You've spent {achievedValue!durationMinutes} in a door!" - points: 50 - } - 240: { - title: "Possible Addict" - globalText: "{userName} has spent {achievedValue!durationMinutes} in a door!" - text: "You've spent {achievedValue!durationMinutes} in a door!" - points: 55 - } - } - } - - user_door_run_total_minutes: { - type: userStatIncNewVal - statName: door_run_total_minutes - match: { - 10: { - title: "Enough for the Instructions" - globalText: "{userName} has spent {achievedValue!durationMinutes} playing doors!" - text: "You've spent {achievedValue!durationMinutes} playing doors!" - points: 10 - } - 30: { - title: "Probably Just L.O.R.D." - globalText: "{userName} has spent {achievedValue!durationMinutes} playing doors!" - text: "You've spent {achievedValue!durationMinutes} playing doors!" - points: 20 - } - 60: { - title: "Retro or Bust" - globalText: "{userName} has spent {achievedValue!durationMinutes} playing doors!" - text: "You've spent {achievedValue!durationMinutes} playing doors!" - points: 25 - } - 240: { - title: "Textmode Dragon Slayer" - globalText: "{userName} has spent {achievedValue!durationMinutes} playing doors!" - text: "You've spent {achievedValue!durationMinutes} playing doors!" - points: 50 - } - } - } - - user_total_system_online_minutes: { - type: userStatSet - statName: minutes_online_total_count - match: { - 30: { - title: "Just Poking Around" - globalText: "{userName} has spent {achievedValue!durationMinutes} on {boardName}!" - text: "You've been on {boardName} for a total of {achievedValue!durationMinutes}!" - points: 5 - } - 60: { - title: "Mildly Interesting" - globalText: "{userName} has spent {achievedValue!durationMinutes} on {boardName}!" - text: "You've been on {boardName} for a total of {achievedValue!durationMinutes}!" - points: 15 - } - 120: { - title: "Nothing Better to Do" - globalText: "{userName} has spent {achievedValue!durationMinutes} on {boardName}!" - text: "You've been on {boardName} for a total of {achievedValue!durationMinutes}!" - points: 25 - } - 1440: { - title: "Idle Bot" - globalText: "{userName} is probably a bot. They've spent {achievedValue!durationMinutes} on {boardName}!" - text: "You're a bot, aren't you? You've been on {boardName} for a total of {achievedValue!durationMinutes}!" - points: 55 - } - } - } - } -} diff --git a/docs/_config.yml b/docs/_config.yml index 8520d124e..a305c956c 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -125,8 +125,8 @@ collections: - modding/user-2fa-otp-config.md - modding/autosig-edit.md - modding/menu-modules.md - - admin/administration.md - modding/wfc.md + - admin/administration.md - admin/oputil.md - admin/updating.md - troubleshooting/monitoring-logs.md From 8822a7cc3d9efc9bd25d189fb168b3579df1e065 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 23 Feb 2023 20:47:36 -0700 Subject: [PATCH 161/233] Tidy --- core/config_default.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/config_default.js b/core/config_default.js index cdab33b1d..98ae42576 100644 --- a/core/config_default.js +++ b/core/config_default.js @@ -415,13 +415,13 @@ module.exports = () => { // General ActivityPub integration configuration activityPub: { + // by default, don't include auto-signatures in AP outgoing + autoSignatures: false, + // Mimics Mastodon max 500 characters for *outgoing* Notes // (messages destined for ActivityPub); This is a soft limit; // Implementations including Mastodon should still display // longer messages, but this keeps us as a "good citizen" - autoSignatures: false, - - // by default, don't include auto-signatures in AP outgoing maxMessageLength: 500, }, From 86d2aeb9de6ca66830cea7e053e92b1d6b715e4e Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 23 Feb 2023 20:48:07 -0700 Subject: [PATCH 162/233] Oops, include ActivityPub in confs! --- core/message_const.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/core/message_const.js b/core/message_const.js index 1f3ea865f..bb742ed2c 100644 --- a/core/message_const.js +++ b/core/message_const.js @@ -5,10 +5,7 @@ const WellKnownConfTags = { }; exports.WellKnownConfTags = WellKnownConfTags; -exports.SystemInternalConfTags = [ - WellKnownConfTags.SystemInternal, - WellKnownConfTags.ActivityPubInternal, -]; +exports.SystemInternalConfTags = [WellKnownConfTags.SystemInternal]; const WellKnownAreaTags = { Invalid: '', From 22349a23eccae8fc8e1fb1e4cb0ca6ea84f281de Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 23 Feb 2023 22:20:54 -0700 Subject: [PATCH 163/233] New ACS: SE allows checking if various services are enabled --- core/acs_parser.js | 81 +++++++++++++++++++++++++++++++++ core/config_default.js | 4 ++ docs/_docs/configuration/acs.md | 1 + misc/acs_parser.pegjs | 50 ++++++++++++++++++-- 4 files changed, 132 insertions(+), 4 deletions(-) diff --git a/core/acs_parser.js b/core/acs_parser.js index 55e2e820f..d203fc0e4 100644 --- a/core/acs_parser.js +++ b/core/acs_parser.js @@ -936,6 +936,7 @@ function peg$parse(input, options) { const UserProps = require('./user_property.js'); const Log = require('./logger.js').log; const User = require('./user.js'); + const Config = require('./config.js').get; const _ = require('lodash'); const moment = require('moment'); @@ -946,6 +947,86 @@ function peg$parse(input, options) { function checkAccess(acsCode, value) { try { return { + SE: function servicesEnabled() { + if (!Array.isArray(value)) { + value = [value]; + } + const config = Config(); + const webEnabled = () => { + return ( + true === _.get(config, 'contentServers.web.http.enabled') || + true === _.get(config, 'contentServers.web.https.enabled') + ); + }; + + const allEnabled = value.every(svcName => { + switch (svcName) { + case 'http': + return ( + true === + _.get(config, 'contentServers.web.http.enabled') + ); + + case 'https': + return ( + true === + _.get(config, 'contentServers.web.https.enabled') + ); + + case 'web': + return webEnabled(); + + case 'gopher': + return ( + true === + _.get(config, 'contentServers.gopher.enabled') + ); + + case 'nttp': + return ( + true === + _.get(config, 'contentServers.nntp.nntp.enabled') + ); + + case 'nntps': + return ( + true === + _.get(config, 'contentServers.nntp.nntps.enabled') + ); + + case 'activitypub': + return ( + webEnabled() && + true === + _.get( + config, + 'contentServers.web.handlers.activityPub.enabled' + ) + ); + + case 'nodeinfo2': + return ( + webEnabled() && + true === + _.get( + config, + 'contentServers.web.handlers.nodeInfo2.enabled' + ) + ); + + case 'webfinger': + return ( + webEnabled() && + true === + _.get( + config, + 'contentServers.web.handlers.webFinger.enabled' + ) + ); + } + }); + return allEnabled; + }, LC: function isLocalConnection() { return client && client.isLocal(); }, diff --git a/core/config_default.js b/core/config_default.js index 98ae42576..ce272a199 100644 --- a/core/config_default.js +++ b/core/config_default.js @@ -911,6 +911,10 @@ module.exports = () => { name: 'ActivityPub', desc: 'Public ActivityPub messages', + acs: { + read: 'GM[users]SE[activitypub]', + }, + areas: { activitypub_shared: { name: 'ActivityPub Public', diff --git a/docs/_docs/configuration/acs.md b/docs/_docs/configuration/acs.md index 6338f6f54..4e4857706 100644 --- a/docs/_docs/configuration/acs.md +++ b/docs/_docs/configuration/acs.md @@ -50,6 +50,7 @@ The following are ACS codes available as of this writing: | AFauthFactor | User's current *Authentication Factor* is >= _authFactor_. Authentication factor 1 refers to username + password (or PubKey) while factor 2 refers to 2FA such as One-Time-Password authentication. | | ARauthFactorReq | Current user **requires** an Authentication Factor >= _authFactorReq_ | | PV[_name,_value_] | Checks that the property by _name_ for the current user is exactly _value_. This ACS allows arbitrary user property values to be checked. For example, `PV[message_conf,local]` checks that the user is currently in the "local" message conference. +| SE[_service_,_service_,...] | Checks that all services listed by _service_ listed are enabled. Available services: `http`, `https`, `web` (`http` or `https`), `gopher`, `nntp`, `nntps`, `activitypub` (requires `web`), `nodeinfo2` (requires `web`), `webfinger` (requires `web`). Example: `SE[activitypub]`. ## ACS Strings ACS strings are one or more ACS codes in addition to some basic language semantics. diff --git a/misc/acs_parser.pegjs b/misc/acs_parser.pegjs index 5ac55f307..1eecafd74 100644 --- a/misc/acs_parser.pegjs +++ b/misc/acs_parser.pegjs @@ -3,6 +3,7 @@ const UserProps = require('./user_property.js'); const Log = require('./logger.js').log; const User = require('./user.js'); + const Config = require('./config.js').get; const _ = require('lodash'); const moment = require('moment'); @@ -13,6 +14,48 @@ function checkAccess(acsCode, value) { try { return { + SE : function servicesEnabled() { + if (!Array.isArray(value)) { + value = [ value]; + } + const config = Config(); + const webEnabled = () => { + return (true === _.get(config, 'contentServers.web.http.enabled') || + true === _.get(config, 'contentServers.web.https.enabled')); + }; + + const allEnabled = value.every(svcName => { + switch (svcName) { + case 'http': + return true === _.get(config, 'contentServers.web.http.enabled'); + + case 'https': + return true === _.get(config, 'contentServers.web.https.enabled'); + + case 'web': + return webEnabled(); + + case 'gopher': + return true === _.get(config, 'contentServers.gopher.enabled'); + + case 'nttp': + return true === _.get(config, 'contentServers.nntp.nntp.enabled'); + + case 'nntps': + return true === _.get(config, 'contentServers.nntp.nntps.enabled'); + + case 'activitypub': + return webEnabled() && true === _.get(config, 'contentServers.web.handlers.activityPub.enabled'); + + case 'nodeinfo2': + return webEnabled() && true === _.get(config, 'contentServers.web.handlers.nodeInfo2.enabled'); + + case 'webfinger': + return webEnabled() && true === _.get(config, 'contentServers.web.handlers.webFinger.enabled'); + } + }); + return allEnabled; + }, LC : function isLocalConnection() { return client && client.isLocal(); }, @@ -77,8 +120,8 @@ const now = moment(); const daysOld = accountCreated.diff(moment(), 'days'); return !isNaN(value) && - accountCreated.isValid() && - now.isAfter(accountCreated) && + accountCreated.isValid() && + now.isAfter(accountCreated) && daysOld >= value; }, BU : function bytesUploaded() { @@ -270,7 +313,7 @@ atom comma = ',' -ws +ws = ' ' optWs @@ -304,4 +347,3 @@ arg = list / num:number? - \ No newline at end of file From 24645c98b0ffe4a8d318c253b26c445b05905d66 Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Fri, 24 Feb 2023 08:21:37 -0600 Subject: [PATCH 164/233] Restored achievements.hjson --- config/achievements.hjson | 469 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 469 insertions(+) create mode 100644 config/achievements.hjson diff --git a/config/achievements.hjson b/config/achievements.hjson new file mode 100644 index 000000000..758af5622 --- /dev/null +++ b/config/achievements.hjson @@ -0,0 +1,469 @@ + /* + ./\/\." ENiGMA½ Achievement Configuration -/--/-------- - -- - + + _____________________ _____ ____________________ __________\_ / + \__ ____/\_ ____ \ /____/ / _____ __ \ / ______/ // /___jp! + // __|___// | \// |// | \// | | \// \ /___ /_____ + /____ _____| __________ ___|__| ____| \ / _____ \ + ---- \______\ -- |______\ ------ /______/ ---- |______\ - |______\ /__/ // ___/ + /__ _\ + <*> ENiGMA½ // HTTPS://GITHUB.COM/NUSKOOLER/ENIGMA-BBS <*> /__/ + + *-----------------------------------------------------------------------------* + + General Information + ------------------------------- - - + This configuration is in HJSON (http://hjson.org/) format. Strict to-spec + JSON is also perfectly valid. Use "hjson" from npm to convert to/from JSON. + + See http://hjson.org/ for more information and syntax. + + Various editors and IDEs such as Sublime Text 3 Visual Studio Code and so + on have syntax highlighting for the HJSON format which are highly recommended. + + ------------------------------- -- - - + Achievement Configuration + ------------------------------- - - + Achievements are currently fairly limited in what can trigger them. This is + being expanded upon and more will be available in the near future. For now + you should mostly be interested in: + - Perhaps adding additional *levels* of triggers & points + - Applying customizations via the achievements section in theme.hjson + + Some tips: + - For 'userStatSet' types, see user_property.js + + Don"t forget to RTFM ...er uh... see the documentation for more information and + don"t be shy to ask for help: + + BBS : Xibalba @ xibalba.l33t.codes + FTN : BBS Discussion on fsxNet or ArakNet + IRC : #enigma-bbs / FreeNode + Email : bryan@l33t.codes +*/ +{ + // Set to false to disable the achievement system + enabled : true + + art : { + localHeader: achievement_local_header + localFooter: achievement_local_footer + globalHeader: achievement_global_header + globalFooter: achievement_global_footer + } + + achievements: { + user_login_count: { + type: userStatSet + statName: login_count + match: { + 2: { + title: "Return Caller" + globalText: "{userName} has returned to {boardName}!" + text: "You've returned to {boardName}!" + points: 5 + } + 10: { + title: "Curious Caller" + globalText: "{userName} has logged into {boardName} {achievedValue} times!" + text: "You've logged into {boardName} {achievedValue} times!" + points: 10 + } + 25: { + title: "Inquisitive" + globalText: "{userName} has logged into {boardName} {achievedValue} times!" + text: "You've logged into {boardName} {achievedValue} times!" + points: 10 + } + 75: { + title: "Still Interested!" + globalText: "{userName} has logged into {boardName} {achievedValue} times!" + text: "You've logged into {boardName} {achievedValue} times!" + points: 15 + } + 100: { + title: "Regular Customer" + globalText: "{userName} has logged into {boardName} {achievedValue} times!" + text: "You've logged into {boardName} {achievedValue} times!" + points: 25 + } + 250: { + title: "Speed Dial", + globalText: "{userName} has logged into {boardName} {achievedValue} times!" + text: "You've logged into {boardName} {achievedValue} times!" + points: 50 + } + 500: { + title: "System Addict" + globalText: "{userName} the BBS {boardName} addict has logged in {achievedValue} times!" + text: "You're a {boardName} addict! You've logged in {achievedValue} times!" + points: 50 + } + } + } + + user_post_count: { + type: userStatSet + statName: post_count + match: { + 2: { + title: "Poster" + globalText: "{userName} has posted {achievedValue} messages!" + text: "You've posted {achievedValue} messages!" + points: 5 + } + 5: { + title: "Poster... again!", + globalText: "{userName} has posted {achievedValue} messages!" + text: "You've posted {achievedValue} messages!" + points: 5 + } + 20: { + title: "Just Want to Talk", + globalText: "{userName} has posted {achievedValue} messages!" + text: "You've posted {achievedValue} messages!" + points: 10 + } + 100: { + title: "Probably Just Spam", + globalText: "{userName} has posted {achievedValue} messages!" + text: "You've posted {achievedValue} messages!" + points: 25 + } + 250: { + title: "Scribe" + globalText: "{userName} the scribe has posted {achievedValue} messages!" + text: "Such a scribe! You've posted {achievedValue} messages!" + points: 50 + } + 500: { + title: "Writing a Book" + globalText: "{userName} is writing a book and has posted {achievedValue} messages!" + text: "You've posted {achievedValue} messages!" + points: 50 + } + } + } + + user_upload_count: { + type: userStatSet + statName: ul_total_count + match: { + 1: { + title: "Uploader" + globalText: "{userName} has uploaded a file!" + text: "You've uploaded somthing!" + points: 5 + } + 10: { + title: "Moar Uploads!" + globalText: "{userName} has uploaded {achievedValue} files!" + text: "You've uploaded {achievedValue} files!" + points: 10 + } + 50: { + title: "Contributor" + globalText: "{userName} has uploaded {achievedValue} files!" + text: "You've uploaded {achievedValue} files!" + points: 25 + + } + 100: { + title: "Courier" + globalText: "Courier {userName} has uploaded {achievedValue} files!" + text: "You've uploaded {achievedValue} files!" + points: 50 + } + 200: { + title: "Must Be a Drop Site" + globalText: "{userName} has uploaded a whomping {achievedValue} files!" + text: "You've uploaded a whomping {achievedValue} files!" + points: 55 + } + } + } + + user_upload_bytes: { + type: userStatSet + statName: ul_total_bytes + match: { + 10240: { + text: "UNIVAC Drum" + globalText: "{userName} has uploaded 10k. Enough to fill a UNIVAC drum!" + text: "You've uploaded 10k. Enough to fill a UNIVAC drum!" + points: 5 + } + 524288: { + title: "Kickstart" + globalText: "{userName} has uploaded 512KB, enough for a Kickstart!" + text: "You've uploaded 512KB, enough for a Kickstart!" + points: 10 + } + 1474560: { + title: "AOL Disk Anyone?" + globalText: "{userName} has uploaded 1.44M worth of data. Hopefully it's not AOL!" + title: "You've uploaded 1.44M worth of data. Hopefully it's not AOL!" + points: 10 + } + 6291456: { + title: "A Quake of a Upload" + globalText: "{userName} has uploaded 6 x 1.44MB disks worth of data. That's the size of Quake for DOS!" + text: "You've uploaded 6 x 1.44MB disks worth of data. That's the size of Quake for DOS!" + points: 20 + } + 104857600: { + title: "Zip 100" + globalText: "{userName} has uploaded a Zip 100 disk's worth of data!" + text: "You've uploaded a Zip 100 disk's worth of data!" + points: 25 + } + 1073741824: { + title: "Gigabyte!" + globalText: "{userName} has uploaded a Gigabyte worth of data!" + text: "You've uploaded a Gigabyte worth of data!" + points: 50 + } + 3407872000: { + title: "Encarta" + globalText: "{userName} has uploaded 5xCD discs worth of data. That's the size of Encarta!" + text: "You've uploaded 5xCD discs worth of data. That's the size of Encarta!" + points: 50 + } + 7025459200: { + title: "NFL_Madden_2007_USA_BLURAY_DIRFIX_PS3-PARADOX" + globalText: "{userName} has uploaded 67x100 MiB worth of data, the size of the worlds first PS3 rip!" + text: "You've uploaded 67x100 MiB worth of data, the size of the world first PS3 rip!" + points: 100 + } + 25018184499: { + title: "WaYsTeD" + globalText: "{userName} has uploaded 23.3 GiB of data, the size of the first PS4 rip: Watch.Dogs.PS4-WaYsTeD!" + text: "You've uploaded 23.3 GiB of data, the size of the first PS4 rip: Watch.Dogs.PS4-WaYsTeD!" + points: 150 + } + } + } + + user_download_count: { + type: userStatSet + statName: dl_total_count + match: { + 1: { + title: "Downloader" + globalText: "{userName} has downloaded a file!" + text: "You've downloaded somthing!" + points: 5 + } + 10: { + title: "Moar Downloads!" + globalText: "{userName} has downloaded {achievedValue} files!" + text: "You've downloaded {achievedValue} files!" + points: 10 + } + 50: { + title: "Leecher" + globalText: "{userName} has leeched {achievedValue} files!" + text: "You've leeched... er... downloaded {achievedValue} files!" + points: 15 + } + 100: { + title: "Hoarder" + globalText: "{userName} has downloaded {achievedValue} files!" + text: "Hoarding files? You've downloaded {achievedValue} files!" + points: 20 + } + 200: { + title: "Digital Archivist" + globalText: "{userName} the digital archivist has {achievedValue} files!" + text: "Building an archive? You've downloaded {achievedValue} files!" + points: 25 + } + } + } + + user_download_bytes: { + type: userStatSet + statName: dl_total_bytes + match: { + 655360: { + title: "Ought to be Enough" + globalText: "{userName} has downloaded 640K. Ought to be enough for anyone!" + text: "You've downloaded 640K. Ought to be enough for anyone!" + points: 5 + } + 1474560: { + title: "Fits on a Floppy" + globalText: "{userName} has downloaded 1.44MB worth of data!" + text: "You've downloaded 1.44MB of data!" + points: 5 + } + 104857600: { + title: "Click of Death" + globalText: "{userName} has downloaded 100MB... perhaps to a Zip Disk?" + text: "You've downloaded 100MB of data... perhaps to a Zip Disk?" + points: 10 + } + 681574400: { + title: "CD Rip" + globalText: "{userName} has downloaded a CD-ROM's worth of data!" + text: "You've downloaded a CD-ROM's worth of data!" + points: 15 + } + 1073741824: { + title: "Like One Hundred Floppys, Man" + globalText: "{userName} has downloaded {achievedValue!sizeWithAbbr} of data!" + text: "You've downloaded {achievedValue!sizeWithAbbr} of data!" + points: 25 + } + 5368709120: { + title: "That's a Lot of Bits!" + globalText: "{userName} has downloaded {achievedValue!sizeWithAbbr} of data!" + text: "You've downloaded {achievedValue!sizeWithAbbr} of data!" + } + } + } + + user_door_runs: { + type: userStatSet + statName: door_run_total_count + match: { + 1: { + title: "Nostalgia Toe Dip", + globalText: "{userName} ran a door!" + text: "You ran a door!" + points: 5 + }, + 10: { + title: "This is Kinda Fun" + globalText: "{userName} ran {achievedValue} doors!" + text: "You've run {achievedValue} doors!" + points: 10 + } + 50: { + title: "Gamer" + globalText: "{userName} ran {achievedValue} doors!" + text: "You've run {achievedValue} doors!" + points: 20 + } + 100: { + title: "Trying Them All" + globalText: "{userName} must really like textmode and has run {achievedValue} doors!" + text: "You've run {achievedValue} doors! You must really like textmode!" + points: 50 + } + 200: { + title: "Dropfile Enthusiast" + globalText: "{userName} the dropfile enthusiast ran {achievedValue} doors!" + text: "You're a dropfile enthusiast! You've run {achievedValue} doors!" + points: 55 + } + } + } + + user_individual_door_run_minutes: { + type: userStatInc + statName: door_run_total_minutes + retroactive: false + match: { + 1: { + title: "Nevermind!" + globalText: "{userName} ran a door for {achievedValue!durationMinutes}. Guess it's not their thing!" + text: "You ran a door for only {achievedValue!durationMinutes}. Not your thing?" + points: 5 + } + 10: { + title: "It's OK I Guess" + globalText: "{userName} ran a door for {achievedValue!durationMinutes}!" + text: "You ran a door for {achievedValue!durationMinutes}!" + points: 10 + } + 30: { + title: "Good Game" + globalText: "{userName} ran a door for {achievedValue!durationMinutes}!" + text: "You ran a door for {achievedValue!durationMinutes}!" + points: 20 + } + 60: { + title: "What? Limited Turns?!" + globalText: "{userName} has spent {achievedValue!durationMinutes} in a door!" + text: "You've spent {achievedValue!durationMinutes} in a door!" + points: 25 + } + 120: { + title: "It's the Only One I Know!" + globalText: "{userName} has spent {achievedValue!durationMinutes} in a door!" + text: "You've spent {achievedValue!durationMinutes} in a door!" + points: 50 + } + 240: { + title: "Possible Addict" + globalText: "{userName} has spent {achievedValue!durationMinutes} in a door!" + text: "You've spent {achievedValue!durationMinutes} in a door!" + points: 55 + } + } + } + + user_door_run_total_minutes: { + type: userStatIncNewVal + statName: door_run_total_minutes + match: { + 10: { + title: "Enough for the Instructions" + globalText: "{userName} has spent {achievedValue!durationMinutes} playing doors!" + text: "You've spent {achievedValue!durationMinutes} playing doors!" + points: 10 + } + 30: { + title: "Probably Just L.O.R.D." + globalText: "{userName} has spent {achievedValue!durationMinutes} playing doors!" + text: "You've spent {achievedValue!durationMinutes} playing doors!" + points: 20 + } + 60: { + title: "Retro or Bust" + globalText: "{userName} has spent {achievedValue!durationMinutes} playing doors!" + text: "You've spent {achievedValue!durationMinutes} playing doors!" + points: 25 + } + 240: { + title: "Textmode Dragon Slayer" + globalText: "{userName} has spent {achievedValue!durationMinutes} playing doors!" + text: "You've spent {achievedValue!durationMinutes} playing doors!" + points: 50 + } + } + } + + user_total_system_online_minutes: { + type: userStatSet + statName: minutes_online_total_count + match: { + 30: { + title: "Just Poking Around" + globalText: "{userName} has spent {achievedValue!durationMinutes} on {boardName}!" + text: "You've been on {boardName} for a total of {achievedValue!durationMinutes}!" + points: 5 + } + 60: { + title: "Mildly Interesting" + globalText: "{userName} has spent {achievedValue!durationMinutes} on {boardName}!" + text: "You've been on {boardName} for a total of {achievedValue!durationMinutes}!" + points: 15 + } + 120: { + title: "Nothing Better to Do" + globalText: "{userName} has spent {achievedValue!durationMinutes} on {boardName}!" + text: "You've been on {boardName} for a total of {achievedValue!durationMinutes}!" + points: 25 + } + 1440: { + title: "Idle Bot" + globalText: "{userName} is probably a bot. They've spent {achievedValue!durationMinutes} on {boardName}!" + text: "You're a bot, aren't you? You've been on {boardName} for a total of {achievedValue!durationMinutes}!" + points: 55 + } + } + } + } +} From 5b08d21966e90fc869dab93a742e9843d512388c Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 24 Feb 2023 21:43:58 -0700 Subject: [PATCH 165/233] Prevent double callback --- .../activitypub_actor_search_main.ans | Bin 2839 -> 2848 bytes core/http_util.js | 18 +++++++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/art/themes/luciano_blocktronics/activitypub_actor_search_main.ans b/art/themes/luciano_blocktronics/activitypub_actor_search_main.ans index 1f7a6074d7f19ed397b482f455114215d406c6e1..81ad15621f3741f3e2eec6f52a4e54120b7d60e4 100644 GIT binary patch delta 47 zcmbO(wm@vd8&)YpYh#04ed%ZeYh$C_q{QTG>1eQ!g2Lv%te;qzjZC&p{=}sU0Ai;P AJ^%m! delta 32 ocmZ1=HeGDP8&+mx^W4eNtn!oZafWWrVe4UGHZ)y3`8Ss;0KF3nNB{r; diff --git a/core/http_util.js b/core/http_util.js index 98f8936ba..a1469c2d0 100644 --- a/core/http_util.js +++ b/core/http_util.js @@ -70,6 +70,14 @@ function _makeRequest(url, options, cb) { } } + let cbCalled = false; + const cbWrapper = (e, b, r) => { + if (!cbCalled) { + cbCalled = true; + return cb(e, b, r); + } + }; + const req = https.request(url, options, res => { let body = []; res.on('data', d => { @@ -80,7 +88,7 @@ function _makeRequest(url, options, cb) { body = Buffer.concat(body).toString(); if (res.statusCode < 200 || res.statusCode > 299) { - return cb( + return cbWrapper( Errors.HttpError( `URL ${url} HTTP error ${res.statusCode}: ${truncate(body, { length: 128, @@ -89,7 +97,7 @@ function _makeRequest(url, options, cb) { ); } - return cb(null, body, res); + return cbWrapper(null, body, res); }); }); @@ -98,17 +106,17 @@ function _makeRequest(url, options, cb) { httpSignature.sign(req, options.sign); } catch (e) { req.destroy(); - return cb(Errors.Invalid(`Invalid signing material: ${e}`)); + return cbWrapper(Errors.Invalid(`Invalid signing material: ${e}`)); } } req.on('error', err => { - return cb(err); + return cbWrapper(err); }); req.on('timeout', () => { req.destroy(); - return cb(Errors.Timeout('Timeout making HTTP request')); + return cbWrapper(Errors.Timeout('Timeout making HTTP request')); }); if (options.body) { From a205445dd145b834ebfd1a37e70a3d6c9fafa75e Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 24 Feb 2023 22:54:19 -0700 Subject: [PATCH 166/233] Fix up message header for public AP, Undo following, some bugs around following local Actors... --- core/activitypub/actor.js | 4 ++ core/activitypub/follow_util.js | 59 ++++++++++++------- core/activitypub/util.js | 1 + core/fse.js | 26 ++++++-- core/message.js | 4 ++ .../content/web_handlers/activitypub.js | 7 ++- 6 files changed, 74 insertions(+), 27 deletions(-) diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index f5c9b88c3..998aa6f5b 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -176,6 +176,10 @@ module.exports = class Actor extends ActivityPubObject { } }; + if (!id) { + return cb(Errors.Invalid('Invalid Actor ID')); + } + Actor._fromCache(id, (err, actor, subject, needsRefresh) => { if (!err) { // cache hit diff --git a/core/activitypub/follow_util.js b/core/activitypub/follow_util.js index 8256ea1e3..666f6a098 100644 --- a/core/activitypub/follow_util.js +++ b/core/activitypub/follow_util.js @@ -20,18 +20,19 @@ function sendFollowRequest(fromUser, toActor, webServer, cb) { // We always add to the following collection; // We expect an async follow up request to our server of // Accept or Reject but it's not guaranteed + const followRequest = new ActivityPubObject({ + id: ActivityPubObject.makeObjectId(webServer, 'follow'), + type: WellKnownActivity.Follow, + actor: fromActorId, + object: toActor.id, + }); + + toActor._followRequest = followRequest; Collection.addFollowing(fromUser, toActor, webServer, true, err => { if (err) { return cb(err); } - const followRequest = new ActivityPubObject({ - id: ActivityPubObject.makeObjectId(webServer, 'follow'), - type: WellKnownActivity.Follow, - actor: fromActorId, - object: toActor.id, - }); - return followRequest.sendTo(toActor.inbox, fromUser, webServer, cb); }); } @@ -46,19 +47,37 @@ function sendUnfollowRequest(fromUser, toActor, webServer, cb) { ); } - // Always remove from the local collection, notify the remote server - Collection.removeOwnedById(Collections.Following, fromUser, toActor.inbox, err => { - if (err) { - return cb(err); - } + // Fetch previously saved 'Follow'; We're going to Undo it & + // need a copy. + Collection.ownedObjectByNameAndId( + Collections.Following, + fromUser, + toActor.id, + (err, followedActor) => { + if (err) { + return cb(err); + } - const undoRequest = new ActivityPubObject({ - id: ActivityPubObject.makeObjectId(webServer, 'undo'), - type: WellKnownActivity.Undo, - actor: fromActorId, - object: toActor.id, - }); + // Always remove from the local collection, notify the remote server + Collection.removeOwnedById( + Collections.Following, + fromUser, + toActor.id, + err => { + if (err) { + return cb(err); + } - return undoRequest.sendTo(toActor.inbox, fromUser, webServer, cb); - }); + const undoRequest = new ActivityPubObject({ + id: ActivityPubObject.makeObjectId(webServer, 'undo'), + type: WellKnownActivity.Undo, + actor: fromActorId, + object: followedActor._followRequest, + }); + + return undoRequest.sendTo(toActor.inbox, fromUser, webServer, cb); + } + ); + } + ); } diff --git a/core/activitypub/util.js b/core/activitypub/util.js index 0f6564bbf..8adfd6f0c 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -17,6 +17,7 @@ const { encode, decode } = require('html-entities'); const { isString } = require('lodash'); const { stripHtml } = require('string-strip-html'); +exports.getActorId = o => o.actor?.id || o.actor; exports.parseTimestampOrNow = parseTimestampOrNow; exports.isValidLink = isValidLink; exports.userFromActorId = userFromActorId; diff --git a/core/fse.js b/core/fse.js index fceb7fac2..ad7149d8d 100644 --- a/core/fse.js +++ b/core/fse.js @@ -37,7 +37,7 @@ const moment = require('moment'); const fse = require('fs-extra'); const fs = require('graceful-fs'); const paths = require('path'); -const sanatizeFilename = require('sanitize-filename'); +const sanitizeFilename = require('sanitize-filename'); const { ErrorReasons } = require('./enig_error.js'); exports.moduleInfo = { @@ -350,7 +350,7 @@ exports.FullScreenEditorModule = return { // :TODO: ensure we show real names for form/to if they are enforced in the area fromUserName: this.message.fromUserName, - toUserName: this.message.toUserName, + toUserName: this._viewModeToField(), // :TODO: //fromRealName //toRealName @@ -1108,6 +1108,24 @@ exports.FullScreenEditorModule = this.setViewText('header', id, text); } + _viewModeToField() { + // Imported messages may have no explicit 'to' on various public forums + if (this.message.toUserName) { + return this.message.toUserName; + } + + const toRemoteUser = _.get(this.message, 'meta.System.remote_to_user'); + if (toRemoteUser) { + return toRemoteUser; + } + + if (this.message.isPublic()) { + return '(Public)'; + } + + this.menuConfig.config.remoteUserNotAvail || 'N/A'; + } + initHeaderViewMode() { // Only set header text for from view if it is on the form if ( @@ -1115,7 +1133,7 @@ exports.FullScreenEditorModule = ) { this.setHeaderText(MciViewIds.header.from, this.message.fromUserName); } - this.setHeaderText(MciViewIds.header.to, this.message.toUserName); + this.setHeaderText(MciViewIds.header.to, this._viewModeToField()); this.setHeaderText(MciViewIds.header.subject, this.message.subject); this.setHeaderText( @@ -1199,7 +1217,7 @@ exports.FullScreenEditorModule = const outputFileName = paths.join( sysTempDownloadDir, - sanatizeFilename( + sanitizeFilename( `(${msgInfo.messageId}) ${ msgInfo.subject }_(${this.message.modTimestamp.format('YYYY-MM-DD')}).txt` diff --git a/core/message.js b/core/message.js index 31b5621be..c35a08f32 100644 --- a/core/message.js +++ b/core/message.js @@ -91,6 +91,10 @@ module.exports = class Message { return Message.isPrivateAreaTag(this.areaTag); } + isPublic() { + return !this.isPrivate(); + } + isFromRemoteUser() { return null !== this.getRemoteFromUser(); } diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index ce8af7213..c153a47ba 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -3,6 +3,7 @@ const { userFromActorId, getUserProfileTemplatedBody, DefaultProfileTemplate, + getActorId, } = require('../../../activitypub/util'); const Endpoints = require('../../../activitypub/endpoint'); const { @@ -257,7 +258,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } // Fetch and validate the signature of the remote Actor - Actor.fromId(activity.actor, (err, remoteActor) => { + Actor.fromId(getActorId(activity), (err, remoteActor) => { if (err) { return this.webServer.internalServerError(resp, err); } @@ -318,7 +319,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { activity ); } else { - this.log.warn(`Unsupported Undo for type "${type}`); + this.log.warn(`Unsupported Undo for type "${type}"`); } } break; @@ -920,7 +921,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { const accept = Activity.makeAccept( this.webServer, - localActor, + localActor.id, requestActivity ); From 0263d8bc5e2584d4fe96f14f5324dd82d0a6d90b Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 25 Feb 2023 11:50:30 -0700 Subject: [PATCH 167/233] Various fixes: * Fix socket hangup bug in http_util requests * Disallow users to follow themselves * GET's to /followers, /following, etc. are not signed; don't try to enforce it * Fix a couple callbacks * WIP: Start more on Delete of inbox items --- core/activitypub/actor_search.js | 9 ++- core/activitypub/collection.js | 1 + core/http_util.js | 6 +- .../content/web_handlers/activitypub.js | 61 +++++++++++-------- 4 files changed, 46 insertions(+), 31 deletions(-) diff --git a/core/activitypub/actor_search.js b/core/activitypub/actor_search.js index cc1f2e6ac..36a83986f 100644 --- a/core/activitypub/actor_search.js +++ b/core/activitypub/actor_search.js @@ -8,6 +8,7 @@ const Collection = require('./collection'); const EnigAssert = require('../enigma_assert'); const { sendFollowRequest, sendUnfollowRequest } = require('./follow_util'); const { getServer } = require('../listening_server'); +const UserProps = require('../user_property'); // deps const async = require('async'); @@ -231,7 +232,13 @@ exports.getModule = class ActivityPubActorSearch extends MenuModule { _toggleFollowStatus(cb) { // catch early key presses if (!this.selectedActorInfo) { - return; + return cb(Errors.UnexpectedState('No Actor selected')); + } + + // Don't allow users to follow themselves + const currentActorId = this.client.user.getProperty(UserProps.ActivityPubActorId); + if (currentActorId === this.selectedActorInfo.id) { + return cb(Errors.Invalid('You cannot follow yourself!')); } this.selectedActorInfo._isFollowing = !this.selectedActorInfo._isFollowing; diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index ac0c5af26..693765013 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -31,6 +31,7 @@ module.exports = class Collection extends ActivityPubObject { const headers = { Accept: ActivityStreamMediaType, }; + getJson( collectionUrl, { headers, validContentTypes: [ActivityStreamMediaType] }, diff --git a/core/http_util.js b/core/http_util.js index a1469c2d0..38a59899a 100644 --- a/core/http_util.js +++ b/core/http_util.js @@ -105,8 +105,7 @@ function _makeRequest(url, options, cb) { try { httpSignature.sign(req, options.sign); } catch (e) { - req.destroy(); - return cbWrapper(Errors.Invalid(`Invalid signing material: ${e}`)); + req.destroy(Errors.Invalid(`Invalid signing material: ${e}`)); } } @@ -115,8 +114,7 @@ function _makeRequest(url, options, cb) { }); req.on('timeout', () => { - req.destroy(); - return cbWrapper(Errors.Timeout('Timeout making HTTP request')); + req.destroy(Errors.Timeout('Timeout making HTTP request')); }); if (options.body) { diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index c153a47ba..ebfe6f5c9 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -99,6 +99,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { this.webServer.addRoute({ method: 'GET', path: /^\/_enig\/ap\/users\/.+\/outbox(\?page=[0-9]+)?$/, + // :TODO: fix me: What are we exposing to the outbox? Should be public only; GET's don't have signatures handler: (req, resp) => { return this._enforceMainKeySignatureValidity( req, @@ -111,25 +112,13 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { this.webServer.addRoute({ method: 'GET', path: /^\/_enig\/ap\/users\/.+\/followers(\?page=[0-9]+)?$/, - handler: (req, resp) => { - return this._enforceMainKeySignatureValidity( - req, - resp, - this._followersGetHandler.bind(this) - ); - }, + handler: this._followersGetHandler.bind(this), }); this.webServer.addRoute({ method: 'GET', path: /^\/_enig\/ap\/users\/.+\/following(\?page=[0-9]+)?$/, - handler: (req, resp) => { - return this._enforceMainKeySignatureValidity( - req, - resp, - this._followingGetHandler.bind(this) - ); - }, + handler: this._followingGetHandler.bind(this), }); this.webServer.addRoute({ @@ -469,26 +458,41 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { // possible for example, that we're being asked to delete an Actor; // If this is the case, they may be following multiple local Actor/users // and we have multiple entries. + const stats = { + deleted: [], + failed: [], + }; async.forEachSeries( objectsInfo, (objInfo, nextObjInfo) => { + const collectionName = objInfo.info.name; + if (objInfo.object) { // Based on the collection we find this entry in, // we may have additional validation or actions - switch (objInfo.info.name) { + switch (collectionName) { case Collections.Inbox: - if (inboxType !== Collections.Inbox) { - // :TODO: LOG ME + case Collections.SharedInbox: + // Validate the inbox this was sent to + if (inboxType !== collectionName) { + this.log.warn( + { inboxType, collectionName, objectId }, + 'Will not Delete object(s) from mismatched collection!' + ); return nextObjInfo(null); } + + // Validate signature + break; - case Collections.SharedInbox: - if (inboxType !== Collections.SharedInbox) { - // :TODO: log me - return nextObjInfo(null); - } + case Collections.Actors: + // Validate signature; Delete Actor and Following entries if any break; + + case Collection.Following: + break; + default: break; } @@ -496,12 +500,15 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return nextObjInfo(null); } else { // it's unparsable, so we'll delete it - Collection.removeById(objInfo.info.name, objectId, err => { + Collection.removeById(collectionName, objectId, err => { if (err) { this.log.warn( - { objectId, collectionName: objInfo.info.name }, + { objectId, collectionName }, 'Failed to remove object' ); + stats.failed.push({ collectionName, objectId }); + } else { + stats.deleted.push({ collectionName, objectId }); } return nextObjInfo(null); }); @@ -511,6 +518,8 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { if (err) { // :TODO: log me } + + this.log.info({ stats, inboxType }, 'Inbox Delete request complete'); return this.webServer.accepted(resp); } ); @@ -823,6 +832,8 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _actorCollectionRequest(collectionName, req, resp) { + this.log.debug({ url: req.url }, `Request for "${collectionName}"`); + const getCollection = Collection[collectionName]; if (!getCollection) { return this.webServer.resourceNotFound(resp); @@ -863,12 +874,10 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _followingGetHandler(req, resp) { - this.log.debug({ url: req.url }, 'Request for "following"'); return this._actorCollectionRequest(Collections.Following, req, resp); } _followersGetHandler(req, resp) { - this.log.debug({ url: req.url }, 'Request for "followers"'); return this._actorCollectionRequest(Collections.Followers, req, resp); } From 0af70b0f5794842a0ac6d5522f1f4f56368c6845 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 25 Feb 2023 13:07:13 -0700 Subject: [PATCH 168/233] Various QoL fixes in UI * Update AP menus, add options * AP menu prompt to show user's Actor/Subject name * Allow MLTEV to have focus SGRs --- art/themes/luciano_blocktronics/MAILMNU.ANS | Bin 3422 -> 4190 bytes art/themes/luciano_blocktronics/MMENU.ANS | Bin 4239 -> 4239 bytes art/themes/luciano_blocktronics/MSGPMPT.ANS | Bin 283 -> 331 bytes .../luciano_blocktronics/activitypub_menu.ans | Bin 3949 -> 3976 bytes .../activitypub_menu_prompt.ans | Bin 0 -> 331 bytes .../activitypub_user_config_images.ans | Bin 2151 -> 2151 bytes art/themes/luciano_blocktronics/theme.hjson | 8 ++++ core/activitypub/user_config.js | 2 + core/fse.js | 4 +- core/multi_line_edit_text_view.js | 34 +++++++++-------- misc/menu_templates/activitypub.in.hjson | 35 +++++++++++++++--- 11 files changed, 61 insertions(+), 22 deletions(-) create mode 100644 art/themes/luciano_blocktronics/activitypub_menu_prompt.ans diff --git a/art/themes/luciano_blocktronics/MAILMNU.ANS b/art/themes/luciano_blocktronics/MAILMNU.ANS index fef5522e7cf8b6f7cbb4cac950f913833620e30a..09b559cfa4e590b692a453082bc2dfc0385de105 100644 GIT binary patch literal 4190 zcmb_f&2C&Z7)`~F4LcUh#$6!6?#>J(i&;%kRIw;RM6j7v8Vym@x`8$-JXVs|nJe9Q z-~lSmkL_#EEeQ!s)tj;X{hV{Y&%U17ri-)9vWsE1nXi_M*v~fKEaJdFUEJZLF`r%R z``*K0w&`e0vpHQf!rFWV=N_>%(GNW=mq#(A4+e|)fj%%<9>y2PCnxLY$6@``@jCeg zFBgZB2Z7;4P|B)AIkR9O6>JhxeaCbnkzjj*PZI?tq>Y~@?u-vo^2!`AnrkYD9(Kck z|A=U4T;J`SoYADqfN{k;^Kbr2jA7_G389!sr0`{oJRtPWxC|c2X<7&n$4J0DZ5iyw zDU_E%5OyA~@r9LUuC&(D<~%c~CorI6sh}8;@|Vwk`0Dl7lO?X3SlHJ=@KR^jh=yRSkv773v#6xz|+!ZSDKz+Aog+@ukjo^RXp!_*hTm)CEOVjGdZTH z)|mjJCN-A9NL!3qh6(eb-{D^&$GRqZ*jv~e$oOD3sb)|WeWF$o_*;?rIIi1iMRskI z5l#zE{qWzw)nvg`FrjMG*+{$JFw#Aj9Wa~SK%mfbR1v%%&vaP~?ut zC9sayDKs3h4Iq03mXXRkiuTeS?bt5eV0e?IFSX^a{aAWvHPK_h?gfCnALx1}l@DV$ zd%Hco+J?A&_wMw3TUjA14S&ZI^*D?#PtRV3tIP1)+wJ>ohQBy^`@mDk{N$w500-+{ zx2tS=1#xTDFmt@b?xr5k<3+~${$l$_xOnsO^3O&gHV(+0XS4IGUoW4IA(Aa7_=>}b zZ?x1N|5(Kq9~~C46hR}lLRPeabMHXzK29qbJi$?=bnI}zQ=xhpXfID%edLnb^D&r& zs4AiwHNRE>!^i6slPa2S7oZJJs)5fK;=yE9%zKro4UDN3S(Ua-<^Ir!)B-ACf;-gv z_b~$1!0_ETRI#>5%8z9T2JSikNJ69@-#HD8BnG0nbJQ!o`?(d$+qr$;H$fgc$OMoQ z^p-~}FvW!n33W*C?FcL!@}5~F<6)s8H9|QE9u^WT>7}82kG>X@D)SKH{^jYeee1BA z@7ZaHoLATsqJ|0I3N=a(lW-Xdc&y2r_vAXVL#`6cBi*728@Ekjo)#uNCt)HeBOf~5(uyjV@hdtw@euQz?09xSfT9dV^FpFxHn6gh^&?WpG7^eYL`f!h zsasw%@S_UpxYh3se@EPX9oSt;12eq)Oa1s8fuFRRssMmiUr29p&EObM@=A-jZ8P|y zPHvjU+ygvq#^^af?#`0?o&o`WLVFZ_i9rVpf%`-u_o)+4y?Lb?Pxdlt9V;TFS_yFN zi(Bc9Rox1yh)p<`Q&hFgzQKjW82}bI%N|y(EDwN|XjKSrjI5mlrdSDyy|R!f64<2- znw+)+IulJW5rK^m>feMG3$wtS^|D;P>FrMsEKU;vNO`)A?kp1k@i%wR-){)}#mV~T r?~c0;uK(9((JhwUV)5-?pB)@LdGh1I=LhL zGxOeC-_+f|G0keaXoR(T56&%OX`<~~SWf17bUfep__6kro)}DK`NhG}(cURaP1HV#+sn06+P-6r^JY{6@XK|x2Rfe@owQxUIgx(jKM zX)Ghc*<^>Y7>}QVGGTXZ!UHK7P>Auej?f`QWBCmklF+oEYj%<$x8-EEMlsP7vFdz< z7e;4Ud~L{yvM{VljR74YZmr7XhtFO<`uNzVCXT#qJ0MpW{=$>##G!}~6aCPhf8d!K z@@W16eUTFK4SBJf48P<n$03z%+Pvu0Rlh94$VnfhW3lJ#+cyEFjnUf(F9 zN+dBtXrvu97|p&Gn`J_b@F)&CV8~sx7<(PvOcUVsT)qD+MQtgr z!Sy=Wv$U=T_F_b4pRFUCNrz^JEzhDE0@eAw1eoRY{?qd0a+&h-^XHS(rQ2}x*7*Xy zP-&JgzN{|O<$1~{t20@6;?%Z@4QH4+DULiTNK#_z2xS-cL3tXN?YcLt^D2;iT`j+* z)!DoA?@U4HHS1dE)37+b{BZuj*ZjPJJUVfB3VWf3x(|WSYMhIp8nI%`Mszi^KEVqQ zi*lw}zYRBs?4Ux+swvk49b56TH z;q;PFhEsil-q}p!V^y4B$)j8|aWh2B5|5zZY3;49l3IQO--Zk3fQ2TF7y$(0{vO9> z00eL(q}|arU5;SXWIiqaajHXh*g^wNLXOOqYW0q=nyqTsu@** zt=3?n9l;*sSzxggR`V?gCPa=EqK{6ZFWV^&CqLZ~7*Y7OVel*tCp|S1&-E=rkhrdi zgcBO6$Q=3_Svf|5*o*-);~6epm?HvG&dC<9#!}dP&cBA_O&;Z&hFVB!6_-Lw4^V1( z<5_%aj2qCF#1}V&pHed>EV-Enk3-N33t*(hQZYe;t!gwBfn7f^6ITQX`4p8_K81hm zdbC)g+)$4-7Bl&qpk4=~4DR;Lz9-Sh-552*C3mH$W_aa!ogibEd zz{0$Q73D+^f(iEoZwl@ov^s7;bO0N&fCOU}IhBuO-G4S2WPHlLJ@q{hR}sCb`r6%9 z3|DSQk;Q*Jnr`R*(c;biK~=%ye?8->-mR;8`s2>l*7o+Rt$SN~?mmC^BE3Ca*r@#e E0{0?d)&Kwi diff --git a/art/themes/luciano_blocktronics/MMENU.ANS b/art/themes/luciano_blocktronics/MMENU.ANS index cf395ec0e69ba7d43d00e7bc7efae74a102974d8..f779f31c6fd3b6d417bf0108ec3cf5495e5413e9 100644 GIT binary patch delta 26 icmeBI>{r}S#x=Q$%V4qs2g~MFT>DrVO($mxr~v?XhzKbF delta 26 icmeBI>{r}S#x+@igJp6Vm%-*$T>DrV4JKy_r~v?V7YHB# diff --git a/art/themes/luciano_blocktronics/MSGPMPT.ANS b/art/themes/luciano_blocktronics/MSGPMPT.ANS index 40415248b99fd6a74b2e1ba6eebbc5263603be2e..0f7c2da814759a4577e6d2813202f8fb2262c316 100644 GIT binary patch delta 156 zcmbQubehRoI@%ytI@;JES3x@3(Ava2_YP3R+SmxpyaN_AHn%o0$h{9#1rY@@%t2hB zpn__MkKx3PRuZbtAs~~ufQIBM0CfS?-@bG2zQV)|LlzKk;;c{|BVz+2Bh%9i3=E8n W0Srt)8VHy@oqQF-+#Ml2I0*m{RVUH_ delta 146 zcmX@jG@HptI@-Y6#K79vAXh;;+R)m>JogS*$lTi4DEH1Ch#*kjJomnIv5X50sUhY|kq^c^mKS$qF1&V0Ith M4klCC$sYWw0K~^9U;qFB delta 74 zcmeB>e=E0PAGcUqeojt)d1hX^LT+MSVtQ(kbhNQ~?&kB{I*gP3IW;FMaEMJl$16NJ cm)9J~mIAWZO*Y`QoxGB72a^HQc5$yXuF-4Vir FlK{QkK*j(7 literal 0 HcmV?d00001 diff --git a/art/themes/luciano_blocktronics/activitypub_user_config_images.ans b/art/themes/luciano_blocktronics/activitypub_user_config_images.ans index b61239faa7d2ffd2abfcf6ca4f42e8026a5d6d74..116d966f02fe568a81154269edbe6846028588d5 100644 GIT binary patch delta 21 dcmaDZ@LXWS6c$FK%~M%cF*6yNPIlx_0{~dw2F?Hg delta 21 dcmaDZ@LXWS6c$Fq%~M%cF*6w&O?Ko^0{~dO2FU;b diff --git a/art/themes/luciano_blocktronics/theme.hjson b/art/themes/luciano_blocktronics/theme.hjson index 4243dda1f..0363949bc 100644 --- a/art/themes/luciano_blocktronics/theme.hjson +++ b/art/themes/luciano_blocktronics/theme.hjson @@ -1474,6 +1474,14 @@ } } } + + activityPubMenuCommand: { + mci: { + TL1: { + text: "|00|08(|11|AS|08)" + } + } + } } achievements: { diff --git a/core/activitypub/user_config.js b/core/activitypub/user_config.js index 11657b60d..882f18eb4 100644 --- a/core/activitypub/user_config.js +++ b/core/activitypub/user_config.js @@ -254,6 +254,8 @@ exports.getModule = class ActivityPubUserConfig extends MenuModule { imageView.setText(apSettings.image); iconView.setText(apSettings.icon); + imageView.setFocus(true); + return callback(null); }, ], diff --git a/core/fse.js b/core/fse.js index ad7149d8d..dfff57b5b 100644 --- a/core/fse.js +++ b/core/fse.js @@ -505,7 +505,7 @@ exports.FullScreenEditorModule = msg = insert( msg, tearLinePos, - bodyMessageView.getSGRFor('text') + bodyMessageView.getTextSgrPrefix() ); } @@ -1496,7 +1496,7 @@ exports.FullScreenEditorModule = const bodyMessageView = this.viewControllers.body.getView( MciViewIds.body.message ); - quoteLines += `${ansi.normal()}${bodyMessageView.getSGRFor('text')}`; + quoteLines += `${ansi.normal()}${bodyMessageView.getTextSgrPrefix()}`; } msgView.addText(`${quoteLines}\n\n`); } diff --git a/core/multi_line_edit_text_view.js b/core/multi_line_edit_text_view.js index 5fddbb1ba..192c9e7ce 100644 --- a/core/multi_line_edit_text_view.js +++ b/core/multi_line_edit_text_view.js @@ -128,14 +128,6 @@ function MultiLineEditTextView(options) { // this.cursorPos = { col: 0, row: 0 }; - this.getSGRFor = function (sgrFor) { - return ( - { - text: self.getSGR(), - }[sgrFor] || self.getSGR() - ); - }; - this.isEditMode = function () { return 'edit' === self.mode; }; @@ -144,6 +136,14 @@ function MultiLineEditTextView(options) { return 'preview' === self.mode; }; + this.getTextSgrPrefix = function () { + if (!self.isEditMode()) { + return ''; + } + + return self.hasFocus ? self.getFocusSGR() : self.getSGR(); + }; + // :TODO: Most of the calls to this could be avoided via incrementRow(), decrementRow() that keeps track or such this.getTextLinesIndex = function (row) { if (!_.isNumber(row)) { @@ -171,7 +171,7 @@ function MultiLineEditTextView(options) { this.toggleTextCursor = function (action) { self.client.term.rawWrite( - `${self.getSGRFor('text')}${ + `${self.getTextSgrPrefix()}${ 'hide' === action ? ansi.hideCursor() : ansi.showCursor() }` ); @@ -183,11 +183,11 @@ function MultiLineEditTextView(options) { const startIndex = self.getTextLinesIndex(startRow); const endIndex = Math.min(self.getTextLinesIndex(endRow), self.textLines.length); const absPos = self.getAbsolutePosition(startRow, 0); + const prefix = self.getTextSgrPrefix(); for (let i = startIndex; i < endIndex; ++i) { - //${self.getSGRFor('text')} self.client.term.write( - `${ansi.goto(absPos.row++, absPos.col)}${self.getRenderText(i)}`, + `${ansi.goto(absPos.row++, absPos.col)}${prefix}${self.getRenderText(i)}`, false // convertLineFeeds ); } @@ -492,7 +492,7 @@ function MultiLineEditTextView(options) { .slice(self.cursorPos.col - c.length); self.client.term.write( - `${ansi.hideCursor()}${self.getSGRFor('text')}${renderText}${ansi.goto( + `${ansi.hideCursor()}${self.getTextSgrPrefix()}${renderText}${ansi.goto( absPos.row, absPos.col )}${ansi.showCursor()}`, @@ -1105,10 +1105,14 @@ MultiLineEditTextView.prototype.redraw = function () { }; MultiLineEditTextView.prototype.setFocus = function (focused) { - this.client.term.rawWrite(this.getSGRFor('text')); - this.moveClientCursorToCursorPos(); - MultiLineEditTextView.super_.prototype.setFocus.call(this, focused); + + if (this.isEditMode() && this.getSGR() !== this.getFocusSGR()) { + this.redrawVisibleArea(); + } else { + this.client.term.rawWrite(this.getTextSgrPrefix()); + } + this.moveClientCursorToCursorPos(); }; MultiLineEditTextView.prototype.setText = function ( diff --git a/misc/menu_templates/activitypub.in.hjson b/misc/menu_templates/activitypub.in.hjson index 5f4b148e7..875790437 100644 --- a/misc/menu_templates/activitypub.in.hjson +++ b/misc/menu_templates/activitypub.in.hjson @@ -1,9 +1,9 @@ { menus: { activityPubMenu: { - desc: ActivityPub + desc: ActivityPub Menu art: activitypub_menu - prompt: menuCommand + prompt: activiytPubMenuCommand submit: [ { value: {command: "S"} @@ -14,17 +14,26 @@ action: @menu:activityPubUserConfig } { - value: {command: "M"} + value: {command: "S"} action: @menu:activityPubSocialManager } { value: {command: "Q"} action: @menu:mainMenu } + { + value: { command: "E" } + action: @menu:privateMailMenu + } + { + value: { command: "G" } + action: @menu:fullLogoffSequence + } ] } + activityPubActorSearch: { - desc: Viewing ActivityPub + desc: ActivityPub Search module: activitypub/actor_search config: { cls: true @@ -166,7 +175,7 @@ } } activityPubSocialManager: { - desc: Social Manager + desc: ActivityPub Social Manager module: ./activitypub/social_manager config: { art: {main: "activitypub_social_manager"} @@ -199,4 +208,20 @@ } } } + + prompts: { + activityPubMenuCommand: { + art: activitypub_menu_prompt + mci: { + ET2: { + argName: command + width: 20 + maxLength: 20 + submit: true + textStyle: upper + focus: true + } + } + } + } } From ec68f8c80c77ca28256c46901a20836b55fd84ca Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 25 Feb 2023 13:15:28 -0700 Subject: [PATCH 169/233] All modes --- core/multi_line_edit_text_view.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/core/multi_line_edit_text_view.js b/core/multi_line_edit_text_view.js index 192c9e7ce..c5a508d4e 100644 --- a/core/multi_line_edit_text_view.js +++ b/core/multi_line_edit_text_view.js @@ -137,10 +137,6 @@ function MultiLineEditTextView(options) { }; this.getTextSgrPrefix = function () { - if (!self.isEditMode()) { - return ''; - } - return self.hasFocus ? self.getFocusSGR() : self.getSGR(); }; From 63cfc904aa91a197928e13b596d025b444064f64 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 25 Feb 2023 13:25:19 -0700 Subject: [PATCH 170/233] More QoL --- .../activitypub_actor_view.ans | Bin 3370 -> 3368 bytes art/themes/luciano_blocktronics/theme.hjson | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/art/themes/luciano_blocktronics/activitypub_actor_view.ans b/art/themes/luciano_blocktronics/activitypub_actor_view.ans index 9f6f447bb1ac0c93c2d4305e7f9c6fdc9de4bf41..2a62ea748f3a862c4ab120a20ea2a0306c782392 100644 GIT binary patch delta 90 zcmZ1_wL)scQdS{DYh#04J3BiC>1cyo)es*;gUN>M@|&-+2C(oO=c@XKn1ir%w6S^a qWJOln$ro7J8RaI|a6Mx;%9RJ{nViTfy}5wMuHkQdSXTquhVe(Z=Sv3Sgib;$vtq`6HXm=4-40EJEhFs=guS($R)c+8}qb qBCGA>3vBF+n-7Fmq6isB6-rU4p$H;7GdSEg$uPOj+(j1%s diff --git a/art/themes/luciano_blocktronics/theme.hjson b/art/themes/luciano_blocktronics/theme.hjson index 0363949bc..b04255a62 100644 --- a/art/themes/luciano_blocktronics/theme.hjson +++ b/art/themes/luciano_blocktronics/theme.hjson @@ -1349,8 +1349,8 @@ activityPubActorSearch: { config: { - followingIndicator: "|00|14> |10Following|08!|14 <" - notFollowingIndicator: "|00|14> |02Not Following|14 <" + followingIndicator: "|00|14FOLLOWING" + notFollowingIndicator: "|00|12not following" viewInfoFormat10: "{actorFollowingIndicator}" } 0: { From a968f219577c2f505a2807cc103cc6123fb952e5 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 26 Feb 2023 21:29:07 -0700 Subject: [PATCH 171/233] A few bugs fixed with Note storage --- core/activitypub/collection.js | 12 ++--- core/activitypub/note.js | 5 +- .../content/web_handlers/activitypub.js | 52 ++++++++++++++++--- 3 files changed, 50 insertions(+), 19 deletions(-) diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index 693765013..e3863fa89 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -5,7 +5,7 @@ const apDb = require('../database').dbs.activitypub; const { getISOTimestampString } = require('../database'); const { Errors } = require('../enig_error.js'); const { - PublicCollectionId: APPublicCollectionId, + PublicCollectionId, ActivityStreamMediaType, Collections, ActorCollectionId, @@ -23,10 +23,6 @@ module.exports = class Collection extends ActivityPubObject { super(obj); } - static get PublicCollectionId() { - return APPublicCollectionId; - } - static getRemoteCollectionStats(collectionUrl, cb) { const headers = { Accept: ActivityStreamMediaType, @@ -162,7 +158,7 @@ module.exports = class Collection extends ActivityPubObject { return Collection.addToCollection( Collections.SharedInbox, null, // N/A - Collection.PublicCollectionId, + PublicCollectionId, inboxItem.id, inboxItem, false, @@ -232,7 +228,7 @@ module.exports = class Collection extends ActivityPubObject { ActorCollectionId, Collections.Actors, getISOTimestampString(), - APPublicCollectionId, + PublicCollectionId, actor.id, JSON.stringify(actor), false, @@ -616,7 +612,7 @@ module.exports = class Collection extends ActivityPubObject { ); } } else { - actorId = Collection.APPublicCollectionId; + actorId = PublicCollectionId; } isPrivate = isPrivate ? 1 : 0; diff --git a/core/activitypub/note.js b/core/activitypub/note.js index 185e750fa..06b420bc2 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -9,6 +9,7 @@ const { htmlToMessageBody, recipientIdsFromObject, } = require('./util'); +const { PublicCollectionId } = require('./const'); const { isAnsi } = require('../string_util'); // deps @@ -118,9 +119,7 @@ module.exports = class Note extends ActivityPubObject { }, (replyToNoteId, fromUser, fromActor, remoteActor, callback) => { const to = [ - message.isPrivate() - ? remoteActor.id - : Collection.PublicCollectionId, + message.isPrivate() ? remoteActor.id : PublicCollectionId, ]; const sourceMediaType = isAnsi(message.message) diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index ebfe6f5c9..9403731d1 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -10,6 +10,7 @@ const { ActivityStreamMediaType, WellKnownActivity, Collections, + PublicCollectionId, } = require('../../../activitypub/const'); const Config = require('../../../config').get; const Activity = require('../../../activitypub/activity'); @@ -381,7 +382,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { recipientActorIds, (actorId, nextActorId) => { switch (actorId) { - case Collection.PublicCollectionId: + case PublicCollectionId: this._deliverNoteToSharedInbox(activity, note, err => { return nextActorId(err); }); @@ -436,6 +437,32 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } + _getMatchingObjectsForDeleteRequest(objectId, cb) { + async.waterfall( + [ + callback => { + return Collection.objectsById(objectId, callback); + }, + (objectsInfo, callback) => { + Collection.objectByEmbeddedId(objectId, (err, obj, objInfo) => { + if (err) { + return callback(err); + } + + const allObjsInfo = objectsInfo; + if (obj) { + allObjsInfo.push({ info: objInfo, object: obj }); + } + return callback(null, objectsInfo); + }); + }, + ], + (err, objectsInfo) => { + return cb(err, objectsInfo); + } + ); + } + _inboxDeleteActivity(inboxType, signature, resp, activity) { const objectId = _.get(activity, 'object.id', activity.object); @@ -443,7 +470,8 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { // :TODO: we need to DELETE the existing stored Message object if this is a Note, or associated if this is an Actor // :TODO: delete / invalidate any actor cache if actor - Collection.objectsById(objectId, (err, objectsInfo) => { + + this._getMatchingObjectsForDeleteRequest(objectId, (err, objectsInfo) => { if (err) { this.log.warn({ objectId }); // We'll respond accepted so they don't keep trying @@ -750,7 +778,10 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _deliverNoteToSharedInbox(activity, note, cb) { - this.log.info({ noteId: note.id }, 'Delivering Note to Public inbox'); + this.log.info( + { activityId: activity.id, noteId: note.id }, + 'Delivering Note to Public inbox' + ); Collection.addSharedInboxItem(activity, true, err => { if (err) { @@ -768,16 +799,21 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _deliverNoteToLocalActor(actorId, activity, note, cb) { - this.log.info( - { noteId: note.id, actorId }, - 'Delivering Note to local Actor Private inbox' - ); - + // Skip over e.g. actorId = https://someethingsomething/users/Actor/followers userFromActorId(actorId, (err, localUser) => { if (err) { + this.log.trace( + { activityId: activity.id, noteId: note.id, actorId }, + `No Actor by ID ${actorId}` + ); return cb(null); // not found/etc., just bail } + this.log.info( + { activityId: activity.id, noteId: note.id, actorId }, + 'Delivering Note to local Actor Private inbox' + ); + Collection.addInboxItem(activity, localUser, this.webServer, false, err => { if (err) { return cb(err); From 65e5fa1b7707b10be18537547a1c9cbe97cc1106 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 27 Feb 2023 12:59:35 -0700 Subject: [PATCH 172/233] New ACS for ActivtiyPub enabled check --- core/acs_parser.js | 12 ++++++++++++ docs/_docs/configuration/acs.md | 1 + misc/acs_parser.pegjs | 9 +++++++++ 3 files changed, 22 insertions(+) diff --git a/core/acs_parser.js b/core/acs_parser.js index d203fc0e4..df8605fdc 100644 --- a/core/acs_parser.js +++ b/core/acs_parser.js @@ -937,6 +937,7 @@ function peg$parse(input, options) { const Log = require('./logger.js').log; const User = require('./user.js'); const Config = require('./config.js').get; + const ActivityPubSettings = require('./activitypub/settings'); const _ = require('lodash'); const moment = require('moment'); @@ -947,6 +948,17 @@ function peg$parse(input, options) { function checkAccess(acsCode, value) { try { return { + AE: function activityPubEnabled() { + const apSettings = ActivityPubSettings.fromUser(user); + switch (value) { + case 0: + return !apSettings.enabled; + case 1: + return apSettings.enabled; + default: + return false; + } + }, SE: function servicesEnabled() { if (!Array.isArray(value)) { value = [value]; diff --git a/docs/_docs/configuration/acs.md b/docs/_docs/configuration/acs.md index 4e4857706..d6014bdac 100644 --- a/docs/_docs/configuration/acs.md +++ b/docs/_docs/configuration/acs.md @@ -51,6 +51,7 @@ The following are ACS codes available as of this writing: | ARauthFactorReq | Current user **requires** an Authentication Factor >= _authFactorReq_ | | PV[_name,_value_] | Checks that the property by _name_ for the current user is exactly _value_. This ACS allows arbitrary user property values to be checked. For example, `PV[message_conf,local]` checks that the user is currently in the "local" message conference. | SE[_service_,_service_,...] | Checks that all services listed by _service_ listed are enabled. Available services: `http`, `https`, `web` (`http` or `https`), `gopher`, `nntp`, `nntps`, `activitypub` (requires `web`), `nodeinfo2` (requires `web`), `webfinger` (requires `web`). Example: `SE[activitypub]`. +| AEenabled | ActivityPub is _enabled_: 1=true, 0=false | ## ACS Strings ACS strings are one or more ACS codes in addition to some basic language semantics. diff --git a/misc/acs_parser.pegjs b/misc/acs_parser.pegjs index 1eecafd74..e17cba263 100644 --- a/misc/acs_parser.pegjs +++ b/misc/acs_parser.pegjs @@ -4,6 +4,7 @@ const Log = require('./logger.js').log; const User = require('./user.js'); const Config = require('./config.js').get; + const ActivityPubSettings = require('./activitypub/settings'); const _ = require('lodash'); const moment = require('moment'); @@ -14,6 +15,14 @@ function checkAccess(acsCode, value) { try { return { + AE : function activityPubEnabled() { + const apSettings = ActivityPubSettings.fromUser(user); + switch(value) { + case 0 : return !apSettings.enabled; + case 1 : return apSettings.enabled; + default : return false; + } + }, SE : function servicesEnabled() { if (!Array.isArray(value)) { value = [ value]; From b0fff20a02cf771032e6857793d11f41df28c64e Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 27 Feb 2023 13:03:27 -0700 Subject: [PATCH 173/233] More updates on Deletes, ActivityPub ACS in menu --- .../activitypub_not_enabled.ans | Bin 0 -> 387 bytes .../content/web_handlers/activitypub.js | 70 +++++++++++++----- misc/menu_templates/activitypub.in.hjson | 39 ++++++++-- 3 files changed, 84 insertions(+), 25 deletions(-) create mode 100644 art/themes/luciano_blocktronics/activitypub_not_enabled.ans diff --git a/art/themes/luciano_blocktronics/activitypub_not_enabled.ans b/art/themes/luciano_blocktronics/activitypub_not_enabled.ans new file mode 100644 index 0000000000000000000000000000000000000000..86cd4e192df5ab0f645ed8b915f4843d47fd138d GIT binary patch literal 387 zcmZvXQ44}F6os`%|3Uh4`v*&*K%XokdI*9j2%mJ#8nipmE%4uWQ;WpT!{DCneCIC6 znDR(4P>{`&h^aV^A;_YIO1Y6wX_|vA$Y2RsvIf)!1m?vfJ vF+Hs}jE!JpBSnpk(zYI74V;jL5evhm?>dg_9-OJuYO-7H;k-?|>3hBaO*&I& literal 0 HcmV?d00001 diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 9403731d1..98592db6d 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -505,14 +505,30 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { if (inboxType !== collectionName) { this.log.warn( { inboxType, collectionName, objectId }, - 'Will not Delete object(s) from mismatched collection!' + 'Will not Delete object: Collection mismatch' ); return nextObjInfo(null); } - // Validate signature + if ( + !this._isSignatureEqual( + activity.signature, + objInfo.object.signature + ) + ) { + this.log.warn( + { inboxType, collectionName, objectId }, + 'Will not Delete object: Signature mismatch' + ); + return nextObjInfo(null); + } - break; + return this._deleteObjectWithStats( + collectionName, + objInfo.object, + stats, + nextObjInfo + ); case Collections.Actors: // Validate signature; Delete Actor and Following entries if any @@ -526,21 +542,15 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } return nextObjInfo(null); - } else { - // it's unparsable, so we'll delete it - Collection.removeById(collectionName, objectId, err => { - if (err) { - this.log.warn( - { objectId, collectionName }, - 'Failed to remove object' - ); - stats.failed.push({ collectionName, objectId }); - } else { - stats.deleted.push({ collectionName, objectId }); - } - return nextObjInfo(null); - }); } + + // Malformed; we'll go ahead and remove + return this._deleteObjectWithStats( + collectionName, + objInfo.object, + stats, + nextObjInfo + ); }, err => { if (err) { @@ -556,6 +566,32 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.accepted(resp); } + _deleteObjectWithStats(collectionName, object, stats, cb) { + const objectId = _.isString(object) ? object : object.id; + const type = object.type; + Collection.removeById(collectionName, objectId, err => { + if (err) { + this.log.warn( + { objectId, collectionName, type }, + 'Failed to remove object' + ); + stats.failed.push({ collectionName, objectId, type }); + } else { + stats.deleted.push({ collectionName, objectId, type }); + } + + return cb(null); + }); + } + + _isSignatureEqual(sigA, sigB) { + return ( + sigA.type === sigB.type && + sigA.creator === sigB.creator && + sigA.signatureValue === sigB.signatureValue + ); + } + _inboxFollowActivity(resp, remoteActor, activity) { this.log.info( { remoteActorId: remoteActor.id, localActorId: activity.object }, diff --git a/misc/menu_templates/activitypub.in.hjson b/misc/menu_templates/activitypub.in.hjson index 875790437..97c44e5c1 100644 --- a/misc/menu_templates/activitypub.in.hjson +++ b/misc/menu_templates/activitypub.in.hjson @@ -3,19 +3,35 @@ activityPubMenu: { desc: ActivityPub Menu art: activitypub_menu - prompt: activiytPubMenuCommand + prompt: activityPubMenuCommand submit: [ { value: {command: "S"} - action: @menu:activityPubActorSearch + action: [ + { + acs: "AE1" + action: @menu:activityPubActorSearch + } + { + action: @menu:activityPubNotEnabled + } + ] } { value: {command: "C"} action: @menu:activityPubUserConfig } { - value: {command: "S"} - action: @menu:activityPubSocialManager + value: {command: "M"} + action: [ + { + acs: "AE1" + action: @menu:activityPubSocialManager + } + { + action: @menu:activityPubNotEnabled + } + ] } { value: {command: "Q"} @@ -25,10 +41,6 @@ value: { command: "E" } action: @menu:privateMailMenu } - { - value: { command: "G" } - action: @menu:fullLogoffSequence - } ] } @@ -82,6 +94,7 @@ } } } + activityPubUserConfig: { desc: ActivityPub Config module: ./activitypub/user_config @@ -174,6 +187,7 @@ } } } + activityPubSocialManager: { desc: ActivityPub Social Manager module: ./activitypub/social_manager @@ -207,6 +221,15 @@ } } } + + activityPubNotEnabled: { + desc: ActivityPub Not Enabled + art: activitypub_not_enabled + config: { + cls: true + pause: true + } + } } prompts: { From 6afbb29139e93d606c3b2090b11d250a138c6069 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 6 Mar 2023 17:19:20 -0700 Subject: [PATCH 174/233] Cleanup --- .../content/web_handlers/activitypub.js | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 98592db6d..fb23d1751 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -511,7 +511,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } if ( - !this._isSignatureEqual( + !this._isSignatureValid( activity.signature, objInfo.object.signature ) @@ -527,7 +527,13 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { collectionName, objInfo.object, stats, - nextObjInfo + () => { + if ('Note' === objInfo.object.type) { + // :TODO: delete associated message! + } + + return nextObjInfo(null); + } ); case Collections.Actors: @@ -584,11 +590,13 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } - _isSignatureEqual(sigA, sigB) { + _isSignatureValid(request, object) { + // :TODO: We need to validate signatures here -- this is no good + // https://github.com/transmute-industries/RsaSignature2017 return ( - sigA.type === sigB.type && - sigA.creator === sigB.creator && - sigA.signatureValue === sigB.signatureValue + request.type === object.type && request.creator === object.creator + //&& + // request.signatureValue === object.signatureValue ); } From ea9d826a7cc1567d1558806758234376e8a7ef06 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 12 Mar 2023 14:22:41 -0600 Subject: [PATCH 175/233] Updates around Deletes --- .../content/web_handlers/activitypub.js | 132 ++++++++++-------- 1 file changed, 70 insertions(+), 62 deletions(-) diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index fb23d1751..d7737816f 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -22,6 +22,7 @@ const EnigAssert = require('../../../enigma_assert'); const Message = require('../../../message'); const Events = require('../../../events'); const UserProps = require('../../../user_property'); +const { Errors } = require('../../../enig_error'); // deps const _ = require('lodash'); @@ -238,22 +239,15 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { : this.webServer.notImplemented(resp); } - // - // Delete is a special beast: - // We will *likely* get a 410, 404, or a Tombstone when fetching the Actor - // Thus, we need some short circuiting - // - if (WellKnownActivity.Delete === activity.type) { - return this._inboxDeleteActivity(inboxType, signature, resp, activity); - } - // Fetch and validate the signature of the remote Actor Actor.fromId(getActorId(activity), (err, remoteActor) => { - if (err) { - return this.webServer.internalServerError(resp, err); - } + // if (err) { + // return this.webServer.internalServerError(resp, err); + // } - if (!this._validateActorSignature(remoteActor, signature)) { + const httpSigValidated = + remoteActor && this._validateActorSignature(remoteActor, signature); + if (activity.type !== WellKnownActivity.Delete && !httpSigValidated) { return this.webServer.accessDenied(resp); } @@ -267,11 +261,21 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { case WellKnownActivity.Create: return this._inboxCreateActivity(resp, activity); + case WellKnownActivity.Delete: + return this._inboxDeleteActivity( + inboxType, + signature, + resp, + activity, + httpSigValidated + ); + case WellKnownActivity.Update: { // Only Notes currently supported const type = _.get(activity, 'object.type'); if ('Note' === type) { + // :TODO: get rid of this extra indirection return this._inboxMutateExistingObject( inboxType, signature, @@ -463,7 +467,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { ); } - _inboxDeleteActivity(inboxType, signature, resp, activity) { + _inboxDeleteActivity(inboxType, signature, resp, activity, httpSigValidated) { const objectId = _.get(activity, 'object.id', activity.object); this.log.info({ inboxType, objectId }, 'Incoming Delete request'); @@ -510,29 +514,36 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return nextObjInfo(null); } - if ( - !this._isSignatureValid( - activity.signature, - objInfo.object.signature - ) - ) { - this.log.warn( - { inboxType, collectionName, objectId }, - 'Will not Delete object: Signature mismatch' - ); - return nextObjInfo(null); - } - - return this._deleteObjectWithStats( - collectionName, + return this._verifyObjectOwner( + httpSigValidated, objInfo.object, - stats, - () => { - if ('Note' === objInfo.object.type) { - // :TODO: delete associated message! + activity, + err => { + if (err) { + this.log.warn( + { + error: err.message, + inboxType, + collectionName, + objectId, + }, + 'Will not Delete object: Signature mismatch' + ); + return nextObjInfo(null); } - return nextObjInfo(null); + return this._deleteObjectWithStats( + collectionName, + objInfo.object, + stats, + () => { + if ('Note' === objInfo.object.type) { + // :TODO: delete associated message! + } + + return nextObjInfo(null); + } + ); } ); @@ -590,13 +601,29 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } - _isSignatureValid(request, object) { - // :TODO: We need to validate signatures here -- this is no good - // https://github.com/transmute-industries/RsaSignature2017 - return ( - request.type === object.type && request.creator === object.creator - //&& - // request.signatureValue === object.signatureValue + _verifyObjectOwner(httpSigValidated, object, activity, cb) { + if (httpSigValidated) { + // owner signed + return cb(null); + } + + const creator = activity.signature?.creator; + if (creator !== `${object.actor}#main-key`) { + return cb(Errors.ValidationFailed('Creator mismatch')); + } + + // + // We can't fetch an Actor for deleted Actors, so + // we're left with a basic comparison (above) + // + if (object.type === 'Actor') { + return cb(null); + } + + return cb( + Errors.ValidationFailed( + 'Object does not appear to be owned by calling Activity' + ) ); } @@ -701,6 +728,8 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _validateActorSignature(actor, signature) { + // :TODO: If we stop enforcing HTTP signatures, we can check LD sigs here + const pubKey = actor.publicKey; if (!_.isObject(pubKey)) { this.log.debug('Expected object of "pubKey"'); @@ -779,27 +808,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } - // _inboxDeleteActivityMutator(inboxType, resp, objectType, targetObjectId) { - // Collection.removeById(inboxType, targetObjectId, err => { - // if (err) { - // return this.webServer.internalServerError(resp, err); - // } - - // this.log.info( - // { - // inboxType, - // objectId: targetObjectId, - // objectType, - // }, - // `${objectType} Deleted` - // ); - - // // :TODO: we need to DELETE the existing stored Message object if this is a Note - - // return this.webServer.accepted(resp); - // }); - // } - _inboxUpdateObjectMutator(inboxType, resp, objectType, targetObjectId, activity) { Collection.updateCollectionEntry(inboxType, targetObjectId, activity, err => { if (err) { From 3212d809dff54966a8cb15b4d71f159d992f5eac Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 12 Mar 2023 14:42:34 -0600 Subject: [PATCH 176/233] Better validation for 'Update' --- .../content/web_handlers/activitypub.js | 80 ++++++++----------- 1 file changed, 33 insertions(+), 47 deletions(-) diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index d7737816f..4dea62a87 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -241,10 +241,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { // Fetch and validate the signature of the remote Actor Actor.fromId(getActorId(activity), (err, remoteActor) => { - // if (err) { - // return this.webServer.internalServerError(resp, err); - // } - + // validate sig up front const httpSigValidated = remoteActor && this._validateActorSignature(remoteActor, signature); if (activity.type !== WellKnownActivity.Delete && !httpSigValidated) { @@ -264,7 +261,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { case WellKnownActivity.Delete: return this._inboxDeleteActivity( inboxType, - signature, resp, activity, httpSigValidated @@ -276,12 +272,11 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { const type = _.get(activity, 'object.type'); if ('Note' === type) { // :TODO: get rid of this extra indirection - return this._inboxMutateExistingObject( + return this._inboxUpdateExistingObject( inboxType, - signature, resp, activity, - this._inboxUpdateObjectMutator.bind(this) + httpSigValidated ); } else { this.log.warn( @@ -467,7 +462,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { ); } - _inboxDeleteActivity(inboxType, signature, resp, activity, httpSigValidated) { + _inboxDeleteActivity(inboxType, resp, activity, httpSigValidated) { const objectId = _.get(activity, 'object.id', activity.object); this.log.info({ inboxType, objectId }, 'Incoming Delete request'); @@ -762,7 +757,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return true; } - _inboxMutateExistingObject(inboxType, signature, resp, activity, mutator) { + _inboxUpdateExistingObject(inboxType, resp, activity, httpSigValidated) { const targetObjectId = _.get(activity, 'object.id'); const objectType = _.get(activity, 'object.type'); @@ -779,53 +774,44 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.resourceNotFound(resp); } - // - // Object exists; Validate we allow the action by origin - // comparing the request's keyId origin to the object's - // - try { - const updateTargetHost = new URL(obj.object.id).host; - const keyIdHost = new URL(signature.keyId).host; - - if (updateTargetHost !== keyIdHost) { + this._verifyObjectOwner(httpSigValidated, obj, activity, err => { + if (err) { this.log.warn( { - targetObjectId, - type: objectType, - updateTargetHost, - keyIdHost, - activityType: activity.type, + error: err.message, + inboxType, + objectId: targetObjectId, + objectType, }, - `Attempt to ${activity.type} Object of non-matching origin` + 'Will not Update object: Signature mismatch' ); return this.webServer.accessDenied(resp); } - return mutator(inboxType, resp, objectType, targetObjectId, activity); - } catch (e) { - return this.webServer.internalServerError(resp, e); - } - }); - } - - _inboxUpdateObjectMutator(inboxType, resp, objectType, targetObjectId, activity) { - Collection.updateCollectionEntry(inboxType, targetObjectId, activity, err => { - if (err) { - return this.webServer.internalServerError(resp, err); - } - - this.log.info( - { + Collection.updateCollectionEntry( inboxType, - objectId: targetObjectId, - objectType, - }, - `${objectType} Updated` - ); + targetObjectId, + activity, + err => { + if (err) { + return this.webServer.internalServerError(resp, err); + } + + this.log.info( + { + inboxType, + objectId: targetObjectId, + objectType, + }, + `${objectType} Updated` + ); - // :TODO: we need to UPDATE the existing stored Message object if this is a Note + // :TODO: we need to UPDATE the existing stored Message object if this is a Note - return this.webServer.accepted(resp); + return this.webServer.accepted(resp); + } + ); + }); }); } From 8b6d564ebfc821b1518edde401bf3262f006c172 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 13 Mar 2023 12:39:36 -0600 Subject: [PATCH 177/233] Handling Update/Delete better --- core/activitypub/note.js | 83 ++++++++++++ core/config_default.js | 1 + core/message.js | 123 ++++++++++++++++++ .../content/web_handlers/activitypub.js | 79 ++++++++++- 4 files changed, 283 insertions(+), 3 deletions(-) diff --git a/core/activitypub/note.js b/core/activitypub/note.js index 06b420bc2..954a67ff8 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -313,6 +313,89 @@ module.exports = class Note extends ActivityPubObject { }); } + toUpdatedMessage(options, cb) { + const original = new Message(); + original.load({ uuid: options.messageUuid }, err => { + if (err) { + return cb(err); + } + + // rebuild message + options.areaTag = original.areaTag; + + async.waterfall( + [ + callback => { + if (!original.isPrivate()) { + options.toUser = 'All'; + return callback(null); + } + + const userId = + original.meta.System[Message.SystemMetaNames.LocalToUserID]; + if (!userId) { + return cb( + Errors.MissingProperty( + `User is missing "${Message.SystemMetaNames.LocalToUserID}" property` + ) + ); + } + + User.getUser(userId, (err, user) => { + if (err) { + return callback(err); + } + + options.toUser = user; + return callback(null); + }); + }, + callback => { + this.toMessage(options, (err, message) => { + if (err) { + return callback(err); + } + + // re-target as message to be updated + message.messageUuid = original.messageUuid; + + return callback(null, message); + }); + }, + ], + (err, message) => { + return cb(err, message); + } + ); + }); + } + + static deleteAssocMessage(noteId, cb) { + const filter = { + resultType: 'uuid', + metaTuples: [ + { + category: Message.WellKnownMetaCategories.ActivityPub, + name: Message.ActivityPubPropertyNames.NoteId, + value: noteId, + }, + ], + limit: 1, + }; + + return Message.findMessages(filter, (err, messageUuid) => { + if (!messageUuid) { + return cb(null); + } + + messageUuid = messageUuid[0]; // limit 1 + + Message.deleteByMessageUuid(messageUuid, err => { + return cb(err); + }); + }); + } + _getSubject(message) { if (this.summary) { return this.summary.trim(); diff --git a/core/config_default.js b/core/config_default.js index ce272a199..522a3f7d1 100644 --- a/core/config_default.js +++ b/core/config_default.js @@ -100,6 +100,7 @@ module.exports = () => { 'server', 'client', 'notme', + 'public', ], preAuthIdleLogoutSeconds: 60 * 3, // 3m diff --git a/core/message.js b/core/message.js index c35a08f32..84996e38b 100644 --- a/core/message.js +++ b/core/message.js @@ -708,6 +708,17 @@ module.exports = class Message { ); } + static deleteByMessageUuid(messageUuid, cb) { + msgDb.run( + `DELETE FROM message + WHERE message_uuid = ?;`, + [messageUuid], + err => { + return cb(err); + } + ); + } + persistMetaValue(category, name, value, transOrDb, cb) { if (!_.isFunction(cb) && _.isFunction(transOrDb)) { cb = transOrDb; @@ -738,6 +749,34 @@ module.exports = class Message { ); } + updateMetaValue(category, name, value, transOrDb, cb) { + if (!_.isFunction(cb) && _.isFunction(transOrDb)) { + cb = transOrDb; + transOrDb = msgDb; + } + + const metaStmt = transOrDb.prepare( + `REPLACE INTO message_meta (message_id, meta_category, meta_name, meta_value) + VALUES (?, ?, ?, ?);` + ); + + if (!_.isArray(value)) { + value = [value]; + } + + async.each( + value, + (v, next) => { + metaStmt.run(this.messageId, category, name, v, err => { + return next(err); + }); + }, + err => { + return cb(err); + } + ); + } + persist(cb) { if (!this.isValid()) { return cb(Errors.Invalid('Cannot persist invalid message!')); @@ -843,6 +882,90 @@ module.exports = class Message { ); } + update(cb) { + if (!this.isValid()) { + return cb(Errors.Invalid('Cannot update invalid message!')); + } + + if (!this.messageUuid) { + return cb(Errors.Invalid("Cannot update without a valid 'messageUUID'")); + } + + const self = this; + + async.waterfall( + [ + callback => { + return msgDb.beginTransaction(callback); + }, + (trans, callback) => { + trans.run( + `REPLACE INTO message (area_tag, message_uuid, reply_to_message_id, to_user_name, from_user_name, subject, message, modified_timestamp) + VALUES (?, ?, ?, ?, ?, ?, ?, ?);`, + [ + this.areaTag, + this.messageUuid, + this.replyToMsgId, + this.toUserName, + this.fromUserName, + this.subject, + this.message, + getISOTimestampString(this.modTimestamp), + ], + function inserted(err) { + // use non-arrow function for 'this' scope + if (!err) { + self.messageId = this.lastID; + } + + return callback(err, trans); + } + ); + }, + (trans, callback) => { + if (!this.meta) { + return callback(null, trans); + } + + async.each( + Object.keys(this.meta), + (category, nextCat) => { + async.each( + Object.keys(this.meta[category]), + (name, nextName) => { + this.updateMetaValue( + category, + name, + this.meta[category][name], + trans, + err => { + return nextName(err); + } + ); + }, + err => { + return nextCat(err); + } + ); + }, + err => { + return callback(err, trans); + } + ); + }, + ], + (err, trans) => { + if (trans) { + trans[err ? 'rollback' : 'commit'](transErr => { + return cb(err ? err : transErr, self.messageId); + }); + } else { + return cb(err); + } + } + ); + } + deleteMessage(requestingUser, cb) { if (!this.userHasDeleteRights(requestingUser)) { return cb( diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 4dea62a87..6f78eb416 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -532,8 +532,28 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { objInfo.object, stats, () => { - if ('Note' === objInfo.object.type) { - // :TODO: delete associated message! + // if it was a Note before... + if ( + Collections.Inbox === + objInfo.info.name || + Collections.SharedInbox === + objInfo.info.name + ) { + return Note.deleteAssocMessage( + objectId, + err => { + if (err) { + this.log.warn( + { + error: err.message, + noteId: objectId, + }, + 'Failed to remove message associated with Note' + ); + } + return nextObjInfo(null); + } + ); } return nextObjInfo(null); @@ -578,6 +598,58 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.accepted(resp); } + _updateMessageAssocWithNote(objectId, activity) { + const filter = { + resultType: 'uuid', + metaTuples: [ + { + category: Message.WellKnownMetaCategories.ActivityPub, + name: Message.ActivityPubPropertyNames.NoteId, + value: objectId, + }, + ], + limit: 1, + }; + + Message.findMessages(filter, (err, messageUuid) => { + if (!messageUuid) { + return this.log.warn( + { messageUuid }, + 'Failed to find message for Update Note' + ); + } + + messageUuid = messageUuid[0]; // limit 1 + + const note = new Note(activity.object); + if (!note.isValid()) { + return this.log.error('Note within Update does not appear to be valid'); + } + + const updateOpts = { + messageUuid, + }; + + note.toUpdatedMessage(updateOpts, (err, message) => { + if (err) { + return this.log.error( + { error: err.message, messageUuid, step: 'Note to Message' }, + 'Note Update failed to update underlying message' + ); + } + + message.update(err => { + if (err) { + this.log.error( + { error: err.message, messageUuid, step: 'Persist' }, + 'Note Update failed to update underlying message' + ); + } + }); + }); + }); + } + _deleteObjectWithStats(collectionName, object, stats, cb) { const objectId = _.isString(object) ? object : object.id; const type = object.type; @@ -806,7 +878,8 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { `${objectType} Updated` ); - // :TODO: we need to UPDATE the existing stored Message object if this is a Note + // Update any assoc Message object + this._updateMessageAssocWithNote(targetObjectId, activity); return this.webServer.accepted(resp); } From 5314fb4ad9cd9d7497027bf9394a82a6ed7d95c3 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 13 Mar 2023 13:33:54 -0600 Subject: [PATCH 178/233] Browse public messages from AP menu; Fix ACS --- .../luciano_blocktronics/activitypub_menu.ans | Bin 3976 -> 3992 bytes art/themes/luciano_blocktronics/theme.hjson | 16 ++++++++ core/config_default.js | 2 +- misc/menu_templates/activitypub.in.hjson | 38 ++++++++++++++++++ 4 files changed, 55 insertions(+), 1 deletion(-) diff --git a/art/themes/luciano_blocktronics/activitypub_menu.ans b/art/themes/luciano_blocktronics/activitypub_menu.ans index 969cfbfda9eef7683d79ce60c0224f3b3dfd3612..ae151f7d9909bdac181f9d492821f187ea815b6a 100644 GIT binary patch delta 49 zcmeB>pCP}YpGR0a+Az03K|0#N+Sn|&pfo8bGkG#Uui|6{4(ZM3cqTHj7#kYvPEO`m F1ps#W4o?68 delta 29 lcmbOs-yy%DpJ#F|m-^%cPT9?md3u;wjEqcWCl~Xp0sxlY2^atX diff --git a/art/themes/luciano_blocktronics/theme.hjson b/art/themes/luciano_blocktronics/theme.hjson index b04255a62..1f5448bdc 100644 --- a/art/themes/luciano_blocktronics/theme.hjson +++ b/art/themes/luciano_blocktronics/theme.hjson @@ -1395,6 +1395,22 @@ } } + activityPubPublicMessages: { + config: { + dateTimeFormat: ddd MMM Do + allViewsInfoFormat10: "|00|15{msgNumSelected:>4.4} |08/ |15{msgNumTotal:<4.4}" + } + mci: { + VM1: { + height: 14 + width: 70 + itemFormat: "|00|15{msgNum:>4} |03{subject:<28.27} |11{fromUserName:<20.20} |03{ts:<15.16} |15{newIndicator}" + focusItemFormat: "|00|19|15{msgNum:>4} {subject:<28.27} {fromUserName:<20.20} {ts:<15.16} {newIndicator}" + } + } + } + + // MRC mrc: { config: { messageFormat: "|00|10<|02{fromUserName}|10>|00 |03{message}|00" diff --git a/core/config_default.js b/core/config_default.js index 522a3f7d1..1a254743a 100644 --- a/core/config_default.js +++ b/core/config_default.js @@ -913,7 +913,7 @@ module.exports = () => { desc: 'Public ActivityPub messages', acs: { - read: 'GM[users]SE[activitypub]', + read: 'GM[users]SE[activitypub]AE1', }, areas: { diff --git a/misc/menu_templates/activitypub.in.hjson b/misc/menu_templates/activitypub.in.hjson index 97c44e5c1..233853415 100644 --- a/misc/menu_templates/activitypub.in.hjson +++ b/misc/menu_templates/activitypub.in.hjson @@ -5,6 +5,10 @@ art: activitypub_menu prompt: activityPubMenuCommand submit: [ + { + value: { command: "G" } + action: @menu:fullLogoffSequence + } { value: {command: "S"} action: [ @@ -41,6 +45,10 @@ value: { command: "E" } action: @menu:privateMailMenu } + { + value: { command: "P" } + action: @menu:activityPubPublicMessages + } ] } @@ -222,6 +230,36 @@ } } + activityPubPublicMessages: { + desc: ActivityPub Public + module: msg_list + art: MSGLIST + config: { + messageAreaTag: activitypub_shared + menuViewPost: messageAreaViewPost + } + form: { + 0: { + mci: { + VM1: { + focus: true + submit: true + argName: messageIndex + } + } + submit: { + *: [ + { + value: { messageIndex: null } + action: @method:selectMessage + } + ] + } + actionKeys: @reference:common.quitToPrev + } + } + } + activityPubNotEnabled: { desc: ActivityPub Not Enabled art: activitypub_not_enabled From 10e2abffc66926e074eb7333101e3b901f5c04b8 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Tue, 14 Mar 2023 21:58:03 -0600 Subject: [PATCH 179/233] Trim ActivityPub SharedInbox collection (Notes) along with assoc message area --- core/activitypub/collection.js | 60 +++++++++++++++++++++++++++- core/config_default.js | 2 + core/message_area.js | 71 +++++++++++++++++++++++++++++----- 3 files changed, 123 insertions(+), 10 deletions(-) diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index e3863fa89..021292911 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -15,7 +15,7 @@ const { getJson } = require('../http_util'); // deps const { isString } = require('lodash'); -const Log = require('../logger'); +const Log = require('../logger').log; const async = require('async'); module.exports = class Collection extends ActivityPubObject { @@ -672,6 +672,64 @@ module.exports = class Collection extends ActivityPubObject { ); } + static removeByMaxCount(collectionName, maxCount, cb) { + apDb.run( + `DELETE FROM collection + WHERE _rowid_ IN ( + SELECT _rowid_ + FROM collection + WHERE name = ? + ORDER BY _rowid_ DESC + LIMIT -1 OFFSET ${maxCount} + );`, + [maxCount], + function res(err) { + // non-arrow function for 'this' + Collection._removeByLogHelper( + collectionName, + 'MaxCount', + err, + maxCount, + this.changes + ); + return cb(err); + } + ); + } + + static removeByMaxAgeDays(collectionName, maxAgeDays, cb) { + apDb.run( + `DELETE FROM collection + WHERE name = ? AND timestamp < DATE('now', '-${maxAgeDays} days');`, + [maxAgeDays], + function res(err) { + // non-arrow function for 'this' + Collection._removeByLogHelper( + collectionName, + 'MaxAgeDays', + err, + maxAgeDays, + this.changes + ); + return cb(err); + } + ); + } + + static _removeByLogHelper(collectionName, type, err, value, deletedCount) { + if (err) { + Log.error( + { collectionName, error: err.message, type, value }, + 'Error trimming collection' + ); + } else { + Log.debug( + { collectionName, type, value, deletedCount }, + 'Collection trimmed successfully' + ); + } + } + static _rowToObjectInfo(row) { return { name: row.name, diff --git a/core/config_default.js b/core/config_default.js index 1a254743a..a237dea3d 100644 --- a/core/config_default.js +++ b/core/config_default.js @@ -923,6 +923,8 @@ module.exports = () => { alwaysExportExternal: true, subjectOptional: true, addressFlavor: 'activitypub', + maxAgeDays: 365 * 2, + maxMessages: 100000, }, }, }, diff --git a/core/message_area.js b/core/message_area.js index aed52dae4..7bb133068 100644 --- a/core/message_area.js +++ b/core/message_area.js @@ -16,6 +16,8 @@ const { WellKnownConfTags, WellKnownAreaTags, } = require('./message_const'); +const Collection = require('./activitypub/collection'); +const { Collections } = require('./activitypub/const'); // deps const async = require('async'); @@ -824,18 +826,69 @@ function trimMessageAreasScheduledEvent(args, cb) { return callback(null, areaInfos); }, function trimGeneralAreas(areaInfos, callback) { + const cbWrap = (e, t, c) => { + if (e) { + Log.warn({ error: e.message, type: t }, `Failed trimming (${t})`); + } + return c(null); + }; + + const ApSharedAreaTag = Message.WellKnownAreaTags.ActivityPubShared; + + // Clean up messages, and any associated ActivityPub 'SharedInbox' + // Notes (ie: the source of said messages) async.each( areaInfos, - (areaInfo, next) => { - trimMessageAreaByMaxMessages(areaInfo, err => { - if (err) { - return next(err); + (areaInfo, nextArea) => { + async.series( + [ + next => { + trimMessageAreaByMaxMessages(areaInfo, err => { + return cbWrap(err, 'Messages:MaxCount', next); + }); + }, + next => { + if (areaInfo.areaTag !== ApSharedAreaTag) { + return next(null); + } + Collection.removeByMaxCount( + Collections.SharedInbox, + areaInfo.maxMessages, + err => { + return cbWrap( + err, + 'ActivityPubShared:MaxCount', + next + ); + } + ); + }, + next => { + trimMessageAreaByMaxAgeDays(areaInfo, err => { + return cbWrap(err, 'Messages:MaxAgeDays', next); + }); + }, + next => { + if (areaInfo.areaTag !== ApSharedAreaTag) { + return next(null); + } + Collection.removeByMaxAgeDays( + Collections.SharedInbox, + areaInfo.maxAgeDays, + err => { + return cbWrap( + err, + 'ActivityPubShared:MaxAgeDays', + next + ); + } + ); + }, + ], + err => { + return nextArea(err); } - - trimMessageAreaByMaxAgeDays(areaInfo, err => { - return next(err); - }); - }); + ); }, callback ); From 8c609b79bb0d076fc44957aaef2a847d56a5361d Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Tue, 14 Mar 2023 22:22:11 -0600 Subject: [PATCH 180/233] oputil updates for AP enabled/disabled, small change to 2FA info --- core/oputil/oputil_user.js | 53 ++++++++++++------- .../content/web_handlers/activitypub.js | 2 +- 2 files changed, 34 insertions(+), 21 deletions(-) diff --git a/core/oputil/oputil_user.js b/core/oputil/oputil_user.js index 120ff9ae6..336077566 100644 --- a/core/oputil/oputil_user.js +++ b/core/oputil/oputil_user.js @@ -13,6 +13,7 @@ const getHelpFor = require('./oputil_help.js').getHelpFor; const Errors = require('../enig_error.js').Errors; const UserProps = require('../user_property.js'); +// deps const async = require('async'); const _ = require('lodash'); const moment = require('moment'); @@ -337,7 +338,9 @@ function modUserGroups(user) { } function showUserInfo(user) { - const User = require('../../core/user.js'); + const User = require('../user'); + const ActivityPubSettings = require('../activitypub/settings'); + const { OTPTypes } = require('../user_2fa_otp'); const statusDesc = () => { const status = user.properties[UserProps.AccountStatus]; @@ -362,7 +365,9 @@ function showUserInfo(user) { return user.properties[UserProps.ThemeId]; }; - const stdInfo = `User information: + const apSettings = ActivityPubSettings.fromUser(user); + + let infoDump = `User information: Username : ${user.username}${user.isRoot() ? ' (root/SysOp)' : ''} Real name : ${propOrNA(UserProps.RealName)} ID : ${user.userId} @@ -374,27 +379,35 @@ Last login : ${lastLogin()} Login count : ${propOrNA(UserProps.LoginCount)} Email : ${propOrNA(UserProps.EmailAddress)} Location : ${propOrNA(UserProps.Location)} -Affiliations : ${propOrNA(UserProps.Affiliations)}`; - let secInfo = ''; - if (argv.security) { - const otp = user.getProperty(UserProps.AuthFactor2OTP); - if (otp) { - const backupCodesOrNa = () => { - try { - return JSON.parse( - user.getProperty(UserProps.AuthFactor2OTPBackupCodes) - ).join(', '); - } catch (e) { - return 'N/A'; - } - }; - secInfo = `\n2FA OTP : ${otp} -OTP secret : ${user.getProperty(UserProps.AuthFactor2OTPSecret) || 'N/A'} -OTP Backup : ${backupCodesOrNa()}`; +Affiliations : ${propOrNA(UserProps.Affiliations)} +ActivityPub : ${apSettings.enabled ? 'enabled' : 'disabled'}`; + + const otp = user.getProperty(UserProps.AuthFactor2OTP); + const oppDesc = + { + [OTPTypes.RFC6238_TOTP]: 'RFC6238 TOTP', + [OTPTypes.RFC4266_HOTP]: 'rfc4266 HOTP', + [OTPTypes.GoogleAuthenticator]: 'GoogleAuth', + }[otp] || 'disabled'; + infoDump += `\n2FA OTP : ${oppDesc}`; + + if (argv.security && otp) { + const backupCodesOrNa = () => { + try { + return JSON.parse( + user.getProperty(UserProps.AuthFactor2OTPBackupCodes) + ).join(', '); + } catch (e) { + return 'N/A'; + } + }; + infoDump += `\nOTP secret : ${ + user.getProperty(UserProps.AuthFactor2OTPSecret) || 'N/A' } +OTP Backup : ${backupCodesOrNa()}`; } - console.info(`${stdInfo}${secInfo}`); + console.info(infoDump); } function twoFactorAuthOTP(user) { diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 6f78eb416..daeb336aa 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -891,7 +891,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { _deliverNoteToSharedInbox(activity, note, cb) { this.log.info( { activityId: activity.id, noteId: note.id }, - 'Delivering Note to Public inbox' + 'Delivering Note to Public/Shared inbox' ); Collection.addSharedInboxItem(activity, true, err => { From e9155274275522fce18ccb424adf013774b0fa2d Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 17 Mar 2023 18:40:54 -0600 Subject: [PATCH 181/233] oputil ap condition USERNAME --- core/activitypub/user_config.js | 7 +- core/activitypub/util.js | 5 +- core/oputil/activitypub.js | 152 ++++++++++++++++++ core/oputil/oputil_help.js | 7 + core/oputil/oputil_main.js | 3 + core/predefined_mci.js | 2 +- core/servers/content/web.js | 10 +- .../servers/content/web_handlers/nodeinfo2.js | 2 +- core/web_util.js | 17 ++ 9 files changed, 187 insertions(+), 18 deletions(-) create mode 100644 core/oputil/activitypub.js create mode 100644 core/web_util.js diff --git a/core/activitypub/user_config.js b/core/activitypub/user_config.js index 882f18eb4..3e2078275 100644 --- a/core/activitypub/user_config.js +++ b/core/activitypub/user_config.js @@ -275,16 +275,11 @@ exports.getModule = class ActivityPubUserConfig extends MenuModule { _updateCustomViews() { const enabledToggleView = this.getView('main', MciViewIds.main.enabledToggle); - const ws = this._webServer(); const enabled = enabledToggleView.isTrue(); const formatObj = { enabled, status: enabled ? 'enabled' : 'disabled', - subject: enabled - ? ws - ? userNameToSubject(this.client.user.username, ws) - : 'N/A' - : '', + subject: enabled ? userNameToSubject(this.client.user.username) : 'N/A', }; this.updateCustomViewTextsWithFilter( diff --git a/core/activitypub/util.js b/core/activitypub/util.js index 8adfd6f0c..d66d657e6 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -5,6 +5,7 @@ const ActivityPubSettings = require('./settings'); const { stripAnsiControlCodes } = require('../string_util'); const { WellKnownRecipientFields } = require('./const'); const Log = require('../logger').log; +const { getWebDomain } = require('../web_util'); // deps const _ = require('lodash'); @@ -226,8 +227,8 @@ function userNameFromSubject(subject) { return subject.replace(/^acct:(.+)$/, '$1'); } -function userNameToSubject(userName, webServer) { - return `@${userName}@${webServer.getDomain()}`; +function userNameToSubject(userName) { + return `@${userName}@${getWebDomain()}`; } function extractMessageMetadata(body) { diff --git a/core/oputil/activitypub.js b/core/oputil/activitypub.js new file mode 100644 index 000000000..11858d5db --- /dev/null +++ b/core/oputil/activitypub.js @@ -0,0 +1,152 @@ +const { + printUsageAndSetExitCode, + ExitCodes, + argv, + initConfigAndDatabases, +} = require('./oputil_common'); +const getHelpFor = require('./oputil_help.js').getHelpFor; +const UserProps = require('../user_property'); +const { Errors } = require('../enig_error'); + +// deps +const async = require('async'); +const { get } = require('lodash'); + +exports.handleUserCommand = handleUserCommand; + +function applyAction(username, actionFunc, cb) { + initConfigAndDatabases(err => { + if (err) { + return cb(err); + } + + if (!validateActivityPub()) { + return cb(Errors.General('Activity Pub is not enabled')); + } + + if ('*' === username) { + return actionFunc(null, cb); + } else { + const User = require('../../core/user.js'); + User.getUserIdAndName(username, (err, userId) => { + if (err) { + // try user ID if number was supplied + userId = parseInt(userId); + if (isNaN(userId)) { + return cb(err); + } + } + + User.getUser(userId, (err, user) => { + if (err) { + return cb(err); + } + return actionFunc(user, cb); + }); + }); + } + }); +} + +function conditionSingleUser(User, username, userId, settings, cb) { + const { userNameToSubject } = require('../activitypub/util'); + const subject = userNameToSubject(username); + if (!subject) { + return cb(Errors.General(`Failed to get subject for ${username}`)); + } + + console.info(`Conditioning ${username} (${userId}) -> ${subject}...`); + + User.persistPropertyByUserId(userId, UserProps.ActivityPubSettings, settings, err => { + return cb(err); + }); +} + +function actionConditionAllUsers(_, cb) { + const User = require('../../core/user.js'); + const ActivityPubSettings = require('../activitypub/settings'); + const defaultSettings = JSON.stringify(new ActivityPubSettings()); + + User.getUserList({}, (err, userList) => { + if (err) { + return cb(err); + } + + async.each( + userList, + (entry, next) => { + conditionSingleUser( + User, + entry.userName, + entry.userId, + defaultSettings, + next + ); + }, + err => { + return cb(err); + } + ); + }); +} + +function actionConditionUser(user, cb) { + const User = require('../../core/user.js'); + const ActivityPubSettings = require('../activitypub/settings'); + const defaultSettings = JSON.stringify(new ActivityPubSettings()); + return conditionSingleUser(User, user.username, user.userId, defaultSettings, cb); +} + +function validateActivityPub() { + // + // Web Server, and ActivityPub both must be enabled + // + const sysConfig = require('../config').get; + const config = sysConfig(); + if ( + true !== get(config, 'contentServers.web.http.enabled') && + true !== get(config, 'contentServers.web.https.enabled') + ) { + return false; + } + + return true === get(config, 'contentServers.web.handlers.activityPub.enabled'); +} + +function conditionUser(action, username) { + return applyAction( + username, + '*' === username ? actionConditionAllUsers : actionConditionUser, + err => { + if (err) { + console.error(err.message); + } + } + ); +} + +function handleUserCommand() { + const errUsage = () => { + return printUsageAndSetExitCode(getHelpFor('ActivityPub'), ExitCodes.ERROR); + }; + + if (true === argv.help) { + return errUsage(); + } + + const action = argv._[1]; + const usernameIdx = ['condition'].includes(action) + ? argv._.length - 1 + : argv._.length; + const username = argv._[usernameIdx]; + + if (!username) { + return errUsage(); + } + + return ( + { + condition: conditionUser, + }[action] || errUsage + )(action, username); +} diff --git a/core/oputil/oputil_help.js b/core/oputil/oputil_help.js index 22ed520a2..c7a17d099 100644 --- a/core/oputil/oputil_help.js +++ b/core/oputil/oputil_help.js @@ -20,6 +20,7 @@ Commands: config Configuration management fb File base management mb Message base management + ap ActivityPub management `, User: `usage: oputil.js user [] @@ -208,6 +209,12 @@ qwk-export arguments: TIMESTAMP. --no-qwke Disable QWKE extensions. --no-synchronet Disable Synchronet style extensions. +`, + ActivityPub: `usage: oputil.js ap [] +Actions: + condition USERNAME Condition user with system ActivityPub defaults + + Instead of an actual USERNAME, the '*' character may be substituted. `, }); diff --git a/core/oputil/oputil_main.js b/core/oputil/oputil_main.js index 9dcbc5104..985ff8379 100644 --- a/core/oputil/oputil_main.js +++ b/core/oputil/oputil_main.js @@ -10,6 +10,7 @@ const handleFileBaseCommand = require('./oputil_file_base.js').handleFileBaseCom const handleMessageBaseCommand = require('./oputil_message_base.js').handleMessageBaseCommand; const handleConfigCommand = require('./oputil_config.js').handleConfigCommand; +const handleApCommand = require('./activitypub').handleUserCommand; const getHelpFor = require('./oputil_help.js').getHelpFor; module.exports = function () { @@ -32,6 +33,8 @@ module.exports = function () { return handleFileBaseCommand(); case 'mb': return handleMessageBaseCommand(); + case 'ap': + return handleApCommand(); default: return printUsageAndSetExitCode(getHelpFor('General'), ExitCodes.BAD_COMMAND); } diff --git a/core/predefined_mci.js b/core/predefined_mci.js index 321daec36..bd4d05c28 100644 --- a/core/predefined_mci.js +++ b/core/predefined_mci.js @@ -154,7 +154,7 @@ const PREDEFINED_MCI_GENERATORS = { if (!webServer) { return 'N/A'; } - return userNameToSubject(client.user.username, webServer); + return userNameToSubject(client.user.username); }, LO: function location(client) { return userStatAsString(client, UserProps.Location, ''); diff --git a/core/servers/content/web.js b/core/servers/content/web.js index 3062689cc..cf9331a6f 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -5,6 +5,7 @@ const Config = require('../../config.js').get; const { Errors } = require('../../enig_error.js'); const { loadModulesForCategory, moduleCategories } = require('../../module_util'); const WebHandlerModule = require('../../web_handler_module'); +const { getWebDomain } = require('../../web_util'); // deps const http = require('http'); @@ -90,14 +91,7 @@ exports.getModule = class WebServerModule extends ServerModule { } getDomain() { - const config = Config(); - const overridePrefix = _.get(config, 'contentServers.web.overrideUrlPrefix'); - if (_.isString(overridePrefix)) { - const url = new URL(overridePrefix); - return url.hostname; - } - - return config.contentServers.web.domain; + return getWebDomain(); } baseUrl() { diff --git a/core/servers/content/web_handlers/nodeinfo2.js b/core/servers/content/web_handlers/nodeinfo2.js index 9adab0ef3..52bdf5f13 100644 --- a/core/servers/content/web_handlers/nodeinfo2.js +++ b/core/servers/content/web_handlers/nodeinfo2.js @@ -18,7 +18,7 @@ exports.moduleInfo = { packageName: 'codes.l33t.enigma.web.handler.nodeinfo2', }; -exports.getModule = class NodeInfo2WebHadnler extends WebHandlerModule { +exports.getModule = class NodeInfo2WebHandler extends WebHandlerModule { constructor() { super(); } diff --git a/core/web_util.js b/core/web_util.js new file mode 100644 index 000000000..eb13a8eb8 --- /dev/null +++ b/core/web_util.js @@ -0,0 +1,17 @@ +const Config = require('./config').get; + +// deps +const { get, isString } = require('lodash'); + +exports.getWebDomain = getWebDomain; + +function getWebDomain() { + const config = Config(); + const overridePrefix = get(config, 'contentServers.web.overrideUrlPrefix'); + if (isString(overridePrefix)) { + const url = new URL(overridePrefix); + return url.hostname; + } + + return config.contentServers.web.domain; +} From fb02fc599a39671e3f038e1cf738d0df551a719b Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 18 Mar 2023 14:30:37 -0600 Subject: [PATCH 182/233] Remove need for WebServer in a lot of areas, oputil ap condition functional * Getting domain, URLs, etc. for local web server do not need a web server instance themselves * fix up oputil --- core/activitypub/actor.js | 12 ++--- core/activitypub/collection.js | 14 +++-- core/activitypub/endpoint.js | 45 ++++++++-------- core/activitypub/object.js | 4 +- core/activitypub/util.js | 42 +++++++++++++++ core/file_area_web.js | 5 +- core/oputil/activitypub.js | 47 ++++++++--------- core/oputil/oputil_common.js | 2 + core/oputil/oputil_help.js | 3 ++ core/scanner_tossers/activitypub.js | 2 +- core/servers/content/web.js | 48 ----------------- .../content/web_handlers/activitypub.js | 51 +++---------------- .../servers/content/web_handlers/nodeinfo2.js | 5 +- .../content/web_handlers/system_general.js | 5 +- .../servers/content/web_handlers/webfinger.js | 34 +++++-------- core/user_2fa_otp_web_register.js | 6 +-- core/user_property.js | 2 + core/web_password_reset.js | 5 +- core/web_util.js | 46 +++++++++++++++++ 19 files changed, 187 insertions(+), 191 deletions(-) diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 998aa6f5b..2d7d82e63 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -115,14 +115,14 @@ module.exports = class Actor extends ActivityPubObject { ? user.getSanitizedName('real') : user.username, endpoints: { - sharedInbox: Endpoints.sharedInbox(webServer), + sharedInbox: Endpoints.sharedInbox(), }, - inbox: Endpoints.inbox(webServer, user), - outbox: Endpoints.outbox(webServer, user), - followers: Endpoints.followers(webServer, user), - following: Endpoints.following(webServer, user), + inbox: Endpoints.inbox(user), + outbox: Endpoints.outbox(user), + followers: Endpoints.followers(user), + following: Endpoints.following(user), summary: user.getProperty(UserProps.AutoSignature) || '', - url: Endpoints.profile(webServer, user), + url: Endpoints.profile(user), manuallyApprovesFollowers: userSettings.manuallyApprovesFollowers, discoverable: userSettings.discoverable, // :TODO: we can start to define BBS related stuff with the community perhaps diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index 021292911..096451ff1 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -84,7 +84,7 @@ module.exports = class Collection extends ActivityPubObject { } static addFollower(owningUser, followingActor, webServer, ignoreDupes, cb) { - const collectionId = Endpoints.followers(webServer, owningUser); + const collectionId = Endpoints.followers(owningUser); return Collection.addToCollection( Collections.Followers, owningUser, @@ -98,8 +98,7 @@ module.exports = class Collection extends ActivityPubObject { } static addFollowRequest(owningUser, requestingActor, webServer, ignoreDupes, cb) { - const collectionId = - Endpoints.makeUserUrl(webServer, owningUser) + 'follow-requests'; + const collectionId = Endpoints.makeUserUrl(owningUser) + 'follow-requests'; return Collection.addToCollection( Collections.FollowRequests, owningUser, @@ -113,7 +112,7 @@ module.exports = class Collection extends ActivityPubObject { } static addFollowing(owningUser, followingActor, webServer, ignoreDupes, cb) { - const collectionId = Endpoints.following(webServer, owningUser); + const collectionId = Endpoints.following(owningUser); return Collection.addToCollection( Collections.Following, owningUser, @@ -127,7 +126,7 @@ module.exports = class Collection extends ActivityPubObject { } static addOutboxItem(owningUser, outboxItem, isPrivate, webServer, ignoreDupes, cb) { - const collectionId = Endpoints.outbox(webServer, owningUser); + const collectionId = Endpoints.outbox(owningUser); return Collection.addToCollection( Collections.Outbox, owningUser, @@ -141,7 +140,7 @@ module.exports = class Collection extends ActivityPubObject { } static addInboxItem(inboxItem, owningUser, webServer, ignoreDupes, cb) { - const collectionId = Endpoints.inbox(webServer, owningUser); + const collectionId = Endpoints.inbox(owningUser); return Collection.addToCollection( Collections.Inbox, owningUser, @@ -498,8 +497,7 @@ module.exports = class Collection extends ActivityPubObject { } // e.g. http://somewhere.com/_enig/ap/users/NuSkooler/followers - const collectionId = - Endpoints.makeUserUrl(webServer, owningUser) + `/${collectionName}`; + const collectionId = Endpoints.makeUserUrl(owningUser) + `/${collectionName}`; if (!page) { return apDb.get( diff --git a/core/activitypub/endpoint.js b/core/activitypub/endpoint.js index 53dabadb2..e4429a543 100644 --- a/core/activitypub/endpoint.js +++ b/core/activitypub/endpoint.js @@ -1,4 +1,5 @@ const { WellKnownLocations } = require('../servers/content/web'); +const { buildUrl } = require('../web_util'); // deps const { v4: UUIDv4 } = require('uuid'); @@ -16,46 +17,42 @@ exports.objectId = objectId; const ActivityPubUsersPrefix = '/ap/users/'; -function makeUserUrl(webServer, user, relPrefix = ActivityPubUsersPrefix) { - return webServer.buildUrl( - WellKnownLocations.Internal + `${relPrefix}${user.username}` - ); +function makeUserUrl(user, relPrefix = ActivityPubUsersPrefix) { + return buildUrl(WellKnownLocations.Internal + `${relPrefix}${user.username}`); } -function inbox(webServer, user) { - return makeUserUrl(webServer, user, ActivityPubUsersPrefix) + '/inbox'; +function inbox(user) { + return makeUserUrl(user, ActivityPubUsersPrefix) + '/inbox'; } -function outbox(webServer, user) { - return makeUserUrl(webServer, user, ActivityPubUsersPrefix) + '/outbox'; +function outbox(user) { + return makeUserUrl(user, ActivityPubUsersPrefix) + '/outbox'; } -function followers(webServer, user) { - return makeUserUrl(webServer, user, ActivityPubUsersPrefix) + '/followers'; +function followers(user) { + return makeUserUrl(user, ActivityPubUsersPrefix) + '/followers'; } -function following(webServer, user) { - return makeUserUrl(webServer, user, ActivityPubUsersPrefix) + '/following'; +function following(user) { + return makeUserUrl(user, ActivityPubUsersPrefix) + '/following'; } -function actorId(webServer, user) { - return makeUserUrl(webServer, user, ActivityPubUsersPrefix); +function actorId(user) { + return makeUserUrl(user, ActivityPubUsersPrefix); } -function profile(webServer, user) { - return webServer.buildUrl(WellKnownLocations.Internal + `/wf/@${user.username}`); +function profile(user) { + return buildUrl(WellKnownLocations.Internal + `/wf/@${user.username}`); } -function avatar(webServer, user, filename) { - return makeUserUrl(webServer, user, '/users/') + `/avatar/${filename}`; +function avatar(user, filename) { + return makeUserUrl(user, '/users/') + `/avatar/${filename}`; } -function sharedInbox(webServer) { - return webServer.buildUrl(WellKnownLocations.Internal + '/ap/shared-inbox'); +function sharedInbox() { + return buildUrl(WellKnownLocations.Internal + '/ap/shared-inbox'); } -function objectId(webServer, objectType) { - return webServer.buildUrl( - WellKnownLocations.Internal + `/ap/${UUIDv4()}/${objectType}` - ); +function objectId(objectType) { + return buildUrl(WellKnownLocations.Internal + `/ap/${UUIDv4()}/${objectType}`); } diff --git a/core/activitypub/object.js b/core/activitypub/object.js index 21e4217b4..10dd7a3ce 100644 --- a/core/activitypub/object.js +++ b/core/activitypub/object.js @@ -84,7 +84,7 @@ module.exports = class ActivityPubObject { } static makeObjectId(webServer, objectType) { - return Endpoints.objectId(webServer, objectType); + return Endpoints.objectId(objectType); } sendTo(inboxEndpoint, fromUser, webServer, cb) { @@ -103,7 +103,7 @@ module.exports = class ActivityPubObject { }, sign: { key: privateKey, - keyId: Endpoints.actorId(webServer, fromUser) + '#main-key', + keyId: Endpoints.actorId(fromUser) + '#main-key', authorizationHeaderName: 'Signature', headers: HttpSignatureSignHeaders, }, diff --git a/core/activitypub/util.js b/core/activitypub/util.js index d66d657e6..8f19d0fea 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -6,6 +6,7 @@ const { stripAnsiControlCodes } = require('../string_util'); const { WellKnownRecipientFields } = require('./const'); const Log = require('../logger').log; const { getWebDomain } = require('../web_util'); +const Endpoints = require('./endpoint'); // deps const _ = require('lodash'); @@ -30,6 +31,7 @@ exports.userNameFromSubject = userNameFromSubject; exports.userNameToSubject = userNameToSubject; exports.extractMessageMetadata = extractMessageMetadata; exports.recipientIdsFromObject = recipientIdsFromObject; +exports.prepareLocalUserAsActor = prepareLocalUserAsActor; // :TODO: more info in default // this profile template is the *default* for both WebFinger @@ -262,3 +264,43 @@ function recipientIdsFromObject(obj) { return Array.from(new Set(ids)); } + +function prepareLocalUserAsActor(user, options = { force: false }, cb) { + const hasProps = + user.getProperty(UserProps.ActivityPubActorId) && + user.getProperty(UserProps.PrivateActivityPubSigningKey) && + user.getProperty(UserProps.PublicActivityPubSigningKey); + + if (hasProps && !options.force) { + return cb(null); + } + + const actorId = Endpoints.actorId(user); + user.setProperty(UserProps.ActivityPubActorId, actorId); + + user.updateActivityPubKeyPairProperties(err => { + if (err) { + return cb(err); + } + + user.generateNewRandomAvatar((err, outPath) => { + if (err) { + return err; + } + + // :TODO: fetch over +op default overrides here, e.g. 'enabled' + const apSettings = ActivityPubSettings.fromUser(user); + + const filename = paths.basename(outPath); + const avatarUrl = Endpoints.avatar(user, filename); + + apSettings.image = avatarUrl; + apSettings.icon = avatarUrl; + + user.setProperty(UserProps.AvatarImageUrl, avatarUrl); + user.setProperty(UserProps.ActivityPubSettings, JSON.stringify(apSettings)); + + return cb(null); + }); + }); +} diff --git a/core/file_area_web.js b/core/file_area_web.js index 4ffe24916..6c04f59e3 100644 --- a/core/file_area_web.js +++ b/core/file_area_web.js @@ -17,6 +17,7 @@ const webServerPackageName = require('./servers/content/web.js').moduleInfo.pack const Events = require('./events.js'); const UserProps = require('./user_property.js'); const SysProps = require('./system_menu_method.js'); +const { buildUrl } = require('./web_util'); // deps const hashids = require('hashids/cjs'); @@ -202,11 +203,11 @@ class FileAreaWebAccess { buildSingleFileTempDownloadLink(client, fileEntry, hashId) { hashId = hashId || this.getSingleFileHashId(client, fileEntry); - return this.webServer.instance.buildUrl(`${Config().fileBase.web.path}${hashId}`); + return buildUrl(`${Config().fileBase.web.path}${hashId}`); } buildBatchArchiveTempDownloadLink(client, hashId) { - return this.webServer.instance.buildUrl(`${Config().fileBase.web.path}${hashId}`); + return buildUrl(`${Config().fileBase.web.path}${hashId}`); } getExistingTempDownloadServeItem(client, fileEntry, cb) { diff --git a/core/oputil/activitypub.js b/core/oputil/activitypub.js index 11858d5db..a0a2c2807 100644 --- a/core/oputil/activitypub.js +++ b/core/oputil/activitypub.js @@ -5,7 +5,6 @@ const { initConfigAndDatabases, } = require('./oputil_common'); const getHelpFor = require('./oputil_help.js').getHelpFor; -const UserProps = require('../user_property'); const { Errors } = require('../enig_error'); // deps @@ -48,24 +47,30 @@ function applyAction(username, actionFunc, cb) { }); } -function conditionSingleUser(User, username, userId, settings, cb) { - const { userNameToSubject } = require('../activitypub/util'); - const subject = userNameToSubject(username); +function conditionSingleUser(user, cb) { + const { userNameToSubject, prepareLocalUserAsActor } = require('../activitypub/util'); + + const subject = userNameToSubject(user.username); if (!subject) { - return cb(Errors.General(`Failed to get subject for ${username}`)); + return cb(Errors.General(`Failed to get subject for ${user.username}`)); } - console.info(`Conditioning ${username} (${userId}) -> ${subject}...`); + console.info(`Conditioning ${user.username} (${user.userId}) -> ${subject}...`); + prepareLocalUserAsActor(user, { force: argv.force }, err => { + if (err) { + return cb(err); + } - User.persistPropertyByUserId(userId, UserProps.ActivityPubSettings, settings, err => { - return cb(err); + user.persistProperties(user.properties, err => { + if (err) { + return cb(err); + } + }); }); } function actionConditionAllUsers(_, cb) { const User = require('../../core/user.js'); - const ActivityPubSettings = require('../activitypub/settings'); - const defaultSettings = JSON.stringify(new ActivityPubSettings()); User.getUserList({}, (err, userList) => { if (err) { @@ -75,13 +80,12 @@ function actionConditionAllUsers(_, cb) { async.each( userList, (entry, next) => { - conditionSingleUser( - User, - entry.userName, - entry.userId, - defaultSettings, - next - ); + User.getUser(entry.userId, (err, user) => { + if (err) { + return next(err); + } + return conditionSingleUser(user, next); + }); }, err => { return cb(err); @@ -90,13 +94,6 @@ function actionConditionAllUsers(_, cb) { }); } -function actionConditionUser(user, cb) { - const User = require('../../core/user.js'); - const ActivityPubSettings = require('../activitypub/settings'); - const defaultSettings = JSON.stringify(new ActivityPubSettings()); - return conditionSingleUser(User, user.username, user.userId, defaultSettings, cb); -} - function validateActivityPub() { // // Web Server, and ActivityPub both must be enabled @@ -116,7 +113,7 @@ function validateActivityPub() { function conditionUser(action, username) { return applyAction( username, - '*' === username ? actionConditionAllUsers : actionConditionUser, + '*' === username ? actionConditionAllUsers : conditionSingleUser, err => { if (err) { console.error(err.message); diff --git a/core/oputil/oputil_common.js b/core/oputil/oputil_common.js index bbc6c500c..3e56734b8 100644 --- a/core/oputil/oputil_common.js +++ b/core/oputil/oputil_common.js @@ -10,6 +10,7 @@ const async = require('async'); const inq = require('inquirer'); const fs = require('fs'); const hjson = require('hjson'); +const log = require('../../core/logger'); const packageJson = require('../../package.json'); @@ -81,6 +82,7 @@ function initConfigAndDatabases(cb) { initConfig(callback); }, function initDb(callback) { + log.init(); db.initializeDatabases(callback); }, function initArchiveUtil(callback) { diff --git a/core/oputil/oputil_help.js b/core/oputil/oputil_help.js index c7a17d099..6a5ee7d95 100644 --- a/core/oputil/oputil_help.js +++ b/core/oputil/oputil_help.js @@ -215,6 +215,9 @@ Actions: condition USERNAME Condition user with system ActivityPub defaults Instead of an actual USERNAME, the '*' character may be substituted. + +condition arguments: + --force Force condition; overrides any existing settings `, }); diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index 35e23ed40..4c7b83832 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -299,7 +299,7 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule } _collectFollowersSharedInboxEndpoints(localUser, cb) { - const localFollowersEndpoint = Endpoints.followers(this._webServer(), localUser); + const localFollowersEndpoint = Endpoints.followers(localUser); Collection.followers(localFollowersEndpoint, 'all', (err, collection) => { if (err) { diff --git a/core/servers/content/web.js b/core/servers/content/web.js index cf9331a6f..9bc8ebb2b 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -5,7 +5,6 @@ const Config = require('../../config.js').get; const { Errors } = require('../../enig_error.js'); const { loadModulesForCategory, moduleCategories } = require('../../module_util'); const WebHandlerModule = require('../../web_handler_module'); -const { getWebDomain } = require('../../web_util'); // deps const http = require('http'); @@ -90,53 +89,6 @@ exports.getModule = class WebServerModule extends ServerModule { return this.log; } - getDomain() { - return getWebDomain(); - } - - baseUrl() { - const config = Config(); - const overridePrefix = _.get(config, 'contentServers.web.overrideUrlPrefix'); - if (overridePrefix) { - return overridePrefix; - } - - let schema; - let port; - if (config.contentServers.web.https.enabled) { - schema = 'https://'; - port = - 443 === config.contentServers.web.https.port - ? '' - : `:${config.contentServers.web.https.port}`; - } else { - schema = 'http://'; - port = - 80 === config.contentServers.web.http.port - ? '' - : `:${config.contentServers.web.http.port}`; - } - - return `${schema}${config.contentServers.web.domain}${port}`; - } - - fullUrl(req) { - const base = this.baseUrl(); - return new URL(`${base}${req.url}`); - } - - buildUrl(pathAndQuery) { - // - // Create a URL such as - // https://l33t.codes:44512/ + |pathAndQuery| - // - // Prefer HTTPS over HTTP. Be explicit about the port - // only if non-standard. Allow users to override full prefix in config. - // - const base = this.baseUrl(); - return `${base}${pathAndQuery}`; - } - isEnabled() { return this.enableHttp || this.enableHttps; } diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index daeb336aa..c8f7caaf2 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -4,8 +4,8 @@ const { getUserProfileTemplatedBody, DefaultProfileTemplate, getActorId, + prepareLocalUserAsActor, } = require('../../../activitypub/util'); -const Endpoints = require('../../../activitypub/endpoint'); const { ActivityStreamMediaType, WellKnownActivity, @@ -21,15 +21,14 @@ const Note = require('../../../activitypub/note'); const EnigAssert = require('../../../enigma_assert'); const Message = require('../../../message'); const Events = require('../../../events'); -const UserProps = require('../../../user_property'); const { Errors } = require('../../../enig_error'); +const { getFullUrl } = require('../../../web_util'); // deps const _ = require('lodash'); const enigma_assert = require('../../../enigma_assert'); const httpSignature = require('http-signature'); const async = require('async'); -const paths = require('path'); exports.moduleInfo = { name: 'ActivityPub', @@ -175,7 +174,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { _selfUrlRequestHandler(req, resp) { this.log.trace({ url: req.url }, 'Request for "self"'); - let actorId = this.webServer.fullUrl(req).toString(); + let actorId = getFullUrl(req).toString(); let sendActor = false; if (actorId.endsWith('.json')) { sendActor = true; @@ -783,7 +782,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { _localUserFromCollectionEndpoint(req, collectionName, cb) { // turn a collection URL to a Actor ID - let actorId = this.webServer.fullUrl(req).toString(); + let actorId = getFullUrl(req).toString(); const suffix = `/${collectionName}`; if (actorId.endsWith(suffix)) { actorId = actorId.slice(0, -suffix.length); @@ -986,7 +985,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.resourceNotFound(resp); } - const url = this.webServer.fullUrl(req); + const url = getFullUrl(req); const page = url.searchParams.get('page'); const collectionId = url.toString(); @@ -1037,7 +1036,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { _singlePublicNoteGetHandler(req, resp) { this.log.debug({ url: req.url }, 'Request for "Note"'); - const noteId = this.webServer.fullUrl(req).toString(); + const noteId = getFullUrl(req).toString(); Note.fromPublicNoteId(noteId, (err, note) => { if (err) { return this.webServer.internalServerError(resp, err); @@ -1180,42 +1179,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { `Preparing ActivityPub settings for "${user.username}"` ); - const actorId = Endpoints.actorId(this.webServer, user); - user.setProperty(UserProps.ActivityPubActorId, actorId); - - user.updateActivityPubKeyPairProperties(err => { - if (err) { - return cb(err); - } - - user.generateNewRandomAvatar((err, outPath) => { - if (err) { - this.log.warn( - { - username: user.username, - userId: user.userId, - error: err.message, - }, - `Failed to generate random avatar for "${user.username}"` - ); - } - - // :TODO: fetch over +op default overrides here, e.g. 'enabled' - const apSettings = ActivityPubSettings.fromUser(user); - - const filename = paths.basename(outPath); - const avatarUrl = Endpoints.avatar(this.webServer, user, filename); - - apSettings.image = avatarUrl; - apSettings.icon = avatarUrl; - - user.setProperty( - UserProps.ActivityPubSettings, - JSON.stringify(apSettings) - ); - - return cb(null); - }); - }); + return prepareLocalUserAsActor(user, cb); } }; diff --git a/core/servers/content/web_handlers/nodeinfo2.js b/core/servers/content/web_handlers/nodeinfo2.js index 52bdf5f13..741b66658 100644 --- a/core/servers/content/web_handlers/nodeinfo2.js +++ b/core/servers/content/web_handlers/nodeinfo2.js @@ -6,6 +6,7 @@ const packageJson = require('../../../../package.json'); const StatLog = require('../../../stat_log'); const SysProps = require('../../../system_property'); const SysLogKeys = require('../../../system_log'); +const { getBaseUrl, getWebDomain } = require('../../../web_util'); // deps const moment = require('moment'); @@ -30,7 +31,7 @@ exports.getModule = class NodeInfo2WebHandler extends WebHandlerModule { this.log = webServer.logger().child({ webHandler: 'NodeInfo2' }); - const domain = this.webServer.getDomain(); + const domain = getWebDomain(); if (!domain) { return cb(Errors.UnexpectedState('Web server does not have "domain" set')); } @@ -65,7 +66,7 @@ exports.getModule = class NodeInfo2WebHandler extends WebHandlerModule { const nodeInfo = { version: '1.0', server: { - baseUrl: this.webServer.baseUrl(), + baseUrl: getBaseUrl(), name: config.general.boardName, software: 'ENiGMA½ Bulletin Board Software', version: packageJson.version, diff --git a/core/servers/content/web_handlers/system_general.js b/core/servers/content/web_handlers/system_general.js index 2b92b4fe1..e5b798040 100644 --- a/core/servers/content/web_handlers/system_general.js +++ b/core/servers/content/web_handlers/system_general.js @@ -2,6 +2,7 @@ const WebHandlerModule = require('../../../web_handler_module'); const { Errors } = require('../../../enig_error'); const EngiAssert = require('../../../enigma_assert'); const Config = require('../../../config').get; +const { getFullUrl, getWebDomain } = require('../../../web_util'); // deps const paths = require('path'); @@ -28,7 +29,7 @@ exports.getModule = class SystemGeneralWebHandler extends WebHandlerModule { this.log = webServer.logger().child({ webHandler: 'SysGeneral' }); - const domain = this.webServer.getDomain(); + const domain = getWebDomain(); if (!domain) { return cb(Errors.UnexpectedState('Web server does not have "domain" set')); } @@ -44,7 +45,7 @@ exports.getModule = class SystemGeneralWebHandler extends WebHandlerModule { } _avatarGetHandler(req, resp) { - const url = this.webServer.fullUrl(req); + const url = getFullUrl(req); const filename = paths.basename(url.pathname); if (!filename) { return this.webServer.fileNotFound(resp); diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index 9326946b5..05816c4cf 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -11,6 +11,7 @@ const EngiAssert = require('../../../enigma_assert'); const User = require('../../../user'); const UserProps = require('../../../user_property'); const ActivityPubSettings = require('../../../activitypub/settings'); +const { getFullUrl, buildUrl, getWebDomain } = require('../../../web_util'); // deps const _ = require('lodash'); @@ -38,7 +39,7 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { this.log = webServer.logger().child({ webHandler: 'WebFinger' }); - const domain = this.webServer.getDomain(); + const domain = getWebDomain(); if (!domain) { return cb(Errors.UnexpectedState('Web server does not have "domain" set')); } @@ -49,15 +50,9 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { new RegExp(`^acct:(.+)@${domain}$`), // profile page // https://webfinger.net/rel/profile-page/ - new RegExp( - `^${this.webServer.buildUrl(WellKnownLocations.Internal + '/wf/@')}(.+)$` - ), + new RegExp(`^${buildUrl(WellKnownLocations.Internal + '/wf/@')}(.+)$`), // self URL - new RegExp( - `^${this.webServer.buildUrl( - WellKnownLocations.Internal + '/ap/users/' - )}(.+)$` - ), + new RegExp(`^${buildUrl(WellKnownLocations.Internal + '/ap/users/')}(.+)$`), ]; this.webServer.addRoute({ @@ -78,7 +73,7 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { _profileRequestHandler(req, resp) { // Profile requests do not have an Actor ID available - const profileQuery = this.webServer.fullUrl(req).toString(); + const profileQuery = getFullUrl(req).toString(); const accountName = this._getAccountName(profileQuery); if (!accountName) { this.log.warn( @@ -135,7 +130,7 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { } _webFingerRequestHandler(req, resp) { - const url = this.webServer.fullUrl(req); + const url = getFullUrl(req); const resource = url.searchParams.get('resource'); if (!resource) { return this.webServer.respondWithError( @@ -161,11 +156,10 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { return this.webServer.resourceNotFound(resp); } - const domain = this.webServer.getDomain(); - + const domain = getWebDomain(); const body = JSON.stringify({ subject: `acct:${localUser.username}@${domain}`, - aliases: [this._profileUrl(localUser), this._userActorId(localUser)], + aliases: [Endpoints.profile(localUser), Endpoints.actorId(localUser)], links: [ this._profilePageLink(localUser), this._selfLink(localUser), @@ -218,12 +212,8 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { }); } - _profileUrl(user) { - return Endpoints.profile(this.webServer, user); - } - _profilePageLink(user) { - const href = this._profileUrl(user); + const href = Endpoints.profile(user); return { rel: 'http://webfinger.net/rel/profile-page', type: 'text/plain', @@ -232,12 +222,12 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { } _userActorId(user) { - return Endpoints.actorId(this.webServer, user); + return Endpoints.actorId(user); } // :TODO: only if ActivityPub is enabled _selfLink(user) { - const href = this._userActorId(user); + const href = Endpoints.actorId(user); return { rel: 'self', type: 'application/activity+json', @@ -249,7 +239,7 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { _subscribeLink() { return { rel: 'http://ostatus.org/schema/1.0/subscribe', - template: this.webServer.buildUrl( + template: buildUrl( WellKnownLocations.Internal + '/ap/authorize_interaction?uri={uri}' ), }; diff --git a/core/user_2fa_otp_web_register.js b/core/user_2fa_otp_web_register.js index 27944a5c1..df6c14eea 100644 --- a/core/user_2fa_otp_web_register.js +++ b/core/user_2fa_otp_web_register.js @@ -17,6 +17,7 @@ const { sendMail } = require('./email.js'); const UserProps = require('./user_property.js'); const Log = require('./logger.js').log; const { getConnectionByUserId } = require('./client_connections.js'); +const { buildUrl } = require('./web_util'); // deps const async = require('async'); @@ -75,8 +76,7 @@ module.exports = class User2FA_OTPWebRegister { }); }, (token, textTemplate, htmlTemplate, callback) => { - const webServer = getWebServer(); - const registerUrl = webServer.instance.buildUrl( + const registerUrl = buildUrl( WellKnownLocations.Internal + `/2fa/enable_2fa_otp?token=${token}&otpType=${otpType}` ); @@ -172,7 +172,7 @@ module.exports = class User2FA_OTPWebRegister { return User2FA_OTPWebRegister.accessDenied(webServer, resp); } - const postUrl = webServer.instance.buildUrl( + const postUrl = buildUrl( WellKnownLocations.Internal + '/2fa/enable_2fa_otp' ); const config = Config(); diff --git a/core/user_property.js b/core/user_property.js index 3d40b6f56..5ddbf6024 100644 --- a/core/user_property.js +++ b/core/user_property.js @@ -70,6 +70,8 @@ module.exports = { PublicActivityPubSigningKey: 'public_key_activitypub_sign_rsa_pem', // RSA public key for ActivityPub signing PrivateActivityPubSigningKey: 'private_key_activitypub_sign_rsa_pem', // RSA private key (corresponding to PublicActivityPubSigningKey) + AvatarImageUrl: 'user_avatar_image', + ActivityPubSettings: 'activitypub_settings', // JSON object (above); see ActivityPubSettings in activitypub/settings.js ActivityPubActorId: 'activitypub_actor_id', // Actor ID representing this users }; diff --git a/core/web_password_reset.js b/core/web_password_reset.js index a1b46bf1a..1e4f4fffa 100644 --- a/core/web_password_reset.js +++ b/core/web_password_reset.js @@ -12,6 +12,7 @@ const userDb = require('./database.js').dbs.user; const getISOTimestampString = require('./database.js').getISOTimestampString; const Log = require('./logger.js').log; const UserProps = require('./user_property.js'); +const { buildUrl } = require('./web_util'); // deps const async = require('async'); @@ -121,7 +122,7 @@ class WebPasswordReset { function buildAndSendEmail(user, textTemplate, htmlTemplate, callback) { const sendMail = require('./email.js').sendMail; - const resetUrl = webServer.instance.buildUrl( + const resetUrl = buildUrl( WellKnownLocations.Internal + `/sec/reset_password?token=${ user.properties[UserProps.EmailPwResetToken] @@ -271,7 +272,7 @@ class WebPasswordReset { ); } - const postResetUrl = webServer.instance.buildUrl( + const postResetUrl = buildUrl( WellKnownLocations.Internal + '/sec/reset_password' ); diff --git a/core/web_util.js b/core/web_util.js index eb13a8eb8..024193ba3 100644 --- a/core/web_util.js +++ b/core/web_util.js @@ -4,6 +4,9 @@ const Config = require('./config').get; const { get, isString } = require('lodash'); exports.getWebDomain = getWebDomain; +exports.getBaseUrl = getBaseUrl; +exports.getFullUrl = getFullUrl; +exports.buildUrl = buildUrl; function getWebDomain() { const config = Config(); @@ -15,3 +18,46 @@ function getWebDomain() { return config.contentServers.web.domain; } + +function getBaseUrl() { + const config = Config(); + const overridePrefix = get(config, 'contentServers.web.overrideUrlPrefix'); + if (overridePrefix) { + return overridePrefix; + } + + let schema; + let port; + if (config.contentServers.web.https.enabled) { + schema = 'https://'; + port = + 443 === config.contentServers.web.https.port + ? '' + : `:${config.contentServers.web.https.port}`; + } else { + schema = 'http://'; + port = + 80 === config.contentServers.web.http.port + ? '' + : `:${config.contentServers.web.http.port}`; + } + + return `${schema}${config.contentServers.web.domain}${port}`; +} + +function getFullUrl(req) { + const base = getBaseUrl(); + return new URL(`${base}${req.url}`); +} + +function buildUrl(pathAndQuery) { + // + // Create a URL such as + // https://l33t.codes:44512/ + |pathAndQuery| + // + // Prefer HTTPS over HTTP. Be explicit about the port + // only if non-standard. Allow users to override full prefix in config. + // + const base = getBaseUrl(); + return `${base}${pathAndQuery}`; +} From 26c44b91a689c08d8948104d448715d67d59980c Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 18 Mar 2023 14:58:37 -0600 Subject: [PATCH 183/233] Bunch more removals of unneeded webServer instance --- core/activitypub/activity.js | 16 ++--- core/activitypub/actor.js | 2 +- core/activitypub/actor_search.js | 4 +- core/activitypub/collection.js | 11 ++- core/activitypub/follow_util.js | 14 ++-- core/activitypub/note.js | 4 +- core/activitypub/object.js | 4 +- core/activitypub/social_manager.js | 6 +- core/activitypub/util.js | 3 +- core/config_default.js | 8 +++ core/scanner_tossers/activitypub.js | 67 +++++++++---------- .../content/web_handlers/activitypub.js | 11 +-- .../servers/content/web_handlers/webfinger.js | 3 +- 13 files changed, 73 insertions(+), 80 deletions(-) diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index c5b5dbcd7..c45ab10e8 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -17,9 +17,9 @@ module.exports = class Activity extends ActivityPubObject { return new Activity(obj); } - static makeFollow(webServer, localActor, remoteActor) { + static makeFollow(localActor, remoteActor) { return new Activity({ - id: Activity.activityObjectId(webServer), + id: Activity.activityObjectId(), type: WellKnownActivity.Follow, actor: localActor, object: remoteActor.id, @@ -27,19 +27,19 @@ module.exports = class Activity extends ActivityPubObject { } // https://www.w3.org/TR/activitypub/#accept-activity-inbox - static makeAccept(webServer, localActor, followRequest) { + static makeAccept(localActor, followRequest) { return new Activity({ - id: Activity.activityObjectId(webServer), + id: Activity.activityObjectId(), type: WellKnownActivity.Accept, actor: localActor, object: followRequest, // previous request Activity }); } - static makeCreate(webServer, actor, obj, context) { + static makeCreate(actor, obj, context) { const activity = new Activity( { - id: Activity.activityObjectId(webServer), + id: Activity.activityObjectId(), to: obj.to, type: WellKnownActivity.Create, actor, @@ -76,7 +76,7 @@ module.exports = class Activity extends ActivityPubObject { return recipientIdsFromObject(this); } - static activityObjectId(webServer) { - return ActivityPubObject.makeObjectId(webServer, 'activity'); + static activityObjectId() { + return ActivityPubObject.makeObjectId('activity'); } }; diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 2d7d82e63..45fadf2cc 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -80,7 +80,7 @@ module.exports = class Actor extends ActivityPubObject { ]; } - static fromLocalUser(user, webServer, cb) { + static fromLocalUser(user, cb) { const userActorId = user.getProperty(UserProps.ActivityPubActorId); if (!userActorId) { return cb( diff --git a/core/activitypub/actor_search.js b/core/activitypub/actor_search.js index 36a83986f..3133c1c4c 100644 --- a/core/activitypub/actor_search.js +++ b/core/activitypub/actor_search.js @@ -256,8 +256,8 @@ exports.getModule = class ActivityPubActorSearch extends MenuModule { const actor = this._getSelectedActor(); // actor info -> actor return this.selectedActorInfo._isFollowing - ? sendFollowRequest(this.client.user, actor, this.webServer, finish) - : sendUnfollowRequest(this.client.user, actor, this.webServer, finish); + ? sendFollowRequest(this.client.user, actor, finish) + : sendUnfollowRequest(this.client.user, actor, finish); } _getSelectedActor() { diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index 096451ff1..8c0a58dcd 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -83,7 +83,7 @@ module.exports = class Collection extends ActivityPubObject { ); } - static addFollower(owningUser, followingActor, webServer, ignoreDupes, cb) { + static addFollower(owningUser, followingActor, ignoreDupes, cb) { const collectionId = Endpoints.followers(owningUser); return Collection.addToCollection( Collections.Followers, @@ -97,7 +97,7 @@ module.exports = class Collection extends ActivityPubObject { ); } - static addFollowRequest(owningUser, requestingActor, webServer, ignoreDupes, cb) { + static addFollowRequest(owningUser, requestingActor, ignoreDupes, cb) { const collectionId = Endpoints.makeUserUrl(owningUser) + 'follow-requests'; return Collection.addToCollection( Collections.FollowRequests, @@ -111,7 +111,7 @@ module.exports = class Collection extends ActivityPubObject { ); } - static addFollowing(owningUser, followingActor, webServer, ignoreDupes, cb) { + static addFollowing(owningUser, followingActor, ignoreDupes, cb) { const collectionId = Endpoints.following(owningUser); return Collection.addToCollection( Collections.Following, @@ -125,7 +125,7 @@ module.exports = class Collection extends ActivityPubObject { ); } - static addOutboxItem(owningUser, outboxItem, isPrivate, webServer, ignoreDupes, cb) { + static addOutboxItem(owningUser, outboxItem, isPrivate, ignoreDupes, cb) { const collectionId = Endpoints.outbox(owningUser); return Collection.addToCollection( Collections.Outbox, @@ -139,7 +139,7 @@ module.exports = class Collection extends ActivityPubObject { ); } - static addInboxItem(inboxItem, owningUser, webServer, ignoreDupes, cb) { + static addInboxItem(inboxItem, owningUser, ignoreDupes, cb) { const collectionId = Endpoints.inbox(owningUser); return Collection.addToCollection( Collections.Inbox, @@ -483,7 +483,6 @@ module.exports = class Collection extends ActivityPubObject { includePrivate, page, mapper, - webServer, cb ) { const privateQuery = includePrivate ? '' : ' AND is_private = FALSE'; diff --git a/core/activitypub/follow_util.js b/core/activitypub/follow_util.js index 666f6a098..a30587401 100644 --- a/core/activitypub/follow_util.js +++ b/core/activitypub/follow_util.js @@ -7,7 +7,7 @@ const Collection = require('./collection'); exports.sendFollowRequest = sendFollowRequest; exports.sendUnfollowRequest = sendUnfollowRequest; -function sendFollowRequest(fromUser, toActor, webServer, cb) { +function sendFollowRequest(fromUser, toActor, cb) { const fromActorId = fromUser.getProperty(UserProps.ActivityPubActorId); if (!fromActorId) { return cb( @@ -21,23 +21,23 @@ function sendFollowRequest(fromUser, toActor, webServer, cb) { // We expect an async follow up request to our server of // Accept or Reject but it's not guaranteed const followRequest = new ActivityPubObject({ - id: ActivityPubObject.makeObjectId(webServer, 'follow'), + id: ActivityPubObject.makeObjectId('follow'), type: WellKnownActivity.Follow, actor: fromActorId, object: toActor.id, }); toActor._followRequest = followRequest; - Collection.addFollowing(fromUser, toActor, webServer, true, err => { + Collection.addFollowing(fromUser, toActor, true, err => { if (err) { return cb(err); } - return followRequest.sendTo(toActor.inbox, fromUser, webServer, cb); + return followRequest.sendTo(toActor.inbox, fromUser, cb); }); } -function sendUnfollowRequest(fromUser, toActor, webServer, cb) { +function sendUnfollowRequest(fromUser, toActor, cb) { const fromActorId = fromUser.getProperty(UserProps.ActivityPubActorId); if (!fromActorId) { return cb( @@ -69,13 +69,13 @@ function sendUnfollowRequest(fromUser, toActor, webServer, cb) { } const undoRequest = new ActivityPubObject({ - id: ActivityPubObject.makeObjectId(webServer, 'undo'), + id: ActivityPubObject.makeObjectId('undo'), type: WellKnownActivity.Undo, actor: fromActorId, object: followedActor._followRequest, }); - return undoRequest.sendTo(toActor.inbox, fromUser, webServer, cb); + return undoRequest.sendTo(toActor.inbox, fromUser, cb); } ); } diff --git a/core/activitypub/note.js b/core/activitypub/note.js index 954a67ff8..c387ad3a3 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -83,7 +83,7 @@ module.exports = class Note extends ActivityPubObject { return User.getUser(localUserId, callback); }, (fromUser, callback) => { - Actor.fromLocalUser(fromUser, webServer, (err, fromActor) => { + Actor.fromLocalUser(fromUser, (err, fromActor) => { return callback(err, fromUser, fromActor); }); }, @@ -128,7 +128,7 @@ module.exports = class Note extends ActivityPubObject { // https://docs.joinmastodon.org/spec/activitypub/#properties-used const obj = { - id: ActivityPubObject.makeObjectId(webServer, 'note'), + id: ActivityPubObject.makeObjectId('note'), type: 'Note', published: getISOTimestampString(message.modTimestamp), to, diff --git a/core/activitypub/object.js b/core/activitypub/object.js index 10dd7a3ce..57117e11a 100644 --- a/core/activitypub/object.js +++ b/core/activitypub/object.js @@ -83,11 +83,11 @@ module.exports = class ActivityPubObject { this['@context'] = context; } - static makeObjectId(webServer, objectType) { + static makeObjectId(objectType) { return Endpoints.objectId(objectType); } - sendTo(inboxEndpoint, fromUser, webServer, cb) { + sendTo(inboxEndpoint, fromUser, cb) { const privateKey = fromUser.getProperty(UserProps.PrivateActivityPubSigningKey); if (isEmpty(privateKey)) { return cb( diff --git a/core/activitypub/social_manager.js b/core/activitypub/social_manager.js index ae2bb66f8..a6be9e0e5 100644 --- a/core/activitypub/social_manager.js +++ b/core/activitypub/social_manager.js @@ -280,8 +280,8 @@ exports.getModule = class activityPubSocialManager extends MenuModule { const actor = this._actorInfoToActor(actorInfo); return wantsToFollow - ? sendFollowRequest(this.client.user, actor, this.webServer, cb) - : sendUnfollowRequest(this.client.user, actor, this.webServer, cb); + ? sendFollowRequest(this.client.user, actor, cb) + : sendUnfollowRequest(this.client.user, actor, cb); } _actorInfoToActor(actorInfo) { @@ -339,7 +339,7 @@ exports.getModule = class activityPubSocialManager extends MenuModule { } _fetchActorList(collectionName, cb) { - const collectionId = Endpoints[collectionName](this.webServer, this.client.user); + const collectionId = Endpoints[collectionName](this.client.user); Collection[collectionName](collectionId, 'all', (err, collection) => { if (err) { return cb(err); diff --git a/core/activitypub/util.js b/core/activitypub/util.js index 8f19d0fea..9360e9370 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -99,7 +99,6 @@ function userFromActorId(actorId, cb) { } function getUserProfileTemplatedBody( - webServer, templateFile, user, userAsActor, @@ -147,7 +146,7 @@ function getUserProfileTemplatedBody( const varMap = { ACTOR_OBJ: JSON.stringify(userAsActor), - SUBJECT: userNameToSubject(user.username, webServer), + SUBJECT: userNameToSubject(user.username), INBOX: userAsActor.inbox, SHARED_INBOX: userAsActor.endpoints.sharedInbox, OUTBOX: userAsActor.outbox, diff --git a/core/config_default.js b/core/config_default.js index a237dea3d..11b0512d4 100644 --- a/core/config_default.js +++ b/core/config_default.js @@ -321,6 +321,14 @@ module.exports = () => { nodeInfo2: { enabled: true, }, + webFinger: { + enabled: false, + profileTemplate: './wf/profile.template.html', + }, + activityPub: { + enabled: false, + selfTemplate: './wf/profile.template.html', + }, }, resetPassword: { diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index 4c7b83832..8664f17b4 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -125,7 +125,6 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule } const activity = Activity.makeCreate( - this._webServer(), note.attributedTo, note, context @@ -143,42 +142,37 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule allEndpoints, 4, (inbox, nextInbox) => { - activity.sendTo( - inbox, - fromUser, - this._webServer(), - (err, respBody, res) => { - if (err) { - this.log.warn( - { - inbox, - error: err.message, - }, - 'Failed to send "Note" Activity to Inbox' - ); - } else if ( - res.statusCode === 200 || - res.statusCode === 202 - ) { - this.log.debug( - { inbox, uuid: message.uuid }, - 'Message delivered to Inbox' - ); - } else { - this.log.warn( - { - inbox, - statusCode: res.statusCode, - body: _.truncate(respBody, 128), - }, - 'Unexpected status code' - ); - } - - // If we can't send now, no harm, we'll record to the outbox - return nextInbox(null); + activity.sendTo(inbox, fromUser, (err, respBody, res) => { + if (err) { + this.log.warn( + { + inbox, + error: err.message, + }, + 'Failed to send "Note" Activity to Inbox' + ); + } else if ( + res.statusCode === 200 || + res.statusCode === 202 + ) { + this.log.debug( + { inbox, uuid: message.uuid }, + 'Message delivered to Inbox' + ); + } else { + this.log.warn( + { + inbox, + statusCode: res.statusCode, + body: _.truncate(respBody, 128), + }, + 'Unexpected status code' + ); } - ); + + // If we can't send now, no harm, we'll record to the outbox + return nextInbox(null); + }); }, () => { return callback(null, activity, fromUser, note); @@ -190,7 +184,6 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule fromUser, activity, message.isPrivate(), - this._webServer(), false, // do not ignore dupes (err, localId) => { if (!err) { diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index c8f7caaf2..f58da9391 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -201,7 +201,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.resourceNotFound(resp); } - Actor.fromLocalUser(localUser, this.webServer, (err, localActor) => { + Actor.fromLocalUser(localUser, (err, localActor) => { if (err) { return this.webServer.internalServerError(resp, err); } @@ -715,7 +715,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { Collection.addFollowRequest( localUser, remoteActor, - this.webServer, true, // ignore dupes err => { if (err) { @@ -924,7 +923,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { 'Delivering Note to local Actor Private inbox' ); - Collection.addInboxItem(activity, localUser, this.webServer, false, err => { + Collection.addInboxItem(activity, localUser, false, err => { if (err) { return cb(err); } @@ -1059,13 +1058,12 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return Collection.addFollower( localUser, remoteActor, - this.webServer, true, // ignore dupes callback ); }, callback => { - Actor.fromLocalUser(localUser, this.webServer, (err, localActor) => { + Actor.fromLocalUser(localUser, (err, localActor) => { if (err) { this.log.warn( { inbox: remoteActor.inbox, error: err.message }, @@ -1075,7 +1073,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } const accept = Activity.makeAccept( - this.webServer, localActor.id, requestActivity ); @@ -1083,7 +1080,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { accept.sendTo( remoteActor.inbox, localUser, - this.webServer, (err, respBody, res) => { if (err) { this.log.warn( @@ -1152,7 +1148,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { // we'll fall back to the same default profile info as the WebFinger profile getUserProfileTemplatedBody( - this.webServer, templateFile, localUser, localActor, diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index 05816c4cf..319ec9685 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -99,13 +99,12 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { templateFile = this.webServer.resolveTemplatePath(templateFile); } - Actor.fromLocalUser(localUser, this.webServer, (err, localActor) => { + Actor.fromLocalUser(localUser, (err, localActor) => { if (err) { return this.webServer.internalServerError(resp, err); } getUserProfileTemplatedBody( - this.webServer, templateFile, localUser, localActor, From cca850dd7822f1a73c415d05ff9d4da32cc5012e Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 19 Mar 2023 00:05:52 -0600 Subject: [PATCH 184/233] Some docs --- .../contentservers/activitypub-handler.md | 67 +++++++++++++++++++ .../servers/contentservers/web-handlers.md | 3 + .../contentservers/webfinger-handler.md | 2 +- 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 docs/_docs/servers/contentservers/activitypub-handler.md diff --git a/docs/_docs/servers/contentservers/activitypub-handler.md b/docs/_docs/servers/contentservers/activitypub-handler.md new file mode 100644 index 000000000..7b9fb0de6 --- /dev/null +++ b/docs/_docs/servers/contentservers/activitypub-handler.md @@ -0,0 +1,67 @@ +--- +layout: page +title: ActivityPub Web Handler +--- +The ActivityPub ([activitypub.js](/core/servers/content/web_handlers/activitypub.js)) provides [ActivityPub](https://www.w3.org/TR/activitypub/) support currently compatible with [Mastodon](https://joinmastodon.org/) and perhaps similar ActivityPub systems within the [Fediverse](https://en.wikipedia.org/wiki/Fediverse) allowing direct and public messaging, following/followers, etc. to be integrated with the ENiGMA½ BBS system. + +# Supported Features +* ActivityPub with Mastodon support +* Users are generated a random avatar once enabled with the ability to change them within their ActivityPub configuration +* Social Manager +* Actor search (that is, other users within the Fediverse) +* Private and public messaging to/from the Fediverse + +# Configuration +## Enabling ActivityPub +Full ActivityPub support requires the [Web Server](./web-server.md) module be enabled as well as a number of Web Handlers. Each handler configured within the `contentServers.web.handlers` block keys below of your `config.hjson` must be set to `enabled: true`: + +| Handler | Key | Description | Default | +|---------|-----|-------------|---------| +| [WebFinger](./webfinger-handler.md) | `webFinger` | Allows other servers to discover your user/Actors | disabled | +| System General | `systemGeneral` | Serves avatar images | enabled | +| NodeInfo2 | `nodeInfo2` | Allows other systems to query information about your node | enabled | +| ActivityPub | `activityPub` | Described within this file | disabled | + +**Example** +```js +contentServers: { + web: { + handlers: { + webFinger: { + enabled: true + } + // ... + activityPub: { + enabled: true + } + } + } +} +``` + +## Configuration Keys +| Key | Description | +| ----|-------------| +| `enabled` | Boolean. Set to `true` to enable WebFinger services | +| `selfTemplate` | String. Provide a fully qualified, or relative to [static root](./web-server.md#static-root) path to a template file for fetching profile information. Defaults to the same file used for [WebFinger](./webfinger-handler.md) queries; See [WebFinger](./webfinger-handler.md#profile-template) for more information. + +## Configuring Defaults +### General +General ActivityPub configuration can be found within the `activityPub` block: + +| Key | Description | Default | +| ----|-------------|---------| +| `autoSignatures` | Include auto-signatures in ActivityPub outgoing message/Notes? | `false` | +| `maxMessageLength` | Max single message/Note length in characters. Note that longer lengths *are* generally allowed by remote systems. | `500` | + +### Default User Settings +Settings applied to new users or users first enabling ActivityPub are found within `users.activityPub` with the following members: + +| Key | Description | Default | +| ----|-------------|---------| +| `enabled` | Enabled for users by default? | `false` | +| `manuallyApproveFollowers` | Do users need to manually approve followers? | `false` | +| `hideSocialGraph` | Hide users social graph? (followers, following, ...) | `false` | +| `showRealName` | Show real name? | `true` | + + diff --git a/docs/_docs/servers/contentservers/web-handlers.md b/docs/_docs/servers/contentservers/web-handlers.md index ba11a0651..0c79eee15 100644 --- a/docs/_docs/servers/contentservers/web-handlers.md +++ b/docs/_docs/servers/contentservers/web-handlers.md @@ -6,6 +6,9 @@ Web handlers provide a way to easily add additional _routes_ to your [Web Server # Built in Web Handler Modules * [WebFinger](./webfinger-handler.md): Provides basic [WebFinger](https://webfinger.net/) ([RFC7033](https://www.rfc-editor.org/rfc/rfc7033)) support. +* System General: Serves user avatars. +* NodeInfo2: Handles [NodeInfo2](https://github.com/jaywink/nodeinfo2) requests. +* ActivityPub: ## Building Your Own Adding a Web Handler diff --git a/docs/_docs/servers/contentservers/webfinger-handler.md b/docs/_docs/servers/contentservers/webfinger-handler.md index c375f1cc4..a8447a47e 100644 --- a/docs/_docs/servers/contentservers/webfinger-handler.md +++ b/docs/_docs/servers/contentservers/webfinger-handler.md @@ -1,6 +1,6 @@ --- layout: page -title: WebFinger Handler +title: WebFinger Web Handler --- The WebFinger ([webfinger.js](/core/servers/content/web_handlers/webfinger.js)) [Handler](./web-handlers.md) provides basic [WebFinger](https://webfinger.net/) ([RFC7033](https://www.rfc-editor.org/rfc/rfc7033)) support, enabling servers such as those participating in the [Mastodon](https://en.wikipedia.org/wiki/Mastodon_(social_network)) [Fediverse](https://en.wikipedia.org/wiki/Fediverse) to discover basic information about a user. From 81edff48fe970d92f21cf99fe7d6173c85f4695a Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 19 Mar 2023 01:09:33 -0600 Subject: [PATCH 185/233] WIP doc updates, need sorting --- UPGRADE.md | 40 +++++++++++++++++++++------- WHATSNEW.md | 2 ++ docs/assets/images/upgrade-flow.png | Bin 0 -> 79976 bytes 3 files changed, 33 insertions(+), 9 deletions(-) create mode 100644 docs/assets/images/upgrade-flow.png diff --git a/UPGRADE.md b/UPGRADE.md index d327ac35a..5a1f3df83 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -1,20 +1,39 @@ # Introduction -This document covers basic upgrade notes for major ENiGMA½ version updates. - -> :information_source: **Be sure to read the version-to-version upgrade notes below** for each upgrade! +This document covers information for keeping your system updated through periodic upgrades as well as version-to-version upgrade notes. **Be sure to read these notes for _any_ upgrade!** # Before Upgrading * Always back up your system! (See [Administration](./docs/admin/administration.md)) * Seriously, always back up your system! # General Notes +## The Upgrade Process +ENiGMA½ does not currently have much of a "release process" in that instead, it is expected that if you want new features, you will `git pull` them to your system. + +You will generally be pulling from `master`, so the process is as follows: +```bash +# stop system if running +cd enigma-bbs +git pull origin main +# look for any errors +rm -rf node_modules # ONLY for Node.js upgrades! +npm install # or yarn, etc. +# look for any errors +node main.js # restart system +``` + +![Upgrade Flow](./docs/assets/images/upgrade-flow.png) + + +> :information_source: After upgrading, it is always recommended to look at [UPGRADE.md](UPGRADE.md) and inspect the version-to-version notes as well as the [WHATSNEW](WHATSNEW.md). + ## Configuration File Updates -In general, look at template menu files in `misc/menu_templates`, and `config_template.in.hjson` as well as the default `luciano_blocktronics/theme.hjson` files when you update. These files may come with new sections you wish to merge into your system! +After an upgrade, **it is possible that your system is missing new features exposed in the default theme/menu layout**. To check this, you can look at the template menu files in `misc/menu_templates`, and `config_template.in.hjson` as well as the default `luciano_blocktronics/theme.hjson` files for changes/additions. -### Menus & Theme Updates -Upgrades often come with changes to the default menu templates found in `misc/menu_templates`. You can use these as references for changes and additions to the default menu sets. This also applies to the default `luciano_blocktronics` theme and it's `theme.hjson` file. +Tips: +* Create a clean checkout of ENiGMA via `git https://github.com/NuSkooler/enigma-bbs.git enigma-bbs-clean` and run it to see any new features within the default configuration +* As the template files described above are likely what you built your system from, a diff viewer can go a long way! -See [Updating](./docs/admin/updating.md) for details on menu files/etc. +> :information_source: See [Updating](./docs/admin/updating.md) for details on updating menu files. # Upgrading the Code Upgrading from GitHub is easy: @@ -28,7 +47,7 @@ npm install # or simply 'yarn' # Problems 1. Check [TROUBLESHOOTING](TROUBLESHOOTING.md) first. -2. Report your issue on Xibalba BBS, hop in #`enigma-bbs` on FreeNode and chat, or [file a issue on GitHub](https://github.com/NuSkooler/enigma-bbs/issues) if you believe you've found a bug or missing feature. +2. Report your issue on [Xibalba BBS](https://xibalba.l33t.codes), or [file a issue on GitHub](https://github.com/NuSkooler/enigma-bbs/issues) if you believe you've found a bug or missing feature. # Version to Version Notes > :warning: Be sure to inspect these notes during any upgrades! @@ -41,6 +60,9 @@ cp ./misc/menu_templates/activitypub.in.hjson ./config/menus/my_board_name-activ This will expose the default ActivityPub setup. Enabling ActivityPub functionality requires the web server enabled and ActivityPub itself enabled in your `config.hjson`. +> :information_source: See [Configuration Files Include Statements](./docs/_docs/configuration/config-files.md#includes) for more information on using `include`. + + ## 0.0.12-beta to 0.0.13-beta * To enable the new Waiting for Caller (WFC) support, please see [WFC](docs/modding/wfc.md). @@ -55,7 +77,7 @@ This will expose the default ActivityPub setup. Enabling ActivityPub functionali // position reports, which are not supported on all terminals. // Using this with a terminal that does not support cursor // position reports results in a 2 second delay during the - // connect process, but provides better autoconfiguration of utf-8 + // connect process, but provides better auto configuration of utf-8 checkUtf8Encoding: true diff --git a/WHATSNEW.md b/WHATSNEW.md index 3472426cd..29dca259a 100644 --- a/WHATSNEW.md +++ b/WHATSNEW.md @@ -2,6 +2,8 @@ This document attempts to track **major** changes and additions in ENiGMA½. For details, see GitHub. ## 0.0.14-beta +* **ActivityPub & Mastodon Support** + * A new [ActivityPub Web Handler](./docs/_docs/servers/contentservers/activitypub-handler.md) has been added * [Web Server](/docs/_docs/servers/contentservers/web-server.md) has made many changes, **some possibly breaking**: * `/static/` prefixes are no longer required. This was a ugly hack. * Some internal routes such as those used for password resets live within `/_enig/`. diff --git a/docs/assets/images/upgrade-flow.png b/docs/assets/images/upgrade-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..b30790ff9b2366497e3fc738b70485f52ffc5b02 GIT binary patch literal 79976 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 Date: Sun, 19 Mar 2023 13:39:21 -0600 Subject: [PATCH 186/233] Organized and updated upgrade docs --- TROUBLESHOOTING.md | 2 +- UPGRADE.md | 49 +++---------------- WHATSNEW.md | 2 +- docs/_docs/admin/administration.md | 2 +- docs/_docs/admin/updating.md | 31 ------------ docs/_docs/installation/install-script.md | 2 +- .../installation/installation-methods.md | 2 +- 7 files changed, 13 insertions(+), 77 deletions(-) delete mode 100644 docs/_docs/admin/updating.md diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index b1e55e84f..2583fe015 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -28,4 +28,4 @@ env CC=gcc CXX=gcc npm rebuild --build-from-source node-pty ### Missing Menu & Theme Entries One thing to be sure and check after an update is your menu/prompt HJSON configurations as well as your theme(s). The default templates are updated alongside features, but you may need to merge in fragments missing from your own. -See also [Updating](./docs/_docs/admin/updating.md) \ No newline at end of file +See also [Upgrading](./docs/_docs/admin/upgrading.md) \ No newline at end of file diff --git a/UPGRADE.md b/UPGRADE.md index 5a1f3df83..439c1e243 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -2,52 +2,20 @@ This document covers information for keeping your system updated through periodic upgrades as well as version-to-version upgrade notes. **Be sure to read these notes for _any_ upgrade!** # Before Upgrading -* Always back up your system! (See [Administration](./docs/admin/administration.md)) -* Seriously, always back up your system! +1. Always back up your system! (See [Administration - Backing Up Your System](./docs/_docs/admin/administration.md#backing-up-your-system)) +2. Seriously, always back up your system! +3. Review the version to version release notes within this document. +4. [Upgrade](./docs/_docs/admin/upgrading.md) -# General Notes -## The Upgrade Process +# The Upgrade Process ENiGMA½ does not currently have much of a "release process" in that instead, it is expected that if you want new features, you will `git pull` them to your system. -You will generally be pulling from `master`, so the process is as follows: -```bash -# stop system if running -cd enigma-bbs -git pull origin main -# look for any errors -rm -rf node_modules # ONLY for Node.js upgrades! -npm install # or yarn, etc. -# look for any errors -node main.js # restart system -``` - -![Upgrade Flow](./docs/assets/images/upgrade-flow.png) - - -> :information_source: After upgrading, it is always recommended to look at [UPGRADE.md](UPGRADE.md) and inspect the version-to-version notes as well as the [WHATSNEW](WHATSNEW.md). - -## Configuration File Updates -After an upgrade, **it is possible that your system is missing new features exposed in the default theme/menu layout**. To check this, you can look at the template menu files in `misc/menu_templates`, and `config_template.in.hjson` as well as the default `luciano_blocktronics/theme.hjson` files for changes/additions. - -Tips: -* Create a clean checkout of ENiGMA via `git https://github.com/NuSkooler/enigma-bbs.git enigma-bbs-clean` and run it to see any new features within the default configuration -* As the template files described above are likely what you built your system from, a diff viewer can go a long way! - -> :information_source: See [Updating](./docs/admin/updating.md) for details on updating menu files. - -# Upgrading the Code -Upgrading from GitHub is easy: - -```bash -cd /path/to/enigma-bbs -git pull -rm -rf npm_modules # do this any time you update Node.js itself -npm install # or simply 'yarn' -``` +Refer to [Upgrading](./docs/_docs/admin/upgrading.md) for details around this process. # Problems 1. Check [TROUBLESHOOTING](TROUBLESHOOTING.md) first. -2. Report your issue on [Xibalba BBS](https://xibalba.l33t.codes), or [file a issue on GitHub](https://github.com/NuSkooler/enigma-bbs/issues) if you believe you've found a bug or missing feature. +2. Report your issue on [Xibalba BBS](https://xibalba.l33t.codes), or [file a issue on GitHub](https://github.com/NuSkooler/enigma-bbs/issues)! + # Version to Version Notes > :warning: Be sure to inspect these notes during any upgrades! @@ -63,7 +31,6 @@ This will expose the default ActivityPub setup. Enabling ActivityPub functionali > :information_source: See [Configuration Files Include Statements](./docs/_docs/configuration/config-files.md#includes) for more information on using `include`. - ## 0.0.12-beta to 0.0.13-beta * To enable the new Waiting for Caller (WFC) support, please see [WFC](docs/modding/wfc.md). * :exclamation: The SSH server's `ssh2` module has gone through a major upgrade. Existing users will need to comment out two SSH KEX algorithms from their `config.hjson` if present else clients such as NetRunner will not be able to connect over SSH. Comment out `diffie-hellman-group-exchange-sha256` and `diffie-hellman-group-exchange-sha1` diff --git a/WHATSNEW.md b/WHATSNEW.md index 29dca259a..c1236e3af 100644 --- a/WHATSNEW.md +++ b/WHATSNEW.md @@ -34,7 +34,7 @@ This document attempts to track **major** changes and additions in ENiGMA½. For * Additional options in the `abracadabra` module for launching doors. See [Local Doors](./docs/modding/local-doors.md) ## 0.0.12-beta -* The `master` branch has become mainline. What this means to users is `git pull` will always give you the latest and greatest. Make sure to read [Updating](./docs/admin/updating.md) and keep an eye on `WHATSNEW.md` (this file) and [UPGRADE](UPGRADE.md)! See also [ticket #276](https://github.com/NuSkooler/enigma-bbs/issues/276). +* The `master` branch has become mainline. What this means to users is `git pull` will always give you the latest and greatest. Make sure to read [Upgrading](./docs/admin/upgrading.md) and keep an eye on `WHATSNEW.md` (this file) and [UPGRADE](UPGRADE.md)! See also [ticket #276](https://github.com/NuSkooler/enigma-bbs/issues/276). * Development now occurs against [Node.js 14 LTS](https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V14.md). * The default configuration has been moved to [config_default.js](/core/config_default.js). * A full configuration revamp has taken place. Configuration files such as `config.hjson`, `menu.hjson`, and `theme.hjson` can now utilize includes via the `includes` directive, reference 'self' sections using `@reference:` and import environment variables with `@environment`. diff --git a/docs/_docs/admin/administration.md b/docs/_docs/admin/administration.md index 4417731b9..63ffb7a21 100644 --- a/docs/_docs/admin/administration.md +++ b/docs/_docs/admin/administration.md @@ -6,7 +6,7 @@ title: Administration # Administration ## Keeping Up to Date -See [Updating](updating.md). +See [Upgrading](upgrading.md). ## Viewing Activity Monitor your system via the [Waiting For Caller (WFC)](../modding/wfc.md) screen and learn how to [monitoring logs](../troubleshooting/monitoring-logs.md). diff --git a/docs/_docs/admin/updating.md b/docs/_docs/admin/updating.md deleted file mode 100644 index 87cf437ea..000000000 --- a/docs/_docs/admin/updating.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -layout: page -title: Updating ---- -# Updating -Keeping your system up to date ensures you have the latest fixes, features, and general improvements. Updating ENiGMA½ can be a bit of a learning curve compared to traditional binary-release systems you may be used to, especially when running from Git cloned source. - -## Updating From Source -If you have installed using Git source (if you used the `install.sh` script) follow these general steps to update your system: - -1. **Back up your system**! -2. Pull down the latest source: -```bash -cd /path/to/enigma-bbs -git pull -``` -3. :bulb: Review `WHATSNEW.md` and `UPDATE.md` for any specific instructions or changes to be aware of. -4. Update your dependencies: -```bash -npm install # or 'yarn' -``` -4. Merge updates from `config/menu_template.hjson` to your `config/yourbbsname-menu.hjson` file (or simply use the template as a reference to spot any newly added default menus that you may wish to have on your system as well!). -5. If there are updates to the `art/themes/luciano_blocktronics/theme.hjson` file and you have a custom theme, you may want to look at them as well. -6. Finally, restart your running ENiGMA½ instance. - -> :information_source: Visual diff tools such as [DiffMerge](https://www.sourcegear.com/diffmerge/downloads.php) (free, works on all major platforms) can be very helpful for the tasks outlined above! - -> :bulb: It is recommended to [monitor logs](../troubleshooting/monitoring-logs.md) and poke around a bit after an update! - - - diff --git a/docs/_docs/installation/install-script.md b/docs/_docs/installation/install-script.md index 1b9794883..a675527ce 100644 --- a/docs/_docs/installation/install-script.md +++ b/docs/_docs/installation/install-script.md @@ -15,7 +15,7 @@ The script will install `nvm`, Node.js and grab the latest ENiGMA BBS from GitHu > :information_source: After installing: > * Read [External Binaries](../configuration/external-binaries.md) -> * Read [Updating](../admin/updating.md) +> * Read [Upgrading](../admin/upgrading.md) You might also check out some external guides: * https://www.maketecheasier.com/create-bbs-linux-with-enigmabbs/ \ No newline at end of file diff --git a/docs/_docs/installation/installation-methods.md b/docs/_docs/installation/installation-methods.md index 38fa49753..7e503d47c 100644 --- a/docs/_docs/installation/installation-methods.md +++ b/docs/_docs/installation/installation-methods.md @@ -15,4 +15,4 @@ There are multiple ways of installing ENiGMA BBS, depending on your level of exp :scroll: Check out [this awesome video on installation and basic configuration](https://youtu.be/WnN-ucVi3ZU) from Al's Geek Lab! ## Keeping Up To Date -After installing, you'll want to [keep your system updated](../admin/updating.md). \ No newline at end of file +After installing, you'll want to [keep your system updated](../admin/upgrading.md). \ No newline at end of file From 35c97f70356ac27d4c614a693f8d442b76bb1007 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 19 Mar 2023 13:50:44 -0600 Subject: [PATCH 187/233] Ensure AP setup for user if not already at toggle time --- core/activitypub/settings.js | 16 ++++++++++------ core/activitypub/user_config.js | 1 + 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/core/activitypub/settings.js b/core/activitypub/settings.js index b7f4e2bd7..2b9733590 100644 --- a/core/activitypub/settings.js +++ b/core/activitypub/settings.js @@ -36,18 +36,22 @@ module.exports = class ActivityPubSettings { return user.activityPubSettings; } - persistToUserProperties(user, cb = null) { + persistToUserProperties(user, cb) { return user.persistProperty( UserProps.ActivityPubSettings, JSON.stringify(this), err => { - if (!err) { - // drop from cache - delete user.activityPubSettings; - } - if (cb) { + if (err) { return cb(err); } + + // drop from cache - force re-cache + delete user.activityPubSettings; + + const { prepareLocalUserAsActor } = require('./util'); + prepareLocalUserAsActor(user, { force: false }, err => { + return cb(err); + }); } ); } diff --git a/core/activitypub/user_config.js b/core/activitypub/user_config.js index 3e2078275..20ece36b1 100644 --- a/core/activitypub/user_config.js +++ b/core/activitypub/user_config.js @@ -137,6 +137,7 @@ exports.getModule = class ActivityPubUserConfig extends MenuModule { `Failed saving ActivityPub settings for user "${user.username}"` ); } + return this.prevMenu(cb); }); } From 127d09a09b68dc30d45da34086010a98bddac5d8 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 19 Mar 2023 13:54:13 -0600 Subject: [PATCH 188/233] Ensure AP setup for user if not already at toggle time (fix) --- core/activitypub/settings.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/activitypub/settings.js b/core/activitypub/settings.js index 2b9733590..69847b6fa 100644 --- a/core/activitypub/settings.js +++ b/core/activitypub/settings.js @@ -50,7 +50,10 @@ module.exports = class ActivityPubSettings { const { prepareLocalUserAsActor } = require('./util'); prepareLocalUserAsActor(user, { force: false }, err => { - return cb(err); + if (err) { + return cb(err); + } + return user.persistProperties(user.properties, cb); }); } ); From cc20ffc85f7fb36f267305ae2362ad12d86323a3 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 26 Mar 2023 14:59:03 -0600 Subject: [PATCH 189/233] Fix addressed to WFC count --- core/message_area.js | 16 ++++++++++++---- core/new_scan.js | 3 ++- core/stat_log.js | 3 ++- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/core/message_area.js b/core/message_area.js index 7bb133068..115722177 100644 --- a/core/message_area.js +++ b/core/message_area.js @@ -519,8 +519,13 @@ function filterMessageListByReadACS(client, messageList) { }); } -function getNewMessageCountInAreaForUser(userId, areaTag, cb) { - getMessageAreaLastReadId(userId, areaTag, (err, lastMessageId) => { +function getNewMessageCountInAreaForUser( + user, + areaTag, + options = { addrToOnly: false }, + cb +) { + getMessageAreaLastReadId(user.userId, areaTag, (err, lastMessageId) => { lastMessageId = lastMessageId || 0; const filter = { @@ -530,7 +535,9 @@ function getNewMessageCountInAreaForUser(userId, areaTag, cb) { }; if (Message.isPrivateAreaTag(areaTag)) { - filter.privateTagUserId = userId; + filter.privateTagUserId = user.userId; + } else if (options.addrToOnly) { + filter.toUserName = user.username; } Message.findMessages(filter, (err, count) => { @@ -554,8 +561,9 @@ function getNewMessageCountAddressedToUser(client, cb) { getMessageAreaLastReadId(client.user.userId, areaTag, (_, lastMessageId) => { lastMessageId = lastMessageId || 0; // eslint-disable-line no-unused-vars getNewMessageCountInAreaForUser( - client.user.userId, + client.user, areaTag, + { addrToOnly: true }, (err, count) => { newMessageCount += count; return nextAreaTag(err); diff --git a/core/new_scan.js b/core/new_scan.js index 8a0c195c6..178f1e34f 100644 --- a/core/new_scan.js +++ b/core/new_scan.js @@ -157,8 +157,9 @@ exports.getModule = class NewScanModule extends MenuModule { }, function getNewMessagesCountInArea(callback) { msgArea.getNewMessageCountInAreaForUser( - self.client.user.userId, + self.client.user, currentArea.areaTag, + { addrToOnly: false }, (err, newMessageCount) => { callback(err, newMessageCount); } diff --git a/core/stat_log.js b/core/stat_log.js index 923abe7af..ce67aaf9e 100644 --- a/core/stat_log.js +++ b/core/stat_log.js @@ -461,8 +461,9 @@ class StatLog { _refreshUserPrivateMailCount(client) { const MsgArea = require('./message_area'); MsgArea.getNewMessageCountInAreaForUser( - client.user.userId, + client.user, Message.WellKnownAreaTags.Private, + { addrToOnly: false }, (err, count) => { if (!err) { client.user.setProperty(UserProps.NewPrivateMailCount, count); From 97f3a1e63ae7b91d14ad1c97744c7d28f89e98f5 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 10 Apr 2023 11:41:10 -0600 Subject: [PATCH 190/233] Update copyright to 2023 --- LICENSE.TXT | 2 +- README.md | 2 +- core/connect.js | 6 +++--- core/qwk_mail_packet.js | 2 +- docs/_docs/installation/testing.md | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/LICENSE.TXT b/LICENSE.TXT index 6fca71849..c2ae489c5 100644 --- a/LICENSE.TXT +++ b/LICENSE.TXT @@ -1,4 +1,4 @@ -Copyright (c) 2015-2022, Bryan D. Ashby +Copyright (c) 2015-2023, Bryan D. Ashby All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/README.md b/README.md index da8dcf386..ced993660 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,7 @@ ENiGMA has been tested with many terminals. However, the following are suggested ## License Released under the [BSD 2-clause](https://opensource.org/licenses/BSD-2-Clause) license: -Copyright (c) 2015-2022, Bryan D. Ashby +Copyright (c) 2015-2023, Bryan D. Ashby All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/core/connect.js b/core/connect.js index affa4eec0..489fd1874 100644 --- a/core/connect.js +++ b/core/connect.js @@ -105,7 +105,7 @@ function ansiAttemptDetectUTF8(client, cb) { withCursorPositionReport( client, pos => { - const [_, w] = pos; + const [, w] = pos; const len = w - initialPosition[1]; if (!isNaN(len) && len >= ASCIIPortion.length + 6) { // CP437 displays 3 chars each Unicode skull @@ -154,7 +154,7 @@ const ansiQuerySyncTermFontSupport = (client, cb) => { withCursorPositionReport( client, pos => { - const [_, w] = pos; + const [, w] = pos; if (w === 1) { // cursor didn't move client.log.info(`SyncTERM font support enabled on node ${client.node}`); @@ -234,7 +234,7 @@ function displayBanner(term) { // note: intentional formatting: term.pipeWrite(` |06Connected to |02EN|10i|02GMA|10½ |06BBS version |12|VN -|06Copyright (c) 2014-2022 Bryan Ashby |14- |12http://l33t.codes/ +|06Copyright (c) 2014-2023 Bryan Ashby |14- |12http://l33t.codes/ |06Updates & source |14- |12https://github.com/NuSkooler/enigma-bbs/ |00`); } diff --git a/core/qwk_mail_packet.js b/core/qwk_mail_packet.js index a22be7496..bf71da5af 100644 --- a/core/qwk_mail_packet.js +++ b/core/qwk_mail_packet.js @@ -1076,7 +1076,7 @@ class QWKPacketWriter extends EventEmitter { } // First block is a space padded ID - const id = `Created with ENiGMA 1/2 BBS v${enigmaVersion} Copyright (c) 2015-2022 Bryan Ashby`; + const id = `Created with ENiGMA 1/2 BBS v${enigmaVersion} Copyright (c) 2015-2023 Bryan Ashby`; this.messagesStream.write( id.padEnd(QWKMessageBlockSize, ' '), 'ascii' diff --git a/docs/_docs/installation/testing.md b/docs/_docs/installation/testing.md index 1982d0d23..fb095c752 100644 --- a/docs/_docs/installation/testing.md +++ b/docs/_docs/installation/testing.md @@ -13,7 +13,7 @@ _Note that if you've used the [Docker](docker.md) installation method, you've al If everything went OK: ```text -ENiGMA½ Copyright (c) 2014-2022, Bryan Ashby +ENiGMA½ Copyright (c) 2014-2023, Bryan Ashby _____________________ _____ ____________________ __________\_ / \__ ____/\_ ____ \ /____/ / _____ __ \ / ______/ // /___jp! // __|___// | \// |// | \// | | \// \ /___ /_____ From 0b59d0e3b539df0c4ec8312c8f00919ddb70abf7 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 10 Apr 2023 11:47:27 -0600 Subject: [PATCH 191/233] Strip codes from auto sig for summary --- core/activitypub/actor.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 45fadf2cc..16af216f6 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -13,6 +13,8 @@ const ActivityPubSettings = require('./settings'); const ActivityPubObject = require('./object'); const { ActivityStreamMediaType, Collections } = require('./const'); const Config = require('../config').get; +const { stripMciColorCodes } = require('../color_codes'); +const { stripAnsiControlCodes } = require('../string_util'); // deps const _ = require('lodash'); @@ -107,6 +109,11 @@ module.exports = class Actor extends ActivityPubObject { } }; + const summary = stripMciColorCodes( + stripAnsiControlCodes(user.getProperty(UserProps.AutoSignature) || ''), + { mode: 'nonAsciiPrintable' } + ); + const obj = { id: userActorId, type: 'Person', @@ -121,7 +128,7 @@ module.exports = class Actor extends ActivityPubObject { outbox: Endpoints.outbox(user), followers: Endpoints.followers(user), following: Endpoints.following(user), - summary: user.getProperty(UserProps.AutoSignature) || '', + summary, url: Endpoints.profile(user), manuallyApprovesFollowers: userSettings.manuallyApprovesFollowers, discoverable: userSettings.discoverable, From 84c6478849dd80a25bdd749524363220c28861cc Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 10 Apr 2023 13:18:06 -0600 Subject: [PATCH 192/233] Minor fixes around images --- core/activitypub/actor.js | 3 ++- core/activitypub/util.js | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/core/activitypub/actor.js b/core/activitypub/actor.js index 16af216f6..442a3c52e 100644 --- a/core/activitypub/actor.js +++ b/core/activitypub/actor.js @@ -98,7 +98,8 @@ module.exports = class Actor extends ActivityPubObject { const url = userSettings[t]; if (url) { const fn = paths.basename(url); - const mt = mimeTypes.contentType(fn); + const mt = + mimeTypes.contentType(fn) || mimeTypes.contentType('dummy.png'); if (mt) { o[t] = { mediaType: mt, diff --git a/core/activitypub/util.js b/core/activitypub/util.js index 9360e9370..597710ddd 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -16,7 +16,7 @@ const fs = require('graceful-fs'); const paths = require('path'); const moment = require('moment'); const { encode, decode } = require('html-entities'); -const { isString } = require('lodash'); +const { isString, get } = require('lodash'); const { stripHtml } = require('string-strip-html'); exports.getActorId = o => o.actor?.id || o.actor; @@ -152,8 +152,8 @@ function getUserProfileTemplatedBody( OUTBOX: userAsActor.outbox, FOLLOWERS: userAsActor.followers, FOLLOWING: userAsActor.following, - USER_ICON: userAsActor.icon.url, - USER_IMAGE: userAsActor.image.url, + USER_ICON: get(userAsActor, 'icon.url', ''), + USER_IMAGE: get(userAsActor, 'image.url', ''), PREFERRED_USERNAME: userAsActor.preferredUsername, NAME: userAsActor.name, SEX: user.getProperty(UserProps.Sex), From c4553a01a54b9c53f9b49a68e73544058516865f Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 14 Apr 2023 08:44:08 -0600 Subject: [PATCH 193/233] Fix callback --- core/servers/content/web_handlers/activitypub.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index f58da9391..0df93492e 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -1174,6 +1174,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { `Preparing ActivityPub settings for "${user.username}"` ); - return prepareLocalUserAsActor(user, cb); + return prepareLocalUserAsActor(user, { force: false }, cb); } }; From 1c27891f15f3660eac2eb163c66aed59914c41c9 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 19 Apr 2023 12:37:11 -0600 Subject: [PATCH 194/233] Test sig check --- .../content/web_handlers/activitypub.js | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 0df93492e..8a7cdba7e 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -801,23 +801,24 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return false; } - if (signature.keyId !== pubKey.id) { - this.log.warn( - { - actorId: actor.id, - signatureKeyId: signature.keyId, - actorPubKeyId: pubKey.id, - }, - 'Key ID mismatch' - ); - return false; - } + // if (signature.keyId !== pubKey.id) { + // this.log.warn( + // { + // actorId: actor.id, + // signatureKeyId: signature.keyId, + // actorPubKeyId: pubKey.id, + // }, + // 'Key ID mismatch' + // ); + // return false; + // } if (!httpSignature.verifySignature(signature, pubKey.publicKeyPem)) { this.log.warn( { actorId: actor.id, keyId: signature.keyId, + actorPubKeyId: pubKey.id, }, 'Actor signature verification failed' ); From faf8ccaaf89c5cf124a664f8d8c189ffe8081f01 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 19 Apr 2023 13:19:02 -0600 Subject: [PATCH 195/233] Updated sig check 2 --- .../content/web_handlers/activitypub.js | 195 +++++++++++------- 1 file changed, 115 insertions(+), 80 deletions(-) diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 8a7cdba7e..206cedfdf 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -215,6 +215,31 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } + _getAssociatedActors(objectActorId, signatureActorId, cb) { + signatureActorId = async.waterfall( + [ + callback => { + Actor.fromId(objectActorId, (err, objectActor) => { + return callback(err, objectActor); + }); + }, + (objectActor, callback) => { + // shortcut + if (objectActorId === signatureActorId) { + return callback(null, objectActor, objectActor); + } + + Actor.fromId(signatureActorId, (err, signatureActor) => { + return callback(err, objectActor, signatureActor); + }); + }, + ], + (err, objectActor, signatureActor) => { + return cb(err, objectActor, signatureActor); + } + ); + } + _inboxPostHandler(req, resp, signature, inboxType) { EnigAssert(signature, 'Called without signature!'); EnigAssert(signature.keyId, 'No keyId in signature!'); @@ -239,89 +264,99 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } // Fetch and validate the signature of the remote Actor - Actor.fromId(getActorId(activity), (err, remoteActor) => { - // validate sig up front - const httpSigValidated = - remoteActor && this._validateActorSignature(remoteActor, signature); - if (activity.type !== WellKnownActivity.Delete && !httpSigValidated) { - return this.webServer.accessDenied(resp); - } + this._getAssociatedActors( + getActorId(activity), + signature.keyId.split('#', 1)[0], // trim #main-key + (err, remoteActor, signatureActor) => { + //Actor.fromId(getActorId(activity), (err, remoteActor) => { + // validate sig up front + const httpSigValidated = + remoteActor && + this._validateActorSignature(signatureActor, signature); + if (activity.type !== WellKnownActivity.Delete && !httpSigValidated) { + return this.webServer.accessDenied(resp); + } - switch (activity.type) { - case WellKnownActivity.Accept: - return this._inboxAcceptActivity(resp, activity); + switch (activity.type) { + case WellKnownActivity.Accept: + return this._inboxAcceptActivity(resp, activity); - case WellKnownActivity.Add: - break; + case WellKnownActivity.Add: + break; - case WellKnownActivity.Create: - return this._inboxCreateActivity(resp, activity); + case WellKnownActivity.Create: + return this._inboxCreateActivity(resp, activity); - case WellKnownActivity.Delete: - return this._inboxDeleteActivity( - inboxType, - resp, - activity, - httpSigValidated - ); + case WellKnownActivity.Delete: + return this._inboxDeleteActivity( + inboxType, + resp, + activity, + httpSigValidated + ); - case WellKnownActivity.Update: - { - // Only Notes currently supported - const type = _.get(activity, 'object.type'); - if ('Note' === type) { - // :TODO: get rid of this extra indirection - return this._inboxUpdateExistingObject( - inboxType, - resp, - activity, - httpSigValidated - ); - } else { - this.log.warn( - `Unsupported Inbox Update for type "${type}"` - ); + case WellKnownActivity.Update: + { + // Only Notes currently supported + const type = _.get(activity, 'object.type'); + if ('Note' === type) { + // :TODO: get rid of this extra indirection + return this._inboxUpdateExistingObject( + inboxType, + resp, + activity, + httpSigValidated + ); + } else { + this.log.warn( + `Unsupported Inbox Update for type "${type}"` + ); + } } - } - break; - - case WellKnownActivity.Follow: - // Follow requests are only allowed directly - if (Collections.Inbox === inboxType) { - return this._inboxFollowActivity(resp, remoteActor, activity); - } - break; + break; - case WellKnownActivity.Reject: - return this._inboxRejectActivity(resp, activity); - - case WellKnownActivity.Undo: - // We only Undo from private inboxes - if (Collections.Inbox === inboxType) { - // Only Follow Undo's currently supported - const type = _.get(activity, 'object.type'); - if (WellKnownActivity.Follow === type) { - return this._inboxUndoActivity( + case WellKnownActivity.Follow: + // Follow requests are only allowed directly + if (Collections.Inbox === inboxType) { + return this._inboxFollowActivity( resp, remoteActor, activity ); - } else { - this.log.warn(`Unsupported Undo for type "${type}"`); } - } - break; + break; + + case WellKnownActivity.Reject: + return this._inboxRejectActivity(resp, activity); + + case WellKnownActivity.Undo: + // We only Undo from private inboxes + if (Collections.Inbox === inboxType) { + // Only Follow Undo's currently supported + const type = _.get(activity, 'object.type'); + if (WellKnownActivity.Follow === type) { + return this._inboxUndoActivity( + resp, + remoteActor, + activity + ); + } else { + this.log.warn(`Unsupported Undo for type "${type}"`); + } + } + break; - default: - this.log.warn( - { type: activity.type, inboxType }, - `Unsupported Activity type "${activity.type}"` - ); - break; - } + default: + this.log.warn( + { type: activity.type, inboxType }, + `Unsupported Activity type "${activity.type}"` + ); + break; + } - return this.webServer.notImplemented(resp); - }); + return this.webServer.notImplemented(resp); + } + ); }); } @@ -801,17 +836,17 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return false; } - // if (signature.keyId !== pubKey.id) { - // this.log.warn( - // { - // actorId: actor.id, - // signatureKeyId: signature.keyId, - // actorPubKeyId: pubKey.id, - // }, - // 'Key ID mismatch' - // ); - // return false; - // } + if (signature.keyId !== pubKey.id) { + this.log.warn( + { + actorId: actor.id, + signatureKeyId: signature.keyId, + actorPubKeyId: pubKey.id, + }, + 'Key ID mismatch' + ); + return false; + } if (!httpSignature.verifySignature(signature, pubKey.publicKeyPem)) { this.log.warn( From 71076c8e90b50492b7c73759f972a444c5f00654 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 19 Apr 2023 13:46:11 -0600 Subject: [PATCH 196/233] Dumb fix --- core/servers/content/web_handlers/activitypub.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 206cedfdf..ac9b86f9f 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -216,7 +216,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _getAssociatedActors(objectActorId, signatureActorId, cb) { - signatureActorId = async.waterfall( + async.waterfall( [ callback => { Actor.fromId(objectActorId, (err, objectActor) => { @@ -268,7 +268,10 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { getActorId(activity), signature.keyId.split('#', 1)[0], // trim #main-key (err, remoteActor, signatureActor) => { - //Actor.fromId(getActorId(activity), (err, remoteActor) => { + if (err) { + return this.webServer.accept(resp); + } + // validate sig up front const httpSigValidated = remoteActor && From 32bb0c4937e72272c77739b0e286bd3548e2d5f5 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 19 Apr 2023 19:46:59 -0600 Subject: [PATCH 197/233] Dumb fix...again --- core/servers/content/web_handlers/activitypub.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index ac9b86f9f..fc9720c26 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -269,7 +269,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { signature.keyId.split('#', 1)[0], // trim #main-key (err, remoteActor, signatureActor) => { if (err) { - return this.webServer.accept(resp); + return this.webServer.accessDenied(resp); } // validate sig up front From db3387d6c556d77fc0d827e29eacf659f4f34a7e Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 20 Apr 2023 19:30:08 -0600 Subject: [PATCH 198/233] Allow application/json --- core/webfinger.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/webfinger.js b/core/webfinger.js index f8925ed68..ad52ec89b 100644 --- a/core/webfinger.js +++ b/core/webfinger.js @@ -57,7 +57,11 @@ function queryWebFinger(query, cb) { } const contentType = res.headers['content-type'] || ''; - if (!contentType.startsWith('application/jrd+json')) { + if ( + !['application/jrd+json', 'application/json'].some(ct => + contentType.startsWith(ct) + ) + ) { return cb( Errors.Invalid( `Invalid Content-Type for WebFinger URL ${webFingerUrl}: ${contentType}` From 95c249fc23534542704bf467ed6940db972520c3 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 20 Apr 2023 20:32:50 -0600 Subject: [PATCH 199/233] Better to/subject/etc. --- core/activitypub/note.js | 47 +++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/core/activitypub/note.js b/core/activitypub/note.js index c387ad3a3..f9c8c7add 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -20,7 +20,7 @@ const async = require('async'); const { isString, isObject, truncate } = require('lodash'); const PublicMessageIdNamespace = 'a26ae389-5dfb-4b24-a58e-5472085c8e42'; -const APDefaultSummary = '[ActivityPub]'; +const APDefaultSummary = '[No Subject]'; module.exports = class Note extends ActivityPubObject { constructor(obj) { @@ -202,20 +202,6 @@ module.exports = class Note extends ActivityPubObject { message.fromUserName = fromActorSubject || this.attributedTo; - // - // Note's can be addressed to 1:N users, but a Message is a 1:1 - // relationship. This method requires the mapping up front via options - // - if (isPrivate) { - message.toUserName = options.toUser.username; - message.meta.System[Message.SystemMetaNames.LocalToUserID] = - options.toUser.userId; - } else { - message.toUser = 'All'; - } - - message.areaTag = options.areaTag || Message.WellKnownAreaTags.Private; - // :TODO: it would be better to do some basic HTML to ANSI or pipe codes perhaps message.message = htmlToMessageBody( // try to handle various implementations @@ -223,7 +209,11 @@ module.exports = class Note extends ActivityPubObject { // - https://indieweb.org/post-type-discovery#Algorithm this.content || this.name || this.summary ); - message.subject = this._getSubject(message); + + this._setToUserName(message, isPrivate, options.toUser); + this._setSubject(message); + + message.areaTag = options.areaTag || Message.WellKnownAreaTags.Private; // List all attachments if (Array.isArray(this.attachment) && this.attachment.length > 0) { @@ -396,13 +386,15 @@ module.exports = class Note extends ActivityPubObject { }); } - _getSubject(message) { + _setSubject(message) { if (this.summary) { - return this.summary.trim(); + message.subject = this.summary.trim(); + return; } if (this.name) { - return this.name.trim(); + message.subject = this.name.trim(); + return; } // @@ -421,6 +413,21 @@ module.exports = class Note extends ActivityPubObject { subject = truncate(subject, { length: 32, omission: '...' }); subject = subject || APDefaultSummary; - return subject; + message.subject = subject; + } + + _setToUserName(message, isPrivate, toUser) { + if (isPrivate) { + message.toUserName = toUser.username; + message.meta.System[Message.SystemMetaNames.LocalToUserID] = toUser.userId; + return; + } + + const m = /^@([^ ]+) ./.exec(message.message); + if (m && m[1]) { + message.toUserName = m[1]; + } + + message.toUserName = message.toUserName || 'All'; } }; From beb28c9696a23671f5af8da30a9264d9e0b8c6da Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 20 Apr 2023 20:33:19 -0600 Subject: [PATCH 200/233] Include message ID in log, fix message --- core/servers/content/web_handlers/activitypub.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index fc9720c26..1add01c09 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -994,7 +994,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return cb(err); } - message.persist(err => { + message.persist((err, messageId) => { if (!err) { if (_.isObject(localAddressedTo)) { localAddressedTo = localAddressedTo.username; @@ -1004,8 +1004,9 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { localAddressedTo, activityId, noteId: note.id, + messageId, }, - 'Note delivered as message to private mailbox' + 'Note persisted as local Message' ); } else if (err.code === 'SQLITE_CONSTRAINT') { return cb(null); From 821d6cef70a5e30faaa169cc95dcbc6682282724 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 20 Apr 2023 20:41:46 -0600 Subject: [PATCH 201/233] Use follow-redirects to ensure we follow redirects during Actor lookup et al. --- core/http_util.js | 2 +- package-lock.json | 1231 ++++++++++++++++++++++++++++++++++++++++++++- package.json | 1 + yarn.lock | 402 ++++++++------- 4 files changed, 1418 insertions(+), 218 deletions(-) diff --git a/core/http_util.js b/core/http_util.js index 38a59899a..7ca909668 100644 --- a/core/http_util.js +++ b/core/http_util.js @@ -2,7 +2,7 @@ const { Errors } = require('./enig_error.js'); // deps const { isString, isObject, truncate } = require('lodash'); -const https = require('https'); +const { https } = require('follow-redirects'); const httpSignature = require('http-signature'); const crypto = require('crypto'); diff --git a/package-lock.json b/package-lock.json index 2af9d982a..b9621b5df 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,18 +10,22 @@ "license": "BSD-2-Clause", "dependencies": { "@breejs/later": "4.1.0", + "add": "^2.0.6", "async": "3.2.4", + "avatar-generator": "^2.0.4", "binary-parser": "2.1.0", "buffers": "github:NuSkooler/node-buffers", "bunyan": "1.8.15", "deepdash": "^5.3.9", "easy-table": "^1.2.0", "exiftool": "^0.0.3", + "follow-redirects": "^1.15.2", "fs-extra": "10.1.0", "glob": "8.0.3", "graceful-fs": "^4.2.10", "hashids": "^2.2.10", "hjson": "3.2.2", + "html-entities": "^2.3.3", "http-signature": "^1.3.6", "iconv-lite": "0.6.3", "ini-config-parser": "^1.0.4", @@ -42,12 +46,14 @@ "sqlite3": "5.0.11", "sqlite3-trans": "1.3.0", "ssh2": "1.11.0", + "string-strip-html": "8.4.0", "systeminformation": "5.12.3", "telnet-socket": "0.2.4", "temptmp": "^1.1.0", "uuid": "8.3.2", "uuid-parse": "1.1.0", "ws": "7.5.9", + "yarn": "^1.22.19", "yazl": "^2.5.1" }, "bin": { @@ -281,6 +287,11 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/add": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/add/-/add-2.0.6.tgz", + "integrity": "sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q==" + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -456,6 +467,31 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, + "node_modules/avatar-generator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/avatar-generator/-/avatar-generator-2.0.4.tgz", + "integrity": "sha512-1XH0LAO6QwtOvv9ImVKr6O0DUtH+QX4B6ReBcfjbUPnFVZMfSgM18jkP8MDsrPxk9UmCGMddxBCxdizU7lbwrw==", + "dependencies": { + "commander": "^5.1.0", + "seedrandom": "^3.0.5", + "sharp": "^0.25.2" + }, + "bin": { + "avatar-generator": "cli.js" + }, + "engines": { + "node": ">=8.0", + "npm": ">=6.0" + } + }, + "node_modules/avatar-generator/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "engines": { + "node": ">= 6" + } + }, "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -833,6 +869,14 @@ "node": ">=0.8" } }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/coffee-script": { "version": "1.12.7", "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", @@ -846,6 +890,15 @@ "node": ">=0.8.0" } }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -862,6 +915,15 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "node_modules/color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", @@ -870,6 +932,19 @@ "color-support": "bin.js" } }, + "node_modules/color/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, "node_modules/colorette": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", @@ -954,6 +1029,20 @@ } } }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/deep-extend": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", @@ -1431,6 +1520,14 @@ "resolved": "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz", "integrity": "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "engines": { + "node": ">=6" + } + }, "node_modules/external-editor": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", @@ -1575,6 +1672,30 @@ "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -1645,6 +1766,11 @@ "assert-plus": "^1.0.0" } }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, "node_modules/glob": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", @@ -1746,6 +1872,11 @@ "hjson": "bin/hjson" } }, + "node_modules/html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + }, "node_modules/http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", @@ -1916,6 +2047,11 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, "node_modules/ini-config-parser": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz", @@ -1983,6 +2119,11 @@ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "optional": true }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2086,6 +2227,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -2621,6 +2767,17 @@ "node": ">=6" } }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -2737,6 +2894,11 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, "node_modules/moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", @@ -2802,6 +2964,11 @@ "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -2837,6 +3004,22 @@ "split2": "^4.1.0" } }, + "node_modules/node-abi": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", + "dependencies": { + "semver": "^5.4.1" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/node-addon-api": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", @@ -2974,6 +3157,11 @@ "node": ">=6.0.0" } }, + "node_modules/noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==" + }, "node_modules/nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -3018,6 +3206,14 @@ "set-blocking": "^2.0.0" } }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3246,6 +3442,182 @@ "node": ">=0.10.0" } }, + "node_modules/prebuild-install": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", + "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", + "dependencies": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.7.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/prebuild-install/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prebuild-install/node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "node_modules/prebuild-install/node_modules/are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/prebuild-install/node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prebuild-install/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/prebuild-install/node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/prebuild-install/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prebuild-install/node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prebuild-install/node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/prebuild-install/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/prebuild-install/node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/prebuild-install/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/prebuild-install/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prebuild-install/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -3270,6 +3642,11 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -3332,6 +3709,36 @@ } ] }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -3537,6 +3944,11 @@ "truncate-utf8-bytes": "^1.0.0" } }, + "node_modules/seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + }, "node_modules/semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -3581,30 +3993,225 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, + "node_modules/sharp": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.25.4.tgz", + "integrity": "sha512-umSzJJ1oBwIOfwFFt/fJ7JgCva9FvrEU2cbbm7u/3hSDZhXvkME8WE5qpaJqLIe2Har5msF5UG4CzYlEg5o3BQ==", + "hasInstallScript": true, + "dependencies": { + "color": "^3.1.2", + "detect-libc": "^1.0.3", + "node-addon-api": "^3.0.0", + "npmlog": "^4.1.2", + "prebuild-install": "^5.3.4", + "semver": "^7.3.2", + "simple-get": "^4.0.0", + "tar": "^6.0.2", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/sharp/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sharp/node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "node_modules/sharp/node_modules/are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/sharp/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/sharp/node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/sharp/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sharp/node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" + }, + "node_modules/sharp/node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/sharp/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/sharp/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/sharp/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sharp/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, "node_modules/slice-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", @@ -3791,6 +4398,14 @@ "node": ">=0.6.19" } }, + "node_modules/string-strip-html": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/string-strip-html/-/string-strip-html-8.4.0.tgz", + "integrity": "sha512-ajjEpk0V1G0+/RrX08I2pSj/kfsYU5wkUKWEKPQJXVQpdahZNSljiuWVqf8UgrB2E9DvFcougbl1gPwHzkuEDg==", + "engines": { + "node": ">=14" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -3887,6 +4502,37 @@ "node": ">= 10" } }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/tar/node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -3990,6 +4636,17 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -4170,6 +4827,14 @@ "node": ">= 8" } }, + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "engines": { + "node": ">=4" + } + }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -4243,6 +4908,19 @@ "node": ">= 14" } }, + "node_modules/yarn": { + "version": "1.22.19", + "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz", + "integrity": "sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ==", + "hasInstallScript": true, + "bin": { + "yarn": "bin/yarn.js", + "yarnpkg": "bin/yarn.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/yazl": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", @@ -4424,6 +5102,11 @@ "dev": true, "requires": {} }, + "add": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/add/-/add-2.0.6.tgz", + "integrity": "sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q==" + }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -4552,6 +5235,23 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, + "avatar-generator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/avatar-generator/-/avatar-generator-2.0.4.tgz", + "integrity": "sha512-1XH0LAO6QwtOvv9ImVKr6O0DUtH+QX4B6ReBcfjbUPnFVZMfSgM18jkP8MDsrPxk9UmCGMddxBCxdizU7lbwrw==", + "requires": { + "commander": "^5.1.0", + "seedrandom": "^3.0.5", + "sharp": "^0.25.2" + }, + "dependencies": { + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" + } + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -4808,11 +5508,40 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" + }, "coffee-script": { "version": "1.12.7", "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==" }, + "color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "requires": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + }, + "dependencies": { + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + } + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -4826,6 +5555,15 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", @@ -4894,6 +5632,14 @@ "ms": "2.1.2" } }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "requires": { + "mimic-response": "^3.1.0" + } + }, "deep-extend": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", @@ -5265,6 +6011,11 @@ "resolved": "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz", "integrity": "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + }, "external-editor": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", @@ -5383,6 +6134,16 @@ "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -5438,6 +6199,11 @@ "assert-plus": "^1.0.0" } }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, "glob": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", @@ -5517,6 +6283,11 @@ "resolved": "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz", "integrity": "sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==" }, + "html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + }, "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", @@ -5634,6 +6405,11 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, "ini-config-parser": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz", @@ -5694,6 +6470,11 @@ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "optional": true }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -5761,6 +6542,11 @@ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -6150,6 +6936,11 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -6237,6 +7028,11 @@ "minimist": "^1.2.6" } }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, "moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", @@ -6292,6 +7088,11 @@ "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -6321,6 +7122,21 @@ "split2": "^4.1.0" } }, + "node-abi": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", + "requires": { + "semver": "^5.4.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, "node-addon-api": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", @@ -6424,6 +7240,11 @@ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz", "integrity": "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==" }, + "noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==" + }, "nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -6456,6 +7277,11 @@ "set-blocking": "^2.0.0" } }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -6612,6 +7438,151 @@ "pinkie": "^2.0.0" } }, + "prebuild-install": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", + "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.7.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "requires": { + "mimic-response": "^2.0.0" + } + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -6624,6 +7595,11 @@ "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", "dev": true }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -6666,6 +7642,29 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + } + } + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -6810,6 +7809,11 @@ "truncate-utf8-bytes": "^1.0.0" } }, + "seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + }, "semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -6841,6 +7845,127 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, + "sharp": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.25.4.tgz", + "integrity": "sha512-umSzJJ1oBwIOfwFFt/fJ7JgCva9FvrEU2cbbm7u/3hSDZhXvkME8WE5qpaJqLIe2Har5msF5UG4CzYlEg5o3BQ==", + "requires": { + "color": "^3.1.2", + "detect-libc": "^1.0.3", + "node-addon-api": "^3.0.0", + "npmlog": "^4.1.2", + "prebuild-install": "^5.3.4", + "semver": "^7.3.2", + "simple-get": "^4.0.0", + "tar": "^6.0.2", + "tunnel-agent": "^0.6.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -6859,6 +7984,29 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "requires": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "requires": { + "is-arrayish": "^0.3.1" + } + }, "slice-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", @@ -6984,6 +8132,11 @@ "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", "dev": true }, + "string-strip-html": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/string-strip-html/-/string-strip-html-8.4.0.tgz", + "integrity": "sha512-ajjEpk0V1G0+/RrX08I2pSj/kfsYU5wkUKWEKPQJXVQpdahZNSljiuWVqf8UgrB2E9DvFcougbl1gPwHzkuEDg==" + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -7046,6 +8199,36 @@ } } }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + }, + "dependencies": { + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + } + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, "telnet-socket": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz", @@ -7125,6 +8308,14 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -7281,6 +8472,11 @@ "isexe": "^2.0.0" } }, + "which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==" + }, "wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -7328,6 +8524,11 @@ "integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==", "dev": true }, + "yarn": { + "version": "1.22.19", + "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz", + "integrity": "sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ==" + }, "yazl": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", diff --git a/package.json b/package.json index fc84926c5..81da7f6be 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "deepdash": "^5.3.9", "easy-table": "^1.2.0", "exiftool": "^0.0.3", + "follow-redirects": "^1.15.2", "fs-extra": "10.1.0", "glob": "8.0.3", "graceful-fs": "^4.2.10", diff --git a/yarn.lock b/yarn.lock index 344836b33..a9ddeae08 100644 --- a/yarn.lock +++ b/yarn.lock @@ -126,17 +126,17 @@ acorn-jsx@^5.3.2: resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.8.0: +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.8.0: version "8.8.1" resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== add@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/add/-/add-2.0.6.tgz#248f0a9f6e5a528ef2295dbeec30532130ae2235" + resolved "https://registry.npmjs.org/add/-/add-2.0.6.tgz" integrity sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q== -agent-base@6, agent-base@^6.0.2: +agent-base@^6.0.2, agent-base@6: version "6.0.2" resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== @@ -179,7 +179,7 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: ansi-regex@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== ansi-regex@^5.0.1: @@ -213,16 +213,16 @@ anymatch@^3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - "aproba@^1.0.3 || ^2.0.0": version "2.0.0" resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + are-we-there-yet@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" @@ -241,7 +241,7 @@ are-we-there-yet@^3.0.0: are-we-there-yet@~1.1.2: version "1.1.7" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz" integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== dependencies: delegates "^1.0.0" @@ -255,14 +255,14 @@ argparse@^2.0.1: array-union@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" - integrity "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== dependencies: array-uniq "^1.0.1" array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" - integrity "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== asn1@^0.2.4, asn1@~0.2.3: version "0.2.6" @@ -271,7 +271,7 @@ asn1@^0.2.4, asn1@~0.2.3: dependencies: safer-buffer "~2.1.0" -assert-plus@1.0.0, assert-plus@^1.0.0: +assert-plus@^1.0.0, assert-plus@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== @@ -288,7 +288,7 @@ async@3.2.4: avatar-generator@^2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/avatar-generator/-/avatar-generator-2.0.4.tgz#01d5db33b86ff32cf274f532ab9def0aaf49921a" + resolved "https://registry.npmjs.org/avatar-generator/-/avatar-generator-2.0.4.tgz" integrity sha512-1XH0LAO6QwtOvv9ImVKr6O0DUtH+QX4B6ReBcfjbUPnFVZMfSgM18jkP8MDsrPxk9UmCGMddxBCxdizU7lbwrw== dependencies: commander "^5.1.0" @@ -298,7 +298,7 @@ avatar-generator@^2.0.4: balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" - integrity "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg== base64-js@^1.3.1: version "1.5.1" @@ -308,7 +308,7 @@ base64-js@^1.3.1: bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" - integrity "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== dependencies: tweetnacl "^0.14.3" @@ -363,7 +363,7 @@ bser@2.1.1: buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" - integrity "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== buffer@^5.5.0: version "5.7.1" @@ -443,7 +443,7 @@ chardet@^0.7.0: chownr@^1.1.1: version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chownr@^2.0.0: @@ -492,11 +492,11 @@ cli-width@^3.0.0: clone@^1.0.2: version "1.0.4" resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" - integrity "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== code-point-at@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== coffee-script@^1.12.4: @@ -506,7 +506,7 @@ coffee-script@^1.12.4: color-convert@^1.9.3: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" @@ -518,19 +518,19 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + color-string@^1.6.0: version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== dependencies: color-name "^1.0.0" @@ -543,7 +543,7 @@ color-support@^1.1.2, color-support@^1.1.3: color@^3.1.2: version "3.2.1" - resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz" integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== dependencies: color-convert "^1.9.3" @@ -556,7 +556,7 @@ colorette@^2.0.19: commander@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== commander@^9.4.1: @@ -567,23 +567,18 @@ commander@^9.4.1: concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== -core-util-is@1.0.2: +core-util-is@~1.0.0, core-util-is@1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - cpu-features@~0.0.4: version "0.0.4" resolved "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz" @@ -608,7 +603,7 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -617,14 +612,14 @@ debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: decompress-response@^4.2.0: version "4.2.1" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz" integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== dependencies: mimic-response "^2.0.0" decompress-response@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: mimic-response "^3.1.0" @@ -636,13 +631,13 @@ deep-extend@^0.5.1: deep-extend@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-is@^0.1.3: version "0.1.3" resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" - integrity "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw== deepdash@^5.3.9: version "5.3.9" @@ -655,14 +650,14 @@ deepdash@^5.3.9: defaults@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" - integrity "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA== dependencies: clone "^1.0.2" del@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/del/-/del-3.0.0.tgz" - integrity "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==" + integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A== dependencies: globby "^6.1.0" is-path-cwd "^1.0.0" @@ -674,7 +669,7 @@ del@^3.0.0: delegates@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" - integrity "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== denque@^2.0.1: version "2.1.0" @@ -688,7 +683,7 @@ depd@^1.1.2: detect-libc@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz" integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== detect-libc@^2.0.0: @@ -706,7 +701,7 @@ doctrine@^3.0.0: dtrace-provider@~0.8: version "0.8.7" resolved "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz" - integrity "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q==" + integrity sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q== dependencies: nan "^2.10.0" @@ -742,27 +737,20 @@ emoji-regex@^9.2.2: resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -encoding@^0.1.12: +encoding@^0.1.0, encoding@^0.1.12: version "0.1.13" resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.1.0: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz" integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== dependencies: once "^1.4.0" -end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - env-paths@^2.2.0: version "2.2.1" resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" @@ -776,7 +764,7 @@ err-code@^2.0.2: escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: version "4.0.0" @@ -821,7 +809,7 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@8.31.0: +eslint@>=5, eslint@>=7.0.0, eslint@8.31.0: version "8.31.0" resolved "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz" integrity sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA== @@ -937,11 +925,11 @@ execa@^6.1.0: exiftool@^0.0.3: version "0.0.3" resolved "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz" - integrity "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" + integrity sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw== expand-template@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== external-editor@^3.0.3: @@ -953,7 +941,7 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" -extsprintf@1.3.0, extsprintf@^1.2.0: +extsprintf@^1.2.0, extsprintf@1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== @@ -971,7 +959,7 @@ fast-json-stable-stringify@^2.0.0: fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: version "1.15.0" @@ -1029,9 +1017,14 @@ flatted@^3.1.0: resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== +follow-redirects@^1.15.2: + version "1.15.2" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + fs-constants@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== fs-extra@10.1.0: @@ -1053,7 +1046,7 @@ fs-minipass@^2.0.0: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== gauge@^3.0.0: version "3.0.2" @@ -1086,7 +1079,7 @@ gauge@^4.0.3: gauge@~2.7.3: version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + resolved "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz" integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== dependencies: aproba "^1.0.3" @@ -1119,7 +1112,7 @@ getpass@^0.1.1: github-from-package@0.0.0: version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== glob-parent@^6.0.2: @@ -1129,21 +1122,10 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@8.0.3: - version "8.0.3" - resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - glob@^6.0.1: version "6.0.4" resolved "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz" - integrity "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==" + integrity sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A== dependencies: inflight "^1.0.4" inherits "2" @@ -1187,6 +1169,17 @@ glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +glob@8.0.3: + version "8.0.3" + resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + globals@^13.19.0: version "13.19.0" resolved "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz" @@ -1197,7 +1190,7 @@ globals@^13.19.0: globby@^6.1.0: version "6.1.0" resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" - integrity "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw== dependencies: array-union "^1.0.1" glob "^7.0.3" @@ -1237,7 +1230,7 @@ hjson@3.2.2: html-entities@^2.3.3: version "2.3.3" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" + resolved "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz" integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== http-cache-semantics@^4.1.0: @@ -1293,13 +1286,6 @@ husky@^8.0.0: resolved "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz" integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== -iconv-lite@0.6.3, iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" @@ -1307,6 +1293,13 @@ iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.2, iconv-lite@0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + ieee754@^1.1.13: version "1.2.1" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" @@ -1328,7 +1321,7 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" @@ -1343,12 +1336,12 @@ infer-owner@^1.0.4: inflight@^1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -1364,7 +1357,7 @@ ini-config-parser@^1.0.4: ini@~1.3.0: version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== inquirer@^8.2.2: @@ -1394,17 +1387,17 @@ ip@^2.0.0: is-arrayish@^0.3.1: version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== dependencies: number-is-nan "^1.0.0" @@ -1444,7 +1437,7 @@ is-number@^7.0.0: is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz" - integrity "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw== is-path-in-cwd@^1.0.0: version "1.0.1" @@ -1456,7 +1449,7 @@ is-path-in-cwd@^1.0.0: is-path-inside@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz" - integrity "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g== dependencies: path-is-inside "^1.0.1" @@ -1482,13 +1475,13 @@ is-unicode-supported@^0.1.0: isarray@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== js-sdsl@^4.1.4: version "4.2.0" @@ -1520,7 +1513,7 @@ json-schema@0.4.0: json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - integrity "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== jsonc-parser@^3.0.0: version "3.2.0" @@ -1609,7 +1602,7 @@ lodash.merge@^4.6.2: resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.21: +lodash@^4.17.15, lodash@^4.17.21, lodash@4.17.21: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -1632,11 +1625,6 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" -lru-cache@7.13.2: - version "7.13.2" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz" - integrity sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA== - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" @@ -1644,6 +1632,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-cache@7.13.2: + version "7.13.2" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz" + integrity sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA== + make-dir@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" @@ -1676,7 +1669,7 @@ make-fetch-happen@^9.1.0: makeerror@1.0.x: version "1.0.11" resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz" - integrity "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg== dependencies: tmpl "1.0.x" @@ -1717,15 +1710,15 @@ mimic-fn@^4.0.0: mimic-response@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz" integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== mimic-response@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2, "minimatch@2 || 3": version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -1739,16 +1732,11 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6: +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: version "1.2.6" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== -minimist@^1.2.3: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== - minipass-collect@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" @@ -1805,10 +1793,15 @@ minizlib@^2.0.0, minizlib@^2.1.1: mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp@^1.0.3, mkdirp@^1.0.4: +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -1820,12 +1813,12 @@ mkdirp@~0.5.1: dependencies: minimist "^1.2.6" -moment@2.29.4, moment@^2.19.3: +moment@^2.19.3, moment@2.29.4: version "2.29.4" resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== -ms@2.1.2, ms@^2.0.0: +ms@^2.0.0, ms@2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== @@ -1838,7 +1831,7 @@ mute-stream@0.0.8: mv@~2: version "2.1.1" resolved "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz" - integrity "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==" + integrity sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg== dependencies: mkdirp "~0.5.1" ncp "~2.0.0" @@ -1851,18 +1844,18 @@ nan@^2.10.0, nan@^2.14.0, nan@^2.15.0, nan@^2.16.0: napi-build-utils@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - integrity "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== ncp@~2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz" - integrity "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==" + integrity sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA== negotiator@^0.6.2: version "0.6.3" @@ -1881,14 +1874,14 @@ nntp-server@3.1.0: node-abi@^2.7.0: version "2.30.1" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" + resolved "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz" integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w== dependencies: semver "^5.4.1" node-addon-api@^3.0.0: version "3.2.1" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== node-addon-api@^4.2.0: @@ -1922,7 +1915,7 @@ node-gyp@8.x: node-int64@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" - integrity "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== node-pty@0.10.1: version "0.10.1" @@ -1938,7 +1931,7 @@ nodemailer@6.7.7: noop-logger@^0.1.1: version "0.1.1" - resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" + resolved "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz" integrity sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ== nopt@^5.0.0: @@ -1967,9 +1960,19 @@ npm-run-path@^5.1.0: dependencies: path-key "^4.0.0" -npmlog@^4.0.1, npmlog@^4.1.2: +npmlog@^4.0.1: version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +npmlog@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== dependencies: are-we-there-yet "~1.1.2" @@ -1999,13 +2002,13 @@ npmlog@^6.0.0: number-is-nan@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.12.2: version "1.12.3" @@ -2015,7 +2018,7 @@ object-inspect@^1.12.2: once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" @@ -2063,7 +2066,7 @@ ora@^5.4.1: os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - integrity "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== otplib@11.0.1: version "11.0.1" @@ -2113,12 +2116,12 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-is-inside@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" - integrity "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" @@ -2143,28 +2146,28 @@ pidtree@^0.6.0: pify@^2.0.0: version "2.3.0" resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - integrity "sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" - integrity "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - integrity "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" - integrity "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== prebuild-install@^5.3.4: version "5.3.6" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.6.tgz#7c225568d864c71d89d07f8796042733a3f54291" + resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz" integrity sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg== dependencies: detect-libc "^1.0.3" @@ -2195,7 +2198,7 @@ prettier@2.8.1: process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== promise-inflight@^1.0.1: @@ -2236,7 +2239,7 @@ queue-microtask@^1.2.2: rc@^1.2.7: version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" @@ -2245,9 +2248,9 @@ rc@^1.2.7: strip-json-comments "~2.0.1" readable-stream@^2.0.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -2299,7 +2302,14 @@ rfdc@^1.3.0: resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== -rimraf@^2.2.8, rimraf@^2.6.1: +rimraf@^2.2.8: + version "2.6.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" + integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== + dependencies: + glob "^7.0.5" + +rimraf@^2.6.1: version "2.6.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== @@ -2316,14 +2326,14 @@ rimraf@^3.0.2: rimraf@~2.4.0: version "2.4.5" resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz" - integrity "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==" + integrity sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ== dependencies: glob "^6.0.1" rlogin@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz" - integrity "sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==" + integrity sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg== rsvp@^4.8.4: version "4.8.5" @@ -2349,12 +2359,7 @@ rxjs@^7.5.5, rxjs@^7.5.7: dependencies: tslib "^2.1.0" -safe-buffer@^5.0.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== @@ -2364,7 +2369,7 @@ safe-json-stringify@~1: resolved "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz" integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +safer-buffer@^2.0.2, safer-buffer@^2.1.0, "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -2393,12 +2398,12 @@ sanitize-filename@^1.6.3: seedrandom@^3.0.5: version "3.0.5" - resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7" + resolved "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz" integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg== semver@^5.4.1: version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@^6.0.0: @@ -2406,14 +2411,7 @@ semver@^6.0.0: resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.5: +semver@^7.3.2, semver@^7.3.5: version "7.3.7" resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== @@ -2434,7 +2432,7 @@ set-blocking@^2.0.0, set-blocking@~2.0.0: sharp@^0.25.2: version "0.25.4" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.25.4.tgz#1a8e542144a07ab7e9316ab89de80182b827c363" + resolved "https://registry.npmjs.org/sharp/-/sharp-0.25.4.tgz" integrity sha512-umSzJJ1oBwIOfwFFt/fJ7JgCva9FvrEU2cbbm7u/3hSDZhXvkME8WE5qpaJqLIe2Har5msF5UG4CzYlEg5o3BQ== dependencies: color "^3.1.2" @@ -2466,12 +2464,12 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7: simple-concat@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== simple-get@^3.0.3: version "3.1.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.1.tgz#cc7ba77cfbe761036fbfce3d021af25fc5584d55" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz" integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA== dependencies: decompress-response "^4.2.0" @@ -2480,7 +2478,7 @@ simple-get@^3.0.3: simple-get@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz" integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== dependencies: decompress-response "^6.0.0" @@ -2489,7 +2487,7 @@ simple-get@^4.0.0: simple-swizzle@^0.2.2: version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== dependencies: is-arrayish "^0.3.1" @@ -2598,6 +2596,20 @@ ssri@^8.0.0, ssri@^8.0.1: dependencies: minipass "^3.1.1" +string_decoder@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz" + integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== + dependencies: + safe-buffer "~5.1.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + string-argv@^0.3.1: version "0.3.1" resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" @@ -2605,12 +2617,12 @@ string-argv@^0.3.1: string-strip-html@8.4.0: version "8.4.0" - resolved "https://registry.yarnpkg.com/string-strip-html/-/string-strip-html-8.4.0.tgz#3baf7fc56ef566393077a6941e8ba13c91b43d0b" + resolved "https://registry.npmjs.org/string-strip-html/-/string-strip-html-8.4.0.tgz" integrity sha512-ajjEpk0V1G0+/RrX08I2pSj/kfsYU5wkUKWEKPQJXVQpdahZNSljiuWVqf8UgrB2E9DvFcougbl1gPwHzkuEDg== string-width@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== dependencies: code-point-at "^1.0.0" @@ -2635,23 +2647,9 @@ string-width@^5.0.0: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string_decoder@^1.1.1: - version "1.2.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz" - integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== - dependencies: - safe-buffer "~5.1.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: ansi-regex "^2.0.0" @@ -2687,7 +2685,7 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: strip-json-comments@~2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== supports-color@^7.1.0: @@ -2704,7 +2702,7 @@ systeminformation@5.12.3: tar-fs@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz" integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== dependencies: chownr "^1.1.1" @@ -2714,7 +2712,7 @@ tar-fs@^2.0.0: tar-stream@^2.1.4: version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== dependencies: bl "^4.0.3" @@ -2753,17 +2751,17 @@ temptmp@^1.1.0: text-table@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== thirty-two@1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz" - integrity "sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==" + integrity sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA== through@^2.3.6, through@^2.3.8: version "2.3.8" resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - integrity "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== tmp@^0.0.33: version "0.0.33" @@ -2792,7 +2790,7 @@ tr46@~0.0.3: truncate-utf8-bytes@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz" - integrity "sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==" + integrity sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ== dependencies: utf8-byte-length "^1.0.1" @@ -2803,7 +2801,7 @@ tslib@^2.1.0: tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" @@ -2811,7 +2809,7 @@ tunnel-agent@^0.6.0: tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" - integrity "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -2864,12 +2862,12 @@ uri-js@^4.2.2: utf8-byte-length@^1.0.1: version "1.0.4" resolved "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz" - integrity "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" + integrity sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA== util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== uuid-parse@1.1.0: version "1.1.0" @@ -2924,14 +2922,14 @@ vscode-uri@^3.0.3: walker@~1.0.5: version "1.0.7" resolved "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz" - integrity "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw== dependencies: makeerror "1.0.x" wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" - integrity "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: defaults "^1.0.3" @@ -2950,7 +2948,7 @@ whatwg-url@^5.0.0: which-pm-runs@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.1.0.tgz#35ccf7b1a0fce87bd8b92a478c9d045785d3bf35" + resolved "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz" integrity sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA== which@^2.0.1, which@^2.0.2: @@ -2993,7 +2991,7 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== ws@7.5.9: version "7.5.9" @@ -3012,7 +3010,7 @@ yaml@^2.1.3: yarn@^1.22.19: version "1.22.19" - resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.19.tgz#4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447" + resolved "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz" integrity sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ== yazl@^2.5.1: From 6dde005f215a83209cfd2e13753e99ba6621bd1e Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 20 Apr 2023 20:56:25 -0600 Subject: [PATCH 202/233] Capture '@' also --- core/activitypub/note.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/activitypub/note.js b/core/activitypub/note.js index f9c8c7add..c3a97fa38 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -423,7 +423,7 @@ module.exports = class Note extends ActivityPubObject { return; } - const m = /^@([^ ]+) ./.exec(message.message); + const m = /^(@[^ ]+) ./.exec(message.message); if (m && m[1]) { message.toUserName = m[1]; } From ed7a728bd72d36baf66980ab54b35dc04e0b11a8 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 21 Apr 2023 11:56:28 -0600 Subject: [PATCH 203/233] Less restrictive for subject capture --- core/activitypub/note.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/activitypub/note.js b/core/activitypub/note.js index c3a97fa38..d83c30ab0 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -405,7 +405,7 @@ module.exports = class Note extends ActivityPubObject { // or 32 characters in length, whichever comes first // - If not end of string, we'll sub in '...' // - let subject = message.message.replace(`@${message.toUserName} `, '').trim(); + let subject = message.message.replace(/^@[^ ]+ /, '').trim(); const m = /^(.+)\r?\n/.exec(subject); if (m && m[1]) { subject = m[1]; From dd8ab851f2d2a06e50c24466660668b0376abbb3 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Tue, 25 Apr 2023 11:45:13 -0600 Subject: [PATCH 204/233] Less restrictive for subject capture...again --- core/activitypub/note.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/activitypub/note.js b/core/activitypub/note.js index d83c30ab0..cb751528e 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -405,7 +405,7 @@ module.exports = class Note extends ActivityPubObject { // or 32 characters in length, whichever comes first // - If not end of string, we'll sub in '...' // - let subject = message.message.replace(/^@[^ ]+ /, '').trim(); + let subject = message.message.replace(/^@[^ ,]+ /, '').trim(); const m = /^(.+)\r?\n/.exec(subject); if (m && m[1]) { subject = m[1]; @@ -423,7 +423,7 @@ module.exports = class Note extends ActivityPubObject { return; } - const m = /^(@[^ ]+) ./.exec(message.message); + const m = /^(@[^ ,]+) ./.exec(message.message); if (m && m[1]) { message.toUserName = m[1]; } From 31f10d0c78dd3bc8c305106ce5fe167e84bce498 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Tue, 25 Apr 2023 11:46:03 -0600 Subject: [PATCH 205/233] Fixes --- art/themes/luciano_blocktronics/theme.hjson | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/art/themes/luciano_blocktronics/theme.hjson b/art/themes/luciano_blocktronics/theme.hjson index 1f5448bdc..edec6669a 100644 --- a/art/themes/luciano_blocktronics/theme.hjson +++ b/art/themes/luciano_blocktronics/theme.hjson @@ -1395,6 +1395,23 @@ } } + activityPubPostPublicMessage: { + 0: { + mci: { + TL1: { width: 19, textOverflow: "..." } + ET2: { width: 19, textOverflow: "..." } + ET3: { width: 19, textOverflow: "..." } + ET4: { width: 21, textOverflow: "..." } + //TL4: { width: 25 } + } + } + 1: { + mci: { + MT1: { height: 14 } + } + } + } + activityPubPublicMessages: { config: { dateTimeFormat: ddd MMM Do From a5a72d8270e6132c705c2258b97600f73eada399 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Tue, 25 Apr 2023 11:46:19 -0600 Subject: [PATCH 206/233] Split out logging a bit, fix accept header parsing --- .../luciano_blocktronics/activitypub_menu.ans | Bin 3992 -> 4016 bytes core/logger.js | 2 +- core/servers/content/web.js | 15 +++++----- .../content/web_handlers/activitypub.js | 27 +++++++++++------- .../content/web_handlers/system_general.js | 2 -- core/web_log.js | 2 +- 6 files changed, 26 insertions(+), 22 deletions(-) diff --git a/art/themes/luciano_blocktronics/activitypub_menu.ans b/art/themes/luciano_blocktronics/activitypub_menu.ans index ae151f7d9909bdac181f9d492821f187ea815b6a..f582e85a0d2cd9766f9edc30602b7735ab607d1b 100644 GIT binary patch delta 218 zcmbOszd?RO0k=$nf^@WjwXs=lL4I+GLP2R#PG+(~ZfbFHVtVT2gM7l1H*%{^zQXMq zBOPsMZET*K168h2mYG_ProLD@+Sn*p0U1Db0cF6JC={nA7A0pWq~#YWBqo>S7eTa4 z_UCb!oXe#?Ie}Al@?##I$rHF0C!gXInC!r-HTe#&=;T^np~>95GF%FYMX8BETg-DO eFXuI%Jb{sYay~EL=8wE}j4URGhOU!~`Bed+*F&WM delta 136 zcmdlWKSO>)0rzA#9szy@7?6%Ov^F-MEW)cac|N!55|iC{wI)aLiA-+e f6`btPsXF--kiU;lWHT3EEhCGup|S4dZhln&gG?vo diff --git a/core/logger.js b/core/logger.js index 83eac3ad4..82ed5594e 100644 --- a/core/logger.js +++ b/core/logger.js @@ -30,7 +30,7 @@ module.exports = class Log { const serializers = Log.standardSerializers(); this.log = bunyan.createLogger({ - name: 'ENiGMA½ BBS', + name: 'ENiGMA½', streams: logStreams, serializers: serializers, }); diff --git a/core/servers/content/web.js b/core/servers/content/web.js index 9bc8ebb2b..72bcff50d 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -1,5 +1,5 @@ // ENiGMA½ -const Log = require('../../logger.js').log; +const SysLog = require('../../logger.js').log; const ServerModule = require('../../server_module.js').ServerModule; const Config = require('../../config.js').get; const { Errors } = require('../../enig_error.js'); @@ -75,7 +75,6 @@ exports.getModule = class WebServerModule extends ServerModule { constructor() { super(); - //this.log = Log.child({ server: 'Web' }); this.log = WebLog.createWebLog(); const config = Config(); @@ -133,14 +132,14 @@ exports.getModule = class WebServerModule extends ServerModule { try { const normalizedName = _.camelCase(module.moduleInfo.name); if (!WebHandlerModule.isEnabled(normalizedName)) { - this.log.info( + SysLog.info( { moduleName: normalizedName }, 'Web handler module not enabled' ); return nextModule(null); } - Log.info( + SysLog.info( { moduleName: normalizedName }, 'Initializing web handler module' ); @@ -149,7 +148,7 @@ exports.getModule = class WebServerModule extends ServerModule { return nextModule(err); }); } catch (e) { - this.log.error( + SysLog.error( { error: e.message }, 'Exception caught loading web handler' ); @@ -171,7 +170,7 @@ exports.getModule = class WebServerModule extends ServerModule { if (this[name]) { const port = parseInt(config.contentServers.web[service].port); if (isNaN(port)) { - this.log.error( + SysLog.error( { port: config.contentServers.web[service].port, server: ModuleInfo.name, @@ -206,7 +205,7 @@ exports.getModule = class WebServerModule extends ServerModule { route = new Route(route); if (!route.isValid()) { - this.log.error( + SysLog.error( { route: route }, 'Cannot add route: missing or invalid required members' ); @@ -215,7 +214,7 @@ exports.getModule = class WebServerModule extends ServerModule { const routeKey = route.getRouteKey(); if (routeKey in this.routes) { - this.log.warn( + SysLog.warn( { route: route, routeKey: routeKey }, 'Cannot add route: duplicate method/path combination exists' ); diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index 1add01c09..e9b01a817 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -6,6 +6,7 @@ const { getActorId, prepareLocalUserAsActor, } = require('../../../activitypub/util'); +const SysLog = require('../../../logger').log; const { ActivityStreamMediaType, WellKnownActivity, @@ -182,7 +183,8 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } // Additionally, serve activity JSON if the proper 'Accept' header was sent - const accept = req.headers['accept'].split(',').map(v => v.trim()) || ['*/*']; + const accept = (req.headers.accept && + req.headers.accept.split(',').map(v => v.trim())) || ['*/*']; const headerValues = [ ActivityStreamMediaType, 'application/ld+json', @@ -396,7 +398,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { _inboxAcceptFollowActivity(resp, activity) { // Currently Accept's to Follow's are really just a formality; // we'll log it, but that's about it for now - this.log.info( + SysLog.info( { remoteActorId: activity.actor, localActorId: _.get(activity, 'object.actor'), @@ -626,7 +628,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { // :TODO: log me } - this.log.info({ stats, inboxType }, 'Inbox Delete request complete'); + SysLog.info({ stats, inboxType }, 'Inbox Delete request complete'); return this.webServer.accepted(resp); } ); @@ -802,7 +804,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.internalServerError(resp, err); } - this.log.info( + SysLog.info( { username: localUser.username, userId: localUser.userId, @@ -906,7 +908,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.internalServerError(resp, err); } - this.log.info( + SysLog.info( { inboxType, objectId: targetObjectId, @@ -926,7 +928,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _deliverNoteToSharedInbox(activity, note, cb) { - this.log.info( + SysLog.info( { activityId: activity.id, noteId: note.id }, 'Delivering Note to Public/Shared inbox' ); @@ -957,9 +959,14 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return cb(null); // not found/etc., just bail } - this.log.info( - { activityId: activity.id, noteId: note.id, actorId }, - 'Delivering Note to local Actor Private inbox' + this.sysLog.info( + { + activityId: activity.id, + noteId: note.id, + actorId, + username: localUser.username, + }, + `Delivering private Note to local Actor "${localUser.username}"` ); Collection.addInboxItem(activity, localUser, false, err => { @@ -1209,7 +1216,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _prepareNewUserAsActor(user, cb) { - this.log.info( + this.sysLog.info( { username: user.username, userId: user.userId }, `Preparing ActivityPub settings for "${user.username}"` ); diff --git a/core/servers/content/web_handlers/system_general.js b/core/servers/content/web_handlers/system_general.js index e5b798040..6ca9534d2 100644 --- a/core/servers/content/web_handlers/system_general.js +++ b/core/servers/content/web_handlers/system_general.js @@ -27,8 +27,6 @@ exports.getModule = class SystemGeneralWebHandler extends WebHandlerModule { this.webServer = webServer; EngiAssert(webServer, 'System General Web Handler init without webServer'); - this.log = webServer.logger().child({ webHandler: 'SysGeneral' }); - const domain = getWebDomain(); if (!domain) { return cb(Errors.UnexpectedState('Web server does not have "domain" set')); diff --git a/core/web_log.js b/core/web_log.js index d463a3246..5791b4b62 100644 --- a/core/web_log.js +++ b/core/web_log.js @@ -19,7 +19,7 @@ module.exports = class WebLog { serializers.res = bunyan.stdSerializers.res; const webLog = bunyan.createLogger({ - name: 'ENiGMA½ BBS[Web]', + name: 'ENiGMA½', streams: [rotatingFile], serializers, }); From 0c1785c46238990515f9f0808998cffc3abe8c96 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 26 Apr 2023 19:08:31 -0600 Subject: [PATCH 207/233] More log updates --- .../content/web_handlers/activitypub.js | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index e9b01a817..c4086e501 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -48,6 +48,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { enigma_assert(webServer, 'ActivityPub Web Handler init without webServer'); this.log = webServer.logger().child({ webHandler: 'ActivityPub' }); + this.sysLog = SysLog.child({ webHandler: 'ActivityPub' }); Events.addListener(Events.getSystemEvents().NewUserPrePersist, eventInfo => { const { user, callback } = eventInfo; @@ -398,7 +399,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { _inboxAcceptFollowActivity(resp, activity) { // Currently Accept's to Follow's are really just a formality; // we'll log it, but that's about it for now - SysLog.info( + this.log.info( { remoteActorId: activity.actor, localActorId: _.get(activity, 'object.actor'), @@ -628,7 +629,12 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { // :TODO: log me } - SysLog.info({ stats, inboxType }, 'Inbox Delete request complete'); + this.sysLog.info( + { stats, inboxType }, + `AP: ${_.startCase(inboxType)} delete request complete (${ + stats.deleted.length + })` + ); return this.webServer.accepted(resp); } ); @@ -804,7 +810,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.internalServerError(resp, err); } - SysLog.info( + this.log.info( { username: localUser.username, userId: localUser.userId, @@ -908,13 +914,13 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.internalServerError(resp, err); } - SysLog.info( + this.sysLog.info( { inboxType, objectId: targetObjectId, objectType, }, - `${objectType} Updated` + `AP: ${_.startCase(inboxType)} '${objectType}' updated` ); // Update any assoc Message object @@ -928,9 +934,9 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { } _deliverNoteToSharedInbox(activity, note, cb) { - SysLog.info( + this.log.info( { activityId: activity.id, noteId: note.id }, - 'Delivering Note to Public/Shared inbox' + "Delivering 'Note' to Public/Shared inbox" ); Collection.addSharedInboxItem(activity, true, err => { @@ -966,7 +972,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { actorId, username: localUser.username, }, - `Delivering private Note to local Actor "${localUser.username}"` + `AP: Delivering private 'Note' to user "${localUser.username}"` ); Collection.addInboxItem(activity, localUser, false, err => { @@ -1006,14 +1012,15 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { if (_.isObject(localAddressedTo)) { localAddressedTo = localAddressedTo.username; } - this.log.info( + + this.sysLog.info( { localAddressedTo, activityId, noteId: note.id, messageId, }, - 'Note persisted as local Message' + `AP: Saved 'Note' to "${localAddressedTo}" as message ${messageId}` ); } else if (err.code === 'SQLITE_CONSTRAINT') { return cb(null); @@ -1218,7 +1225,7 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { _prepareNewUserAsActor(user, cb) { this.sysLog.info( { username: user.username, userId: user.userId }, - `Preparing ActivityPub settings for "${user.username}"` + `AP: Preparing ActivityPub settings for "${user.username}"` ); return prepareLocalUserAsActor(user, { force: false }, cb); From a5a3a63b00446526ae8f3328b5b894b9dc24e1c6 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 26 Apr 2023 19:11:38 -0600 Subject: [PATCH 208/233] Minor sys log updates --- core/servers/content/web.js | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/core/servers/content/web.js b/core/servers/content/web.js index 72bcff50d..bdb2597dd 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -1,5 +1,5 @@ // ENiGMA½ -const SysLog = require('../../logger.js').log; +const SysLogger = require('../../logger.js').log; const ServerModule = require('../../server_module.js').ServerModule; const Config = require('../../config.js').get; const { Errors } = require('../../enig_error.js'); @@ -132,14 +132,14 @@ exports.getModule = class WebServerModule extends ServerModule { try { const normalizedName = _.camelCase(module.moduleInfo.name); if (!WebHandlerModule.isEnabled(normalizedName)) { - SysLog.info( + SysLogger.info( { moduleName: normalizedName }, 'Web handler module not enabled' ); return nextModule(null); } - SysLog.info( + SysLogger.info( { moduleName: normalizedName }, 'Initializing web handler module' ); @@ -148,7 +148,7 @@ exports.getModule = class WebServerModule extends ServerModule { return nextModule(err); }); } catch (e) { - SysLog.error( + SysLogger.error( { error: e.message }, 'Exception caught loading web handler' ); @@ -170,12 +170,12 @@ exports.getModule = class WebServerModule extends ServerModule { if (this[name]) { const port = parseInt(config.contentServers.web[service].port); if (isNaN(port)) { - SysLog.error( + SysLogger.error( { port: config.contentServers.web[service].port, server: ModuleInfo.name, }, - `Invalid port (${service})` + `Invalid web port (${service})` ); return nextService( Errors.Invalid( @@ -205,16 +205,13 @@ exports.getModule = class WebServerModule extends ServerModule { route = new Route(route); if (!route.isValid()) { - SysLog.error( - { route: route }, - 'Cannot add route: missing or invalid required members' - ); + SysLogger.error({ route: route }, 'Cannot add invalid route'); return false; } const routeKey = route.getRouteKey(); if (routeKey in this.routes) { - SysLog.warn( + SysLogger.warn( { route: route, routeKey: routeKey }, 'Cannot add route: duplicate method/path combination exists' ); From d5bffb17196495c01b6b5af603df7db506dad1d9 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 26 Apr 2023 21:40:37 -0600 Subject: [PATCH 209/233] Fix up warning and update Buffer() to Buffer.from() --- core/scanner_tossers/ftn_bso.js | 3 +++ core/servers/content/web.js | 2 +- core/servers/content/web_handlers/nodeinfo2.js | 2 +- core/servers/content/web_handlers/webfinger.js | 4 ++-- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/core/scanner_tossers/ftn_bso.js b/core/scanner_tossers/ftn_bso.js index 76d204de3..ba63c1e51 100644 --- a/core/scanner_tossers/ftn_bso.js +++ b/core/scanner_tossers/ftn_bso.js @@ -1622,6 +1622,9 @@ function FTNMessageScanTossModule() { const addrString = new Address( packetHeader.destAddress ).toString(); + + importStats.otherFail += 1; + return next( new Error( `No local configuration for packet addressed to ${addrString}` diff --git a/core/servers/content/web.js b/core/servers/content/web.js index bdb2597dd..5994bb9a1 100644 --- a/core/servers/content/web.js +++ b/core/servers/content/web.js @@ -273,7 +273,7 @@ exports.getModule = class WebServerModule extends ServerModule { ok(resp, body = '', headers = { 'Content-Type': 'text/html' }) { if (body && !headers['Content-Length']) { - headers['Content-Length'] = Buffer(body).length; + headers['Content-Length'] = Buffer.from(body).length; } resp.writeHead(200, 'OK', body ? headers : null); return resp.end(body); diff --git a/core/servers/content/web_handlers/nodeinfo2.js b/core/servers/content/web_handlers/nodeinfo2.js index 741b66658..9656617ef 100644 --- a/core/servers/content/web_handlers/nodeinfo2.js +++ b/core/servers/content/web_handlers/nodeinfo2.js @@ -52,7 +52,7 @@ exports.getModule = class NodeInfo2WebHandler extends WebHandlerModule { const body = JSON.stringify(nodeInfo); const headers = { 'Content-Type': 'application/json', - 'Content-Length': Buffer(body).length, + 'Content-Length': Buffer.from(body).length, }; resp.writeHead(200, headers); diff --git a/core/servers/content/web_handlers/webfinger.js b/core/servers/content/web_handlers/webfinger.js index 319ec9685..621beb45c 100644 --- a/core/servers/content/web_handlers/webfinger.js +++ b/core/servers/content/web_handlers/webfinger.js @@ -117,7 +117,7 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { const headers = { 'Content-Type': contentType, - 'Content-Length': Buffer(body).length, + 'Content-Length': Buffer.from(body).length, }; resp.writeHead(200, headers); @@ -168,7 +168,7 @@ exports.getModule = class WebFingerWebHandler extends WebHandlerModule { const headers = { 'Content-Type': 'application/jrd+json', - 'Content-Length': Buffer(body).length, + 'Content-Length': Buffer.from(body).length, }; resp.writeHead(200, headers); From 0035ef4f397d0ab0186b8ff14b475249a6e04a23 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 24 Aug 2023 12:11:23 -0600 Subject: [PATCH 210/233] Fix HTTPS signing for POSTS --- core/http_util.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/core/http_util.js b/core/http_util.js index 7ca909668..e737da927 100644 --- a/core/http_util.js +++ b/core/http_util.js @@ -2,7 +2,8 @@ const { Errors } = require('./enig_error.js'); // deps const { isString, isObject, truncate } = require('lodash'); -const { https } = require('follow-redirects'); +const httpsNoRedirects = require('node:https'); +const { https: httpsWithRedirects } = require('follow-redirects'); const httpSignature = require('http-signature'); const crypto = require('crypto'); @@ -78,6 +79,13 @@ function _makeRequest(url, options, cb) { } }; + let https; + if (options.method === 'POST' || options.sign) { + https = httpsNoRedirects; + } else { + https = httpsWithRedirects; + } + const req = https.request(url, options, res => { let body = []; res.on('data', d => { From 4d97922933a10b8d1049ee046132119ec755d8d2 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 24 Aug 2023 12:12:09 -0600 Subject: [PATCH 211/233] Better gathering of lines; don't add extra line terms --- core/multi_line_edit_text_view.js | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/core/multi_line_edit_text_view.js b/core/multi_line_edit_text_view.js index c5a508d4e..d24ad1c3d 100644 --- a/core/multi_line_edit_text_view.js +++ b/core/multi_line_edit_text_view.js @@ -288,18 +288,20 @@ function MultiLineEditTextView(options) { this.getOutputText = function (startIndex, endIndex, eolMarker, options) { const lines = self.getTextLines(startIndex, endIndex); - let text = ''; const re = new RegExp('\\t{1,' + self.tabWidth + '}', 'g'); - lines.forEach(line => { - text += line.text.replace(re, '\t'); - - if (options.forceLineTerms || (eolMarker && line.eol)) { - text += eolMarker; - } - }); - - return text; + return lines + .map((line, lineIndex) => { + let text = line.text.replace(re, '\t'); + if ( + options.forceLineTerms || + (eolMarker && line.eol && lineIndex < lines.length - 1) + ) { + text += eolMarker; + } + return text; + }) + .join(); }; this.getContiguousText = function (startIndex, endIndex, includeEol) { From c25c6004178f7743d3ee4caaec5455b933b6147c Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 24 Aug 2023 12:12:32 -0600 Subject: [PATCH 212/233] Replys to ActivityPub should start with @someone --- core/fse.js | 206 ++++++++++++++++++++++++++-------------------- core/mail_util.js | 46 +++++++++-- 2 files changed, 154 insertions(+), 98 deletions(-) diff --git a/core/fse.js b/core/fse.js index dfff57b5b..711156ad4 100644 --- a/core/fse.js +++ b/core/fse.js @@ -21,6 +21,7 @@ const { messageInfoFromAddressedToInfo, setExternalAddressedToInfo, copyExternalAddressedToInfo, + getReplyToMessagePrefix, } = require('./mail_util.js'); const Events = require('./events.js'); const UserProps = require('./user_property.js'); @@ -28,10 +29,10 @@ const SysProps = require('./system_property.js'); const FileArea = require('./file_base_area.js'); const FileEntry = require('./file_entry.js'); const DownloadQueue = require('./download_queue.js'); +const EngiAssert = require('./enigma_assert.js'); // deps const async = require('async'); -const assert = require('assert'); const _ = require('lodash'); const moment = require('moment'); const fse = require('fs-extra'); @@ -123,7 +124,7 @@ exports.FullScreenEditorModule = this.editorMode = config.editorMode; if (config.messageAreaTag) { - // :TODO: swtich to this.config.messageAreaTag so we can follow Object.assign pattern for config/extraArgs + // :TODO: switch to this.config.messageAreaTag so we can follow Object.assign pattern for config/extraArgs this.messageAreaTag = config.messageAreaTag; } @@ -251,7 +252,7 @@ exports.FullScreenEditorModule = if (self.newQuoteBlock) { self.newQuoteBlock = false; - // :TODO: If replying to ANSI, add a blank sepration line here + // :TODO: If replying to ANSI, add a blank separation line here quoteMsgView.addText(self.getQuoteByHeader()); } @@ -480,106 +481,108 @@ exports.FullScreenEditorModule = this.message = message; this.updateLastReadId(() => { - if (this.isReady) { - this.initHeaderViewMode(); - this.initFooterViewMode(); + if (!this.isReady) { + return; + } - const bodyMessageView = this.viewControllers.body.getView( - MciViewIds.body.message - ); - let msg = this.message.message; + this.initHeaderViewMode(); + this.initFooterViewMode(); + + const bodyMessageView = this.viewControllers.body.getView( + MciViewIds.body.message + ); + let msg = this.message.message; - if (bodyMessageView && _.has(this, 'message.message')) { + if (bodyMessageView && _.has(this, 'message.message')) { + // + // We handle ANSI messages differently than standard messages -- this is required as + // we don't want to do things like word wrap ANSI, but instead, trust that it's formatted + // how the author wanted it + // + if (isAnsi(msg)) { // - // We handle ANSI messages differently than standard messages -- this is required as - // we don't want to do things like word wrap ANSI, but instead, trust that it's formatted - // how the author wanted it + // Find tearline - we want to color it differently. // - if (isAnsi(msg)) { - // - // Find tearline - we want to color it differently. - // - const tearLinePos = Message.getTearLinePosition(msg); - - if (tearLinePos > -1) { - msg = insert( - msg, - tearLinePos, - bodyMessageView.getTextSgrPrefix() - ); - } + const tearLinePos = Message.getTearLinePosition(msg); - bodyMessageView.setAnsi( - msg.replace(/\r?\n/g, '\r\n'), // messages are stored with CRLF -> LF - { - prepped: false, - forceLineTerm: true, - } + if (tearLinePos > -1) { + msg = insert( + msg, + tearLinePos, + bodyMessageView.getTextSgrPrefix() ); - } else { - msg = stripAnsiControlCodes(msg); // start clean - - const styleToArray = (style, len) => { - if (!Array.isArray(style)) { - style = [style]; - } - while (style.length < len) { - style.push(style[0]); - } - return style; - }; + } - // - // In *View* mode, if enabled, do a little prep work so we can stylize: - // - Quote indicators - // - Tear lines - // - Origins - // - if (this.menuConfig.config.quoteStyleLevel1) { - // can be a single style to cover 'XX> TEXT' or an array to cover 'XX', '>', and TEXT - // Non-standard (as for BBSes) single > TEXT, omitting space before XX, etc. are allowed - const styleL1 = styleToArray( - this.menuConfig.config.quoteStyleLevel1, - 3 - ); + bodyMessageView.setAnsi( + msg.replace(/\r?\n/g, '\r\n'), // messages are stored with CRLF -> LF + { + prepped: false, + forceLineTerm: true, + } + ); + } else { + msg = stripAnsiControlCodes(msg); // start clean - const QuoteRegex = - /^([ ]?)([!-~]{0,2})>([ ]*)([^\r\n]*\r?\n)/gm; - msg = msg.replace( - QuoteRegex, - (m, spc1, initials, spc2, text) => { - return `${spc1}${styleL1[0]}${initials}${styleL1[1]}>${spc2}${styleL1[2]}${text}${bodyMessageView.styleSGR1}`; - } - ); + const styleToArray = (style, len) => { + if (!Array.isArray(style)) { + style = [style]; } + while (style.length < len) { + style.push(style[0]); + } + return style; + }; - if (this.menuConfig.config.tearLineStyle) { - // '---' and TEXT - const style = styleToArray( - this.menuConfig.config.tearLineStyle, - 2 - ); + // + // In *View* mode, if enabled, do a little prep work so we can stylize: + // - Quote indicators + // - Tear lines + // - Origins + // + if (this.menuConfig.config.quoteStyleLevel1) { + // can be a single style to cover 'XX> TEXT' or an array to cover 'XX', '>', and TEXT + // Non-standard (as for BBSes) single > TEXT, omitting space before XX, etc. are allowed + const styleL1 = styleToArray( + this.menuConfig.config.quoteStyleLevel1, + 3 + ); - const TearLineRegex = /^--- (.+)$(?![\s\S]*^--- .+$)/m; - msg = msg.replace(TearLineRegex, (m, text) => { - return `${style[0]}--- ${style[1]}${text}${bodyMessageView.styleSGR1}`; - }); - } + const QuoteRegex = + /^([ ]?)([!-~]{0,2})>([ ]*)([^\r\n]*\r?\n)/gm; + msg = msg.replace( + QuoteRegex, + (m, spc1, initials, spc2, text) => { + return `${spc1}${styleL1[0]}${initials}${styleL1[1]}>${spc2}${styleL1[2]}${text}${bodyMessageView.styleSGR1}`; + } + ); + } - if (this.menuConfig.config.originStyle) { - const style = styleToArray( - this.menuConfig.config.originStyle, - 3 - ); + if (this.menuConfig.config.tearLineStyle) { + // '---' and TEXT + const style = styleToArray( + this.menuConfig.config.tearLineStyle, + 2 + ); - const OriginRegex = /^([ ]{1,2})\* Origin: (.+)$/m; - msg = msg.replace(OriginRegex, (m, spc, text) => { - return `${spc}${style[0]}* ${style[1]}Origin: ${style[2]}${text}${bodyMessageView.styleSGR1}`; - }); - } + const TearLineRegex = /^--- (.+)$(?![\s\S]*^--- .+$)/m; + msg = msg.replace(TearLineRegex, (m, text) => { + return `${style[0]}--- ${style[1]}${text}${bodyMessageView.styleSGR1}`; + }); + } - bodyMessageView.setText(controlCodesToAnsi(msg)); + if (this.menuConfig.config.originStyle) { + const style = styleToArray( + this.menuConfig.config.originStyle, + 3 + ); + + const OriginRegex = /^([ ]{1,2})\* Origin: (.+)$/m; + msg = msg.replace(OriginRegex, (m, spc, text) => { + return `${spc}${style[0]}* ${style[1]}Origin: ${style[2]}${text}${bodyMessageView.styleSGR1}`; + }); } + + bodyMessageView.setText(controlCodesToAnsi(msg)); } } }); @@ -849,7 +852,7 @@ exports.FullScreenEditorModule = const self = this; var art = self.menuConfig.config.art; - assert(_.isObject(art)); + EngiAssert(_.isObject(art)); async.waterfall( [ @@ -1161,7 +1164,7 @@ exports.FullScreenEditorModule = } initHeaderReplyEditMode() { - assert(_.isObject(this.replyToMessage)); + EngiAssert(_.isObject(this.replyToMessage)); this.setHeaderText(MciViewIds.header.to, this.replyToMessage.fromUserName); @@ -1177,6 +1180,20 @@ exports.FullScreenEditorModule = this.setHeaderText(MciViewIds.header.subject, newSubj); } + initBodyReplyEditMode() { + EngiAssert(_.isObject(this.replyToMessage)); + + const bodyMessageView = this.viewControllers.body.getView( + MciViewIds.body.message + ); + + const messagePrefix = getReplyToMessagePrefix( + this.replyToMessage.fromUserName + ); + + bodyMessageView.setText(messagePrefix); + } + initFooterViewMode() { this.setViewText( 'footerView', @@ -1450,11 +1467,18 @@ exports.FullScreenEditorModule = switchToBody() { const to = this.getView('header', MciViewIds.header.to).getData(); const msgInfo = messageInfoFromAddressedToInfo(getAddressedToInfo(to)); + const bodyView = this.getView('body', MciViewIds.body.message); + if (msgInfo.maxMessageLength > 0) { - const bodyView = this.getView('body', MciViewIds.body.message); bodyView.maxLength = msgInfo.maxMessageLength; } + // first pass through, init body (we may need header values set) + const bodyText = bodyView.getData(); + if (!bodyText && this.isReply()) { + this.initBodyReplyEditMode(); + } + this.viewControllers.header.setFocus(false); this.viewControllers.body.switchFocus(1); diff --git a/core/mail_util.js b/core/mail_util.js index aba0771fa..1e9525559 100644 --- a/core/mail_util.js +++ b/core/mail_util.js @@ -15,6 +15,7 @@ exports.setExternalAddressedToInfo = setExternalAddressedToInfo; exports.copyExternalAddressedToInfo = copyExternalAddressedToInfo; exports.messageInfoFromAddressedToInfo = messageInfoFromAddressedToInfo; exports.getQuotePrefixFromName = getQuotePrefixFromName; +exports.getReplyToMessagePrefix = getReplyToMessagePrefix; const EMAIL_REGEX = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[?[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}]?)|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; @@ -32,6 +33,11 @@ const EMAIL_REGEX = foo@host.com { name : 'foo', flavor : 'email', remote : 'foo@host.com' } Bar { name : 'Bar', flavor : 'email', remote : 'baz@foobar.com' } @JoeUser@some.host.com { name : 'JoeUser', flavor : 'activitypub', remote 'JoeUser@some.host.com' } + + Fields: + - name : user/display name + - flavor : remote flavor - FTN/etc. + - remote : Address in remote format, if applicable */ function getAddressedToInfo(input) { input = input.trim(); @@ -41,17 +47,26 @@ function getAddressedToInfo(input) { if (firstAtPos < 0) { let addr = Address.fromString(input); if (Address.isValidAddress(addr)) { - return { flavor: MessageConst.AddressFlavor.FTN, remote: input }; + return { + flavor: MessageConst.AddressFlavor.FTN, + remote: input, + }; } const lessThanPos = input.indexOf('<'); if (lessThanPos < 0) { - return { name: input, flavor: MessageConst.AddressFlavor.Local }; + return { + name: input, + flavor: MessageConst.AddressFlavor.Local, + }; } const greaterThanPos = input.indexOf('>'); if (greaterThanPos < lessThanPos) { - return { name: input, flavor: MessageConst.AddressFlavor.Local }; + return { + name: input, + flavor: MessageConst.AddressFlavor.Local, + }; } addr = Address.fromString(input.slice(lessThanPos + 1, greaterThanPos)); @@ -93,7 +108,10 @@ function getAddressedToInfo(input) { }; } - return { name: input, flavor: MessageConst.AddressFlavor.Local }; + return { + name: input, + flavor: MessageConst.AddressFlavor.Local, + }; } let m = input.match(EMAIL_REGEX); @@ -107,7 +125,10 @@ function getAddressedToInfo(input) { let addr = Address.fromString(input); // 5D? if (Address.isValidAddress(addr)) { - return { flavor: MessageConst.AddressFlavor.FTN, remote: addr.toString() }; + return { + flavor: MessageConst.AddressFlavor.FTN, + remote: addr.toString(), + }; } addr = Address.fromString(input.slice(firstAtPos + 1).trim()); @@ -172,6 +193,17 @@ function messageInfoFromAddressedToInfo(addressInfo) { } function getQuotePrefixFromName(name) { - const addrInfo = getAddressedToInfo(name); - return getQuotePrefix(addrInfo.name || name); + const addressInfo = getAddressedToInfo(name); + return getQuotePrefix(addressInfo.name || name); +} + +function getReplyToMessagePrefix(name) { + const addressInfo = getAddressedToInfo(name); + + // currently only ActivityPub + if (addressInfo.flavor === MessageConst.AddressFlavor.ActivityPub) { + return `@${addressInfo.name} `; + } + + return ''; } From 2f9871e005b2c6c760e5c2e289f27680e7895d04 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 24 Aug 2023 12:12:48 -0600 Subject: [PATCH 213/233] Updates --- yarn.lock | 1064 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 905 insertions(+), 159 deletions(-) diff --git a/yarn.lock b/yarn.lock index 94ed993e8..a98b71948 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,15 +15,15 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@eslint/eslintrc@^1.3.0": - version "1.3.0" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz" - integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== +"@eslint/eslintrc@^1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" + integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.3.2" - globals "^13.15.0" + espree "^9.4.0" + globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" js-yaml "^4.1.0" @@ -35,19 +35,19 @@ resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== -"@humanwhocodes/config-array@^0.10.4": - version "0.10.4" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz" - integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== +"@humanwhocodes/config-array@^0.11.8": + version "0.11.10" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" + integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" - minimatch "^3.0.4" + minimatch "^3.0.5" -"@humanwhocodes/gitignore-to-minimatch@^1.0.2": - version "1.0.2" - resolved "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz" - integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" @@ -77,14 +77,14 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@2.0.5": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3": +"@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -126,10 +126,15 @@ acorn-jsx@^5.3.2: resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.8.0: - version "8.8.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" - integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== +acorn@^8.9.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + +add@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/add/-/add-2.0.6.tgz#248f0a9f6e5a528ef2295dbeec30532130ae2235" + integrity sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q== agent-base@6, agent-base@^6.0.2: version "6.0.2" @@ -172,6 +177,18 @@ ansi-escapes@^4.2.1: dependencies: type-fest "^0.5.2" +ansi-escapes@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" + integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== + dependencies: + type-fest "^1.0.2" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + ansi-regex@^4.1.0: version "4.1.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz" @@ -182,6 +199,11 @@ ansi-regex@^5.0.0, ansi-regex@^5.0.1: resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + ansi-styles@^4.1.0: version "4.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz" @@ -190,6 +212,11 @@ ansi-styles@^4.1.0: "@types/color-name" "^1.1.1" color-convert "^2.0.1" +ansi-styles@^6.0.0, ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + anymatch@^3.1.1: version "3.1.2" resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" @@ -198,6 +225,11 @@ anymatch@^3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + "aproba@^1.0.3 || ^2.0.0": version "2.0.0" resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" @@ -219,6 +251,14 @@ are-we-there-yet@^3.0.0: delegates "^1.0.0" readable-stream "^3.6.0" +are-we-there-yet@~1.1.2: + version "1.1.7" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + argparse@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" @@ -231,28 +271,37 @@ array-union@^1.0.1: dependencies: array-uniq "^1.0.1" -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= -asn1@^0.2.4: +asn1@^0.2.4, asn1@~0.2.3: version "0.2.6" - resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + async@3.2.4: version "3.2.4" resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== +avatar-generator@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/avatar-generator/-/avatar-generator-2.0.4.tgz#01d5db33b86ff32cf274f532ab9def0aaf49921a" + integrity sha512-1XH0LAO6QwtOvv9ImVKr6O0DUtH+QX4B6ReBcfjbUPnFVZMfSgM18jkP8MDsrPxk9UmCGMddxBCxdizU7lbwrw== + dependencies: + commander "^5.1.0" + seedrandom "^3.0.5" + sharp "^0.25.2" + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" @@ -263,10 +312,10 @@ base64-js@^1.3.1: resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -bcrypt-pbkdf@^1.0.2: +bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== dependencies: tweetnacl "^0.14.3" @@ -280,9 +329,9 @@ binary-parser@2.1.0: resolved "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz" integrity sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ== -bl@^4.1.0: +bl@^4.0.3, bl@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -386,6 +435,11 @@ capture-exit@^2.0.0: dependencies: rsvp "^4.8.4" +chalk@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + chalk@^4.0.0, chalk@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" @@ -407,6 +461,11 @@ chardet@^0.7.0: resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + chownr@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" @@ -424,11 +483,26 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" +cli-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" + integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== + dependencies: + restore-cursor "^4.0.0" + cli-spinners@^2.5.0: version "2.6.1" resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + cli-width@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" @@ -439,11 +513,23 @@ clone@^1.0.2: resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== + coffee-script@^1.12.4: version "1.12.7" resolved "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz" integrity sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw== +color-convert@^1.9.3: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + color-convert@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" @@ -451,26 +537,72 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@~1.1.4: +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-string@^1.6.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + color-support@^1.1.2, color-support@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== +color@^3.1.2: + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + +colorette@^2.0.20: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +commander@11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" + integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ== + +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -console-control-strings@^1.0.0, console-control-strings@^1.1.0: +console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + cpu-features@~0.0.4: version "0.0.4" resolved "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz" @@ -479,7 +611,7 @@ cpu-features@~0.0.4: buildcheck "0.0.3" nan "^2.15.0" -cross-spawn@^7.0.0, cross-spawn@^7.0.2: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -488,7 +620,14 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" -debug@4, debug@^4.1.0, debug@^4.3.2, debug@^4.3.3: +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.3.2, debug@^4.3.3: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -502,11 +641,30 @@ debug@^4.1.1: dependencies: ms "2.1.2" +decompress-response@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" + integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== + dependencies: + mimic-response "^2.0.0" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + deep-extend@^0.5.1: version "0.5.1" resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz" integrity sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w== +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@^0.1.3: version "0.1.3" resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" @@ -554,18 +712,16 @@ depd@^1.1.2: resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + detect-libc@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - doctrine@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" @@ -580,6 +736,11 @@ dtrace-provider@~0.8: dependencies: nan "^2.10.0" +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + easy-table@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz" @@ -589,11 +750,24 @@ easy-table@^1.2.0: optionalDependencies: wcwidth "^1.0.1" +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + encoding@^0.1.12: version "0.1.13" resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" @@ -608,6 +782,13 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" +end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + env-paths@^2.2.0: version "2.2.1" resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" @@ -633,6 +814,14 @@ eslint-config-prettier@^8.5.0: resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== +eslint-plugin-json@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz#251108ba1681c332e0a442ef9513bd293619de67" + integrity sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g== + dependencies: + lodash "^4.17.21" + vscode-json-languageservice "^4.1.6" + eslint-scope@^7.1.1: version "7.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" @@ -658,14 +847,20 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@8.21.0: - version "8.21.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz" - integrity sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA== +eslint-visitor-keys@^3.4.1: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@8.31.0: + version "8.31.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.31.0.tgz#75028e77cbcff102a9feae1d718135931532d524" + integrity sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA== dependencies: - "@eslint/eslintrc" "^1.3.0" - "@humanwhocodes/config-array" "^0.10.4" - "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" + "@eslint/eslintrc" "^1.4.1" + "@humanwhocodes/config-array" "^0.11.8" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -675,21 +870,21 @@ eslint@8.21.0: eslint-scope "^7.1.1" eslint-utils "^3.0.0" eslint-visitor-keys "^3.3.0" - espree "^9.3.3" + espree "^9.4.0" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" find-up "^5.0.0" - functional-red-black-tree "^1.0.1" - glob-parent "^6.0.1" - globals "^13.15.0" - globby "^11.1.0" + glob-parent "^6.0.2" + globals "^13.19.0" grapheme-splitter "^1.0.4" ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" @@ -701,16 +896,15 @@ eslint@8.21.0: strip-ansi "^6.0.1" strip-json-comments "^3.1.0" text-table "^0.2.0" - v8-compile-cache "^2.0.3" -espree@^9.3.2, espree@^9.3.3: - version "9.3.3" - resolved "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz" - integrity sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng== +espree@^9.4.0: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: - acorn "^8.8.0" + acorn "^8.9.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.1" esquery@^1.4.0: version "1.4.0" @@ -741,6 +935,11 @@ esutils@^2.0.2: resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + exec-sh@^0.3.2: version "0.3.2" resolved "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz" @@ -751,6 +950,21 @@ exec-sh@^0.3.4: resolved "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz" integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== +execa@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" + integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^4.3.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + execa@^4.0.0: version "4.1.0" resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" @@ -771,6 +985,11 @@ exiftool@^0.0.3: resolved "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz" integrity sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + external-editor@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz" @@ -780,22 +999,21 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" @@ -862,6 +1080,16 @@ flatted@^3.1.0: resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== +follow-redirects@^1.15.2: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-extra@10.1.0: version "10.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" @@ -883,11 +1111,6 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - gauge@^3.0.0: version "3.0.2" resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" @@ -917,6 +1140,20 @@ gauge@^4.0.3: strip-ansi "^6.0.1" wide-align "^1.1.5" +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + get-stream@^5.0.0: version "5.2.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" @@ -924,16 +1161,26 @@ get-stream@^5.0.0: dependencies: pump "^3.0.0" -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== dependencies: - is-glob "^4.0.1" + assert-plus "^1.0.0" + +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -glob-parent@^6.0.1: +glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" @@ -996,25 +1243,13 @@ glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^13.15.0: - version "13.17.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" - integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== +globals@^13.19.0: + version "13.21.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571" + integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== dependencies: type-fest "^0.20.2" -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - globby@^6.1.0: version "6.1.0" resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" @@ -1051,9 +1286,9 @@ has-flag@^4.0.0: resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-unicode@^2.0.1: +has-unicode@^2.0.0, has-unicode@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== hashids@^2.2.10: @@ -1066,6 +1301,11 @@ hjson@3.2.2: resolved "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" integrity sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q== +html-entities@^2.3.3: + version "2.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" + integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== + http-cache-semantics@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" @@ -1080,6 +1320,15 @@ http-proxy-agent@^4.0.1: agent-base "6" debug "4" +http-signature@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" + integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== + dependencies: + assert-plus "^1.0.0" + jsprim "^2.0.2" + sshpk "^1.14.1" + https-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" @@ -1093,6 +1342,11 @@ human-signals@^1.1.1: resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +human-signals@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" @@ -1100,6 +1354,11 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" +husky@^8.0.0: + version "8.0.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" + integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== + iconv-lite@0.6.3, iconv-lite@^0.6.2: version "0.6.3" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" @@ -1168,9 +1427,9 @@ inherits@2, inherits@^2.0.3: resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -inherits@^2.0.4: +inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ini-config-parser@^1.0.4: @@ -1182,6 +1441,11 @@ ini-config-parser@^1.0.4: deep-extend "^0.5.1" rimraf "^2.6.1" +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + inquirer@^8.2.2: version "8.2.2" resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz" @@ -1207,16 +1471,33 @@ ip@^2.0.0: resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== + dependencies: + number-is-nan "^1.0.0" + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + is-glob@^4.0.0: version "4.0.1" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" @@ -1224,7 +1505,7 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" -is-glob@^4.0.1, is-glob@^4.0.3: +is-glob@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -1265,21 +1546,41 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + is-stream@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +js-sdsl@^4.1.4: + version "4.4.2" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" + integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== + js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" @@ -1287,16 +1588,31 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= +jsonc-parser@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + jsonfile@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz" @@ -1306,6 +1622,16 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsprim@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" + integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + levn@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" @@ -1314,6 +1640,39 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +lilconfig@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + +lint-staged@^13.1.0: + version "13.3.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.3.0.tgz#7965d72a8d6a6c932f85e9c13ccf3596782d28a5" + integrity sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ== + dependencies: + chalk "5.3.0" + commander "11.0.0" + debug "4.3.4" + execa "7.2.0" + lilconfig "2.1.0" + listr2 "6.6.1" + micromatch "4.0.5" + pidtree "0.6.0" + string-argv "0.3.2" + yaml "2.3.1" + +listr2@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-6.6.1.tgz#08b2329e7e8ba6298481464937099f4a2cd7f95d" + integrity sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg== + dependencies: + cli-truncate "^3.1.0" + colorette "^2.0.20" + eventemitter3 "^5.0.1" + log-update "^5.0.1" + rfdc "^1.3.0" + wrap-ansi "^8.1.0" + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" @@ -1344,6 +1703,17 @@ log-symbols@^4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" +log-update@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09" + integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw== + dependencies: + ansi-escapes "^5.0.0" + cli-cursor "^4.0.0" + slice-ansi "^5.0.0" + strip-ansi "^7.0.1" + wrap-ansi "^8.0.1" + lru-cache@7.13.2: version "7.13.2" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz" @@ -1397,10 +1767,13 @@ merge-stream@^2.0.0: resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +micromatch@4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" micromatch@^4.0.2: version "4.0.4" @@ -1410,14 +1783,6 @@ micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.2.3" -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - mime-db@1.52.0: version "1.52.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" @@ -1435,7 +1800,22 @@ mimic-fn@^2.1.0: resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + +mimic-response@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -1454,6 +1834,11 @@ minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +minimist@^1.2.3: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + minipass-collect@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" @@ -1508,6 +1893,11 @@ minizlib@^2.0.0, minizlib@^2.1.1: minipass "^3.0.0" yallist "^4.0.0" +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" @@ -1574,6 +1964,11 @@ nan@^2.16.0: resolved "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz" integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" @@ -1599,6 +1994,18 @@ nntp-server@3.1.0: serialize-error "^8.1.0" split2 "^4.1.0" +node-abi@^2.7.0: + version "2.30.1" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" + integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w== + dependencies: + semver "^5.4.1" + +node-addon-api@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== + node-addon-api@^4.2.0: version "4.3.0" resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz" @@ -1644,6 +2051,11 @@ nodemailer@6.7.7: resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz" integrity sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA== +noop-logger@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" + integrity sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ== + nopt@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" @@ -1663,6 +2075,23 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" +npm-run-path@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" + integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + dependencies: + path-key "^4.0.0" + +npmlog@^4.0.1, npmlog@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + npmlog@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" @@ -1683,10 +2112,15 @@ npmlog@^6.0.0: gauge "^4.0.3" set-blocking "^2.0.0" -object-assign@^4.0.1, object-assign@^4.1.1: +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" @@ -1702,6 +2136,13 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + optionator@^0.9.1: version "0.9.1" resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" @@ -1794,16 +2235,21 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-type@^4.0.0: +path-key@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pidtree@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== + pify@^2.0.0: version "2.3.0" resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" @@ -1826,15 +2272,41 @@ pinkie@^2.0.0: resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= +prebuild-install@^5.3.4: + version "5.3.6" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.6.tgz#7c225568d864c71d89d07f8796042733a3f54291" + integrity sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg== + dependencies: + detect-libc "^1.0.3" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^2.7.0" + noop-logger "^0.1.1" + npmlog "^4.0.1" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^3.0.3" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + which-pm-runs "^1.0.0" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier@2.7.1: - version "2.7.1" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== +prettier@2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" + integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== promise-inflight@^1.0.1: version "1.0.1" @@ -1872,6 +2344,38 @@ queue-microtask@^1.2.2: resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +readable-stream@^2.0.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.1.1: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" @@ -1899,6 +2403,14 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" +restore-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" + integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + retry@^0.12.0: version "0.12.0" resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" @@ -1909,6 +2421,11 @@ reusify@^1.0.4: resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + rimraf@^2.2.8, rimraf@^2.6.1: version "2.6.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" @@ -1959,9 +2476,14 @@ rxjs@^7.5.5: dependencies: tslib "^2.1.0" -safe-buffer@~5.1.0: +safe-buffer@^5.0.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-json-stringify@~1: @@ -1969,9 +2491,9 @@ safe-json-stringify@~1: resolved "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz" integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sane@5.0.1: @@ -1996,14 +2518,24 @@ sanitize-filename@^1.6.3: dependencies: truncate-utf8-bytes "^1.0.0" +seedrandom@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7" + integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg== + +semver@^5.4.1: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + semver@^6.0.0: version "6.3.1" resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.5: +semver@^7.3.2, semver@^7.3.5: version "7.5.4" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" @@ -2015,11 +2547,26 @@ serialize-error@^8.1.0: dependencies: type-fest "^0.20.2" -set-blocking@^2.0.0: +set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== +sharp@^0.25.2: + version "0.25.4" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.25.4.tgz#1a8e542144a07ab7e9316ab89de80182b827c363" + integrity sha512-umSzJJ1oBwIOfwFFt/fJ7JgCva9FvrEU2cbbm7u/3hSDZhXvkME8WE5qpaJqLIe2Har5msF5UG4CzYlEg5o3BQ== + dependencies: + color "^3.1.2" + detect-libc "^1.0.3" + node-addon-api "^3.0.0" + npmlog "^4.1.2" + prebuild-install "^5.3.4" + semver "^7.3.2" + simple-get "^4.0.0" + tar "^6.0.2" + tunnel-agent "^0.6.0" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" @@ -2042,10 +2589,43 @@ signal-exit@^3.0.7: resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.1.tgz#cc7ba77cfbe761036fbfce3d021af25fc5584d55" + integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA== + dependencies: + decompress-response "^4.2.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-get@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" smart-buffer@^4.2.0: version "4.2.0" @@ -2103,6 +2683,21 @@ ssh2@1.11.0: cpu-features "~0.0.4" nan "^2.16.0" +sshpk@^1.14.1: + version "1.17.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + ssri@^8.0.0, ssri@^8.0.1: version "8.0.1" resolved "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" @@ -2110,6 +2705,25 @@ ssri@^8.0.0, ssri@^8.0.1: dependencies: minipass "^3.1.1" +string-argv@0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== + +string-strip-html@8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/string-strip-html/-/string-strip-html-8.4.0.tgz#3baf7fc56ef566393077a6941e8ba13c91b43d0b" + integrity sha512-ajjEpk0V1G0+/RrX08I2pSj/kfsYU5wkUKWEKPQJXVQpdahZNSljiuWVqf8UgrB2E9DvFcougbl1gPwHzkuEDg== + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" @@ -2128,6 +2742,15 @@ string-width@^4.1.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^5.2.0" +string-width@^5.0.0, string-width@^5.0.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + string_decoder@^1.1.1: version "1.2.0" resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz" @@ -2135,6 +2758,20 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.1.0" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" @@ -2156,11 +2793,23 @@ strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + strip-json-comments@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz" @@ -2171,6 +2820,11 @@ strip-json-comments@^3.1.1: resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + supports-color@^7.1.0: version "7.1.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz" @@ -2183,6 +2837,27 @@ systeminformation@5.12.3: resolved "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.3.tgz" integrity sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A== +tar-fs@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: version "6.1.11" resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" @@ -2261,10 +2936,17 @@ tslib@^2.1.0: resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== -tweetnacl@^0.14.3: +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" - resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -2283,6 +2965,11 @@ type-fest@^0.5.2: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz" integrity sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw== +type-fest@^1.0.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== + unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" @@ -2319,7 +3006,7 @@ utf8-byte-length@^1.0.1: resolved "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz" integrity sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= -util-deprecate@^1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -2334,10 +3021,45 @@ uuid@8.3.2: resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-compile-cache@^2.0.3: - version "2.1.1" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz" - integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vscode-json-languageservice@^4.1.6: + version "4.2.1" + resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz#94b6f471ece193bf4a1ef37f6ab5cce86d50a8b4" + integrity sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA== + dependencies: + jsonc-parser "^3.0.0" + vscode-languageserver-textdocument "^1.0.3" + vscode-languageserver-types "^3.16.0" + vscode-nls "^5.0.0" + vscode-uri "^3.0.3" + +vscode-languageserver-textdocument@^1.0.3: + version "1.0.8" + resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz#9eae94509cbd945ea44bca8dcfe4bb0c15bb3ac0" + integrity sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q== + +vscode-languageserver-types@^3.16.0: + version "3.17.3" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz#72d05e47b73be93acb84d6e311b5786390f13f64" + integrity sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA== + +vscode-nls@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.2.0.tgz#3cb6893dd9bd695244d8a024bdf746eea665cc3f" + integrity sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng== + +vscode-uri@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.7.tgz#6d19fef387ee6b46c479e5fb00870e15e58c1eb8" + integrity sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA== walker@~1.0.5: version "1.0.7" @@ -2366,6 +3088,11 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" +which-pm-runs@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.1.0.tgz#35ccf7b1a0fce87bd8b92a478c9d045785d3bf35" + integrity sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA== + which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" @@ -2373,9 +3100,9 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -wide-align@^1.1.2, wide-align@^1.1.5: +wide-align@^1.1.0, wide-align@^1.1.2, wide-align@^1.1.5: version "1.1.5" - resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: string-width "^1.0.2 || 2 || 3 || 4" @@ -2385,21 +3112,40 @@ word-wrap@^1.2.3: resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== +wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -ws@7.4.3: - version "7.4.3" - resolved "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz" - integrity sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA== +ws@7.5.9: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== yallist@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml@2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" + integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== + +yarn@^1.22.19: + version "1.22.19" + resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.19.tgz#4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447" + integrity sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ== + yazl@^2.5.1: version "2.5.1" resolved "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz" From 28832e77f3c5600ed848d3a4fd47acf2e5992a09 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 24 Aug 2023 12:58:44 -0600 Subject: [PATCH 214/233] Add scheduledEventOptimizeDatabases() --- core/database.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/core/database.js b/core/database.js index 007773159..70efd9e2c 100644 --- a/core/database.js +++ b/core/database.js @@ -22,6 +22,7 @@ exports.loadDatabaseForMod = loadDatabaseForMod; exports.getISOTimestampString = getISOTimestampString; exports.sanitizeString = sanitizeString; exports.initializeDatabases = initializeDatabases; +exports.scheduledEventOptimizeDatabases = scheduledEventOptimizeDatabases; exports.dbs = dbs; @@ -515,3 +516,15 @@ dbs.message.run( return cb(null); }, }; + +function scheduledEventOptimizeDatabases(args, cb) { + async.forEachSeries( + Object.keys(dbs), + (db, nextDb) => { + return db.run('PRAGMA OPTIMIZE', nextDb); + }, + err => { + return cb(err); + } + ); +} From 6ea3e504e5948d38d3fe22b18c3791cfabb73e72 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 24 Aug 2023 13:07:17 -0600 Subject: [PATCH 215/233] Well, that was dumb; Join without ',' --- core/multi_line_edit_text_view.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/multi_line_edit_text_view.js b/core/multi_line_edit_text_view.js index d24ad1c3d..ecb259639 100644 --- a/core/multi_line_edit_text_view.js +++ b/core/multi_line_edit_text_view.js @@ -301,7 +301,7 @@ function MultiLineEditTextView(options) { } return text; }) - .join(); + .join(''); }; this.getContiguousText = function (startIndex, endIndex, includeEol) { From d5ab53ecad3f6eeb162f91763d1ee7607ab330a5 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Thu, 24 Aug 2023 14:18:03 -0600 Subject: [PATCH 216/233] Fix a couple MCI code display issues --- core/predefined_mci.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/predefined_mci.js b/core/predefined_mci.js index bd4d05c28..929f889f6 100644 --- a/core/predefined_mci.js +++ b/core/predefined_mci.js @@ -311,10 +311,13 @@ const PREDEFINED_MCI_GENERATORS = { return StatLog.getUserStatNumByClient( client, UserProps.NewAddressedToMessageCount - ); + ).toString(); }, NP: function userNewPrivateMailCount(client) { - return StatLog.getUserStatNumByClient(client, UserProps.NewPrivateMailCount); + return StatLog.getUserStatNumByClient( + client, + UserProps.NewPrivateMailCount + ).toString(); }, IA: function userStatusAvailableIndicator(client) { const indicators = client.currentTheme.helpers.getStatusAvailIndicators(); From 460070e61dd62f870bc855d1a477981e160ca7fa Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 26 Aug 2023 18:49:07 -0600 Subject: [PATCH 217/233] Users can now accept a follow request; Deny and remove next --- .../activitypub_social_manager.ans | Bin 2129 -> 2105 bytes art/themes/luciano_blocktronics/theme.hjson | 4 +- core/activitypub/collection.js | 30 ++- core/activitypub/follow_util.js | 57 ++++ core/activitypub/social_manager.js | 252 ++++++++++++++---- core/menu_module.js | 22 +- .../content/web_handlers/activitypub.js | 114 ++------ misc/menu_templates/activitypub.in.hjson | 2 +- 8 files changed, 333 insertions(+), 148 deletions(-) diff --git a/art/themes/luciano_blocktronics/activitypub_social_manager.ans b/art/themes/luciano_blocktronics/activitypub_social_manager.ans index 109fed08885370f7c3ce276e08a6e5c22d76b332..1c1986154c97313e0ff6d47d384db47d3dcbc148 100644 GIT binary patch delta 72 zcmV-O0Js0q5V;VLSCL*B2WM{}Vqs%zlW+zVkNB~4T@Fp;qrlh6VVvl0Q21rJC~ eGaFkmJ2N*sG&XG|NVBm9cL4-AGBwYWEC?l5Mit=z delta 119 zcmdlfa8Y1F_{0tDlLJ^-C&q|yCnx45r{+jU8=L1&tPP%c04$+slp7r23=}lTRj^W! zjyAA1Hp(r@PfyQDRY=Rv$;mI@_-X;GV2H1=bhM$hvAMO0S*|LOH~9jS3(#Qp$@`f~ SCr7hyWic``cs^N#Llpoh@g`9K diff --git a/art/themes/luciano_blocktronics/theme.hjson b/art/themes/luciano_blocktronics/theme.hjson index 910583e5a..ce31c79ee 100644 --- a/art/themes/luciano_blocktronics/theme.hjson +++ b/art/themes/luciano_blocktronics/theme.hjson @@ -1321,7 +1321,7 @@ activityPubSocialManager: { config: { selectedActorInfoFormat: "|00|15{preferredUsername} |08(|02{name}|08)\n|07following|08: {statusIndicator}\n\n|06{plainTextSummary}" - statusIndicatorEnabled: "|00|10√" + statusFollowing: "|00|10√" staticIndicatorDisabled: "|00|12X" } 0: { @@ -1339,7 +1339,7 @@ height: 15 width: 34 } - TM3: { + HM3: { focusTextStyle: first lower styleSGR1: "|00|08" } diff --git a/core/activitypub/collection.js b/core/activitypub/collection.js index 8c0a58dcd..0324b7a62 100644 --- a/core/activitypub/collection.js +++ b/core/activitypub/collection.js @@ -73,6 +73,17 @@ module.exports = class Collection extends ActivityPubObject { ); } + static followRequests(owningUser, page, cb) { + return Collection.ownedOrderedByUser( + Collections.FollowRequests, + owningUser, + true, // private + page, + null, // return full Follow Request Activity + cb + ); + } + static outbox(collectionId, page, cb) { return Collection.publicOrderedById( Collections.Outbox, @@ -97,16 +108,16 @@ module.exports = class Collection extends ActivityPubObject { ); } - static addFollowRequest(owningUser, requestingActor, ignoreDupes, cb) { - const collectionId = Endpoints.makeUserUrl(owningUser) + 'follow-requests'; + static addFollowRequest(owningUser, requestActivity, cb) { + const collectionId = Endpoints.makeUserUrl(owningUser) + '/follow-requests'; return Collection.addToCollection( Collections.FollowRequests, owningUser, collectionId, - requestingActor.id, // Actor requesting to follow owningUser - requestingActor, - true, - ignoreDupes, + requestActivity.id, + requestActivity, + true, // private + true, // ignoreDupes cb ); } @@ -549,7 +560,12 @@ module.exports = class Collection extends ActivityPubObject { return cb(err); } - entries = entries || []; + try { + entries = (entries || []).map(e => JSON.parse(e.object_json)); + } catch (e) { + Log.error(`Collection "${collectionId}" error: ${e.message}`); + } + if (mapper && entries.length > 0) { entries = entries.map(mapper); } diff --git a/core/activitypub/follow_util.js b/core/activitypub/follow_util.js index a30587401..396f772ca 100644 --- a/core/activitypub/follow_util.js +++ b/core/activitypub/follow_util.js @@ -3,9 +3,14 @@ const ActivityPubObject = require('./object'); const UserProps = require('../user_property'); const { Errors } = require('../enig_error'); const Collection = require('./collection'); +const Actor = require('./actor'); +const Activity = require('./activity'); + +const async = require('async'); exports.sendFollowRequest = sendFollowRequest; exports.sendUnfollowRequest = sendUnfollowRequest; +exports.acceptFollowRequest = acceptFollowRequest; function sendFollowRequest(fromUser, toActor, cb) { const fromActorId = fromUser.getProperty(UserProps.ActivityPubActorId); @@ -81,3 +86,55 @@ function sendUnfollowRequest(fromUser, toActor, cb) { } ); } + +function acceptFollowRequest(localUser, remoteActor, requestActivity, cb) { + async.series( + [ + callback => { + return Collection.addFollower( + localUser, + remoteActor, + true, // ignore dupes + callback + ); + }, + callback => { + Actor.fromLocalUser(localUser, (err, localActor) => { + if (err) { + return callback(err); + } + + const accept = Activity.makeAccept(localActor.id, requestActivity); + + accept.sendTo(remoteActor.inbox, localUser, (err, respBody, res) => { + if (err) { + return callback(Errors.HttpError(err.message, err.code)); + } + + if (res.statusCode !== 202 && res.statusCode !== 200) { + return callback( + Errors.HttpError( + `Unexpected HTTP status code ${res.statusCode}` + ) + ); + } + + return callback(null); + }); + }); + }, + callback => { + // remove from local requests Collection + return Collection.removeOwnedById( + Collections.FollowRequests, + localUser, + requestActivity.id, + callback + ); + }, + ], + err => { + return cb(err); + } + ); +} diff --git a/core/activitypub/social_manager.js b/core/activitypub/social_manager.js index a6be9e0e5..0fcec24ce 100644 --- a/core/activitypub/social_manager.js +++ b/core/activitypub/social_manager.js @@ -7,8 +7,13 @@ const stringFormat = require('../string_format'); const { pipeToAnsi } = require('../color_codes'); const MultiLineEditTextView = require('../multi_line_edit_text_view').MultiLineEditTextView; -const { sendFollowRequest, sendUnfollowRequest } = require('./follow_util'); +const { + sendFollowRequest, + sendUnfollowRequest, + acceptFollowRequest, +} = require('./follow_util'); const { Collections } = require('./const'); +const EnigAssert = require('../enigma_assert'); // deps const async = require('async'); @@ -42,11 +47,37 @@ exports.getModule = class activityPubSocialManager extends MenuModule { this.followingActors = []; this.followerActors = []; + this.followRequests = []; this.currentCollection = Collections.Following; + this.currentHelpText = ''; this.menuMethods = { - spaceKeyPressed: (formData, extraArgs, cb) => { - return this._toggleSelectedActorStatus(cb); + actorListKeyPressed: (formData, extraArgs, cb) => { + switch (formData.key.name) { + case 'space': + { + if (this.currentCollection === Collections.Following) { + return this._toggleFollowing(cb); + } else if ( + this.currentCollection === Collections.FollowRequests + ) { + return this._acceptFollowRequest(cb); + } + } + break; + + case 'delete': + { + if (this.currentCollection === Collections.Followers) { + return this._removeFollower(cb); + } else if ( + this.currentCollection === Collections.FollowRequests + ) { + return this._denyFollowRequest(cb); + } + } + break; + } }, listKeyPressed: (formData, extraArgs, cb) => { const actorListView = this.getView('main', MciViewIds.main.actorList); @@ -110,32 +141,7 @@ exports.getModule = class activityPubSocialManager extends MenuModule { ); }, callback => { - this._fetchActorList( - Collections.Following, - (err, followingActors) => { - if (err) { - return callback(err); - } - return this._fetchActorList( - Collections.Followers, - (err, followerActors) => { - if (err) { - return callback(err); - } - - const mapper = a => { - a.plainTextSummary = htmlToMessageBody(a.summary); - return a; - }; - - this.followingActors = followingActors.map(mapper); - this.followerActors = followerActors.map(mapper); - - return callback(null); - } - ); - } - ); + return this._populateActorLists(callback); }, callback => { const v = id => this.getView('main', id); @@ -156,11 +162,12 @@ exports.getModule = class activityPubSocialManager extends MenuModule { }); navMenuView.on('index update', index => { - if (0 === index) { - this._switchTo(Collections.Following); - } else { - this._switchTo(Collections.Followers); - } + const collectionName = [ + Collections.Following, + Collections.Followers, + Collections.FollowRequests, + ][index]; + this._switchTo(collectionName); }); return callback(null); @@ -175,11 +182,28 @@ exports.getModule = class activityPubSocialManager extends MenuModule { _switchTo(collectionName) { this.currentCollection = collectionName; const actorListView = this.getView('main', MciViewIds.main.actorList); - if (Collections.Following === collectionName) { - actorListView.setItems(this.followingActors); - } else { - actorListView.setItems(this.followerActors); + + let list; + switch (collectionName) { + case Collections.Following: + list = this.followingActors; + this.currentHelpText = + this.config.helpTextFollowing || 'SPC = Toggle Follower'; + break; + case Collections.Followers: + list = this.followerActors; + this.currentHelpText = + this.config.helpTextFollowers || 'DEL = Remove Follower'; + break; + case Collections.FollowRequests: + list = this.followRequests; + this.currentHelpText = + this.config.helpTextFollowRequests || 'SPC = Accept\r\nDEL = Deny'; + break; } + EnigAssert(list); + + actorListView.setItems(list); actorListView.redraw(); const selectedActor = this._getSelectedActorItem( @@ -193,14 +217,23 @@ exports.getModule = class activityPubSocialManager extends MenuModule { this._updateSelectedActorInfo(selectedActorInfoView, selectedActor); } else { selectedActorInfoView.setText(''); + this.updateCustomViewTextsWithFilter( + 'main', + MciViewIds.main.customRangeStart, + this._getCustomInfoFormatObject(null), + { pipeSupport: true } + ); } } _getSelectedActorItem(index) { - if (this.currentCollection === Collections.Following) { - return this.followingActors[index]; - } else { - return this.followerActors[index]; + switch (this.currentCollection) { + case Collections.Following: + return this.followingActors[index]; + case Collections.Followers: + return this.followerActors[index]; + case Collections.FollowRequests: + return this.followRequests[index]; } } @@ -231,11 +264,12 @@ exports.getModule = class activityPubSocialManager extends MenuModule { this.updateCustomViewTextsWithFilter( 'main', MciViewIds.main.customRangeStart, - this._getCustomInfoFormatObject(actorInfo) + this._getCustomInfoFormatObject(actorInfo), + { pipeSupport: true } ); } - _toggleSelectedActorStatus(cb) { + _toggleFollowing(cb) { const actorListView = this.getView('main', MciViewIds.main.actorList); const selectedActor = this._getSelectedActorItem( actorListView.getFocusItemIndex() @@ -274,6 +308,49 @@ exports.getModule = class activityPubSocialManager extends MenuModule { } } + _acceptFollowRequest(cb) { + EnigAssert(Collections.FollowRequests === this.currentCollection); + + const actorListView = this.getView('main', MciViewIds.main.actorList); + const selectedActor = this._getSelectedActorItem( + actorListView.getFocusItemIndex() + ); + + if (!selectedActor) { + return cb(null); + } + + const request = selectedActor.request; + EnigAssert(request); + + acceptFollowRequest(this.client.user, selectedActor, request, err => { + if (err) { + this.client.log.error( + { error: err.message }, + 'Failed to fully accept Follow request' + ); + } + + const followingActor = this.followRequests.splice( + actorListView.getFocusItemIndex(), + 1 + )[0]; + this.followerActors.push(followingActor); // move to followers + + this._switchTo(this.currentCollection); // redraw + + return cb(err); + }); + } + + _removeFollower(cb) { + return cb(null); + } + + _denyFollowRequest(cb) { + return cb(null); + } + _followingActorToggled(actorInfo, cb) { // Local user/Actor wants to follow or un-follow const wantsToFollow = actorInfo.status; @@ -327,6 +404,7 @@ exports.getModule = class activityPubSocialManager extends MenuModule { selectedActorStatus: actorInfo ? actorInfo.status : false, selectedActorStatusIndicator: v('statusIndicator'), text: v('name'), + helpText: this.currentHelpText, }); return formatObj; @@ -334,8 +412,90 @@ exports.getModule = class activityPubSocialManager extends MenuModule { _getStatusIndicator(enabled) { return enabled - ? this.config.statusIndicatorEnabled || '√' - : this.config.statusIndicatorDisabled || 'X'; + ? this.config.statusFollowing || '√' + : this.config.statusNotFollowing || 'X'; + } + + _populateActorLists(cb) { + async.waterfall( + [ + callback => { + return this._fetchActorList(Collections.Following, callback); + }, + (following, callback) => { + this._fetchActorList(Collections.Followers, (err, followers) => { + return callback(err, following, followers); + }); + }, + (following, followers, callback) => { + this._fetchFollowRequestActors((err, followRequests) => { + return callback(err, following, followers, followRequests); + }); + }, + (following, followers, followRequests, callback) => { + const mapper = a => { + a.plainTextSummary = htmlToMessageBody(a.summary); + return a; + }; + + this.followingActors = following.map(mapper); + this.followerActors = followers.map(mapper); + this.followRequests = followRequests.map(mapper); + + return callback(null); + }, + ], + err => { + return cb(err); + } + ); + } + + _fetchFollowRequestActors(cb) { + Collection.followRequests(this.client.user, 'all', (err, collection) => { + if (err) { + return cb(err); + } + + if (!collection.orderedItems || collection.orderedItems.length < 1) { + return cb(null, []); + } + + const statusIndicator = this._getStatusIndicator(false); + + async.mapLimit( + collection.orderedItems, + 4, + (request, nextRequest) => { + const actorId = request.actor; + Actor.fromId(actorId, (err, actor, subject) => { + if (err) { + this.client.log.warn({ actorId }, 'Failed to retrieve Actor'); + return nextRequest(null, null); + } + + // Add some of our own properties + Object.assign(actor, { + subject, + status: false, + statusIndicator, + text: actor.preferredUsername, + request, + }); + + return nextRequest(null, actor); + }); + }, + (err, actorsList) => { + if (err) { + return cb(err); + } + + actorsList = actorsList.filter(f => f); // drop nulls + return cb(null, actorsList); + } + ); + }); } _fetchActorList(collectionName, cb) { diff --git a/core/menu_module.js b/core/menu_module.js index f6520ddeb..6639ae89b 100644 --- a/core/menu_module.js +++ b/core/menu_module.js @@ -13,6 +13,7 @@ const MultiLineEditTextView = const Errors = require('../core/enig_error.js').Errors; const { getPredefinedMCIValue } = require('../core/predefined_mci.js'); const EnigAssert = require('./enigma_assert'); +const { pipeToAnsi } = require('./color_codes.js'); // deps const async = require('async'); @@ -774,10 +775,25 @@ exports.MenuModule = class MenuModule extends PluginModule { const format = config[view.key]; const text = stringFormat(format, fmtObj); - if (options.appendMultiLine && view instanceof MultiLineEditTextView) { - view.addText(text); + if (view instanceof MultiLineEditTextView) { + if (options.appendMultiLine) { + view.addText(text); + } else { + if (options.pipeSupport) { + const ansi = pipeToAnsi(text, this.client); + if (view.getData() !== ansi) { + view.setAnsi(ansi); + } else { + view.redraw(); + } + } else if (view.getData() !== text) { + view.setText(text); + } else { + view.redraw(); + } + } } else { - if (view.getData() != text) { + if (view.getData() !== text) { view.setText(text); } else { view.redraw(); diff --git a/core/servers/content/web_handlers/activitypub.js b/core/servers/content/web_handlers/activitypub.js index c4086e501..412f7a41d 100644 --- a/core/servers/content/web_handlers/activitypub.js +++ b/core/servers/content/web_handlers/activitypub.js @@ -6,6 +6,7 @@ const { getActorId, prepareLocalUserAsActor, } = require('../../../activitypub/util'); +const { acceptFollowRequest } = require('../../../activitypub/follow_util'); const SysLog = require('../../../logger').log; const { ActivityStreamMediaType, @@ -750,26 +751,36 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { return this.webServer.resourceNotFound(resp); } - // User accepts any followers automatically - const activityPubSettings = ActivityPubSettings.fromUser(localUser); - if (!activityPubSettings.manuallyApproveFollowers) { - this._recordAcceptedFollowRequest(localUser, remoteActor, activity); - return this.webServer.accepted(resp); - } - - // User manually approves requests; add them to their requests collection - Collection.addFollowRequest( - localUser, - remoteActor, - true, // ignore dupes - err => { + const addReq = () => { + // User manually approves requests; add them to their requests collection + // :FIXME: We need to store the Activity and fetch the Actor as needed later; + // when accepting a request, we send back the Activity! + Collection.addFollowRequest(localUser, activity, err => { if (err) { return this.internalServerError(resp, err); } return this.webServer.accepted(resp); + }); + }; + + // User accepts any followers automatically + const activityPubSettings = ActivityPubSettings.fromUser(localUser); + if (activityPubSettings.manuallyApproveFollowers) { + return addReq(); + } + + acceptFollowRequest(localUser, remoteActor, activity, err => { + if (err) { + this.log.warn( + { error: err.message }, + 'Failed to post Accept. Recording to requests instead.' + ); + return addReq(); } - ); + + return this.webServer.accepted(resp); + }); }); } @@ -1105,81 +1116,6 @@ exports.getModule = class ActivityPubWebHandler extends WebHandlerModule { }); } - _recordAcceptedFollowRequest(localUser, remoteActor, requestActivity) { - async.series( - [ - callback => { - return Collection.addFollower( - localUser, - remoteActor, - true, // ignore dupes - callback - ); - }, - callback => { - Actor.fromLocalUser(localUser, (err, localActor) => { - if (err) { - this.log.warn( - { inbox: remoteActor.inbox, error: err.message }, - 'Failed to load local Actor for "Accept"' - ); - return callback(err); - } - - const accept = Activity.makeAccept( - localActor.id, - requestActivity - ); - - accept.sendTo( - remoteActor.inbox, - localUser, - (err, respBody, res) => { - if (err) { - this.log.warn( - { - inbox: remoteActor.inbox, - error: err.message, - }, - 'Failed POSTing "Accept" to inbox' - ); - return callback(null); // just a warning - } - - if (res.statusCode !== 202 && res.statusCode !== 200) { - this.log.warn( - { - inbox: remoteActor.inbox, - statusCode: res.statusCode, - }, - 'Unexpected status code' - ); - return callback(null); // just a warning - } - - this.log.info( - { inbox: remoteActor.inbox }, - 'Remote server received our "Accept" successfully' - ); - - return callback(null); - } - ); - }); - }, - ], - err => { - if (err) { - // :TODO: move this request to the "Request queue" for the user to try later - this.log.error( - { error: err.message }, - 'Failed processing Follow request' - ); - } - } - ); - } - _selfAsActorHandler(localUser, localActor, req, resp) { this.log.info( { username: localUser.username }, diff --git a/misc/menu_templates/activitypub.in.hjson b/misc/menu_templates/activitypub.in.hjson index 233853415..e3107b8ea 100644 --- a/misc/menu_templates/activitypub.in.hjson +++ b/misc/menu_templates/activitypub.in.hjson @@ -209,7 +209,7 @@ MT2: {mode: "preview", acceptsFocus: false, acceptsInput: false} TM3: { focus: true - items: ["following", "followers"] + items: ["following", "followers", "pending requests"] } } actionKeys: [ From 65ea0192faba405ae2fe5c043786ddefb25096d1 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 26 Aug 2023 22:29:19 -0600 Subject: [PATCH 218/233] Reject Follow request support --- core/activitypub/activity.js | 13 +++++- core/activitypub/follow_util.js | 44 ++++++++++++++++++ core/activitypub/social_manager.js | 74 ++++++++++++++++++++++-------- 3 files changed, 110 insertions(+), 21 deletions(-) diff --git a/core/activitypub/activity.js b/core/activitypub/activity.js index c45ab10e8..5464b91c3 100644 --- a/core/activitypub/activity.js +++ b/core/activitypub/activity.js @@ -27,12 +27,21 @@ module.exports = class Activity extends ActivityPubObject { } // https://www.w3.org/TR/activitypub/#accept-activity-inbox - static makeAccept(localActor, followRequest) { + static makeAccept(localActor, activity) { return new Activity({ id: Activity.activityObjectId(), type: WellKnownActivity.Accept, actor: localActor, - object: followRequest, // previous request Activity + object: activity, // previous request Activity + }); + } + + static makeReject(localActor, activity) { + return new Activity({ + id: Activity.activityObjectId(), + type: WellKnownActivity.Reject, + actor: localActor.id, + object: activity, }); } diff --git a/core/activitypub/follow_util.js b/core/activitypub/follow_util.js index 396f772ca..0f0bd78ee 100644 --- a/core/activitypub/follow_util.js +++ b/core/activitypub/follow_util.js @@ -11,6 +11,7 @@ const async = require('async'); exports.sendFollowRequest = sendFollowRequest; exports.sendUnfollowRequest = sendUnfollowRequest; exports.acceptFollowRequest = acceptFollowRequest; +exports.rejectFollowRequest = rejectFollowRequest; function sendFollowRequest(fromUser, toActor, cb) { const fromActorId = fromUser.getProperty(UserProps.ActivityPubActorId); @@ -138,3 +139,46 @@ function acceptFollowRequest(localUser, remoteActor, requestActivity, cb) { } ); } + +function rejectFollowRequest(localUser, requestActor, requestActivity, cb) { + async.series( + [ + callback => { + Actor.fromLocalUser(localUser, (err, localActor) => { + if (err) { + return callback(err); + } + + const reject = Activity.makeReject(localActor, localActor); + reject.sendTo(requestActor.inbox, localUser, (err, respBody, res) => { + if (err) { + return callback(Errors.HttpError(err.message, err.code)); + } + + if (res.statusCode !== 202 && res.statusCode !== 200) { + return callback( + Errors.HttpError( + `Unexpected HTTP status code ${res.statusCode}` + ) + ); + } + + return callback(null); + }); + }); + }, + callback => { + // remove from local requests Collection + return Collection.removeOwnedById( + Collections.FollowRequests, + localUser, + requestActivity.id, + callback + ); + }, + ], + err => { + return cb(err); + } + ); +} diff --git a/core/activitypub/social_manager.js b/core/activitypub/social_manager.js index 0fcec24ce..d842a1df1 100644 --- a/core/activitypub/social_manager.js +++ b/core/activitypub/social_manager.js @@ -11,6 +11,7 @@ const { sendFollowRequest, sendUnfollowRequest, acceptFollowRequest, + rejectFollowRequest, } = require('./follow_util'); const { Collections } = require('./const'); const EnigAssert = require('../enigma_assert'); @@ -53,14 +54,14 @@ exports.getModule = class activityPubSocialManager extends MenuModule { this.menuMethods = { actorListKeyPressed: (formData, extraArgs, cb) => { + const collection = this.currentCollection; switch (formData.key.name) { case 'space': { - if (this.currentCollection === Collections.Following) { + if (collection === Collections.Following) { return this._toggleFollowing(cb); - } else if ( - this.currentCollection === Collections.FollowRequests - ) { + } + if (collection === Collections.FollowRequests) { return this._acceptFollowRequest(cb); } } @@ -68,16 +69,18 @@ exports.getModule = class activityPubSocialManager extends MenuModule { case 'delete': { - if (this.currentCollection === Collections.Followers) { + if (collection === Collections.Followers) { return this._removeFollower(cb); - } else if ( - this.currentCollection === Collections.FollowRequests - ) { - return this._denyFollowRequest(cb); + } + + if (collection === Collections.FollowRequests) { + return this._rejectFollowRequest(cb); } } break; } + + return cb(null); }, listKeyPressed: (formData, extraArgs, cb) => { const actorListView = this.getView('main', MciViewIds.main.actorList); @@ -308,6 +311,19 @@ exports.getModule = class activityPubSocialManager extends MenuModule { } } + _removeSelectedFollowRequest(actorListView, moveToFollowers) { + const followingActor = this.followRequests.splice( + actorListView.getFocusItemIndex(), + 1 + )[0]; + + if (moveToFollowers) { + this.followerActors.push(followingActor); + } + + this._switchTo(this.currentCollection); // redraw + } + _acceptFollowRequest(cb) { EnigAssert(Collections.FollowRequests === this.currentCollection); @@ -327,28 +343,48 @@ exports.getModule = class activityPubSocialManager extends MenuModule { if (err) { this.client.log.error( { error: err.message }, - 'Failed to fully accept Follow request' + 'Error Accepting Follow request' ); } - const followingActor = this.followRequests.splice( - actorListView.getFocusItemIndex(), - 1 - )[0]; - this.followerActors.push(followingActor); // move to followers - - this._switchTo(this.currentCollection); // redraw + this._removeSelectedFollowRequest(actorListView, true); // true=move to followers return cb(err); }); } _removeFollower(cb) { + // :TODO: Send a Undo return cb(null); } - _denyFollowRequest(cb) { - return cb(null); + _rejectFollowRequest(cb) { + EnigAssert(Collections.FollowRequests === this.currentCollection); + + const actorListView = this.getView('main', MciViewIds.main.actorList); + const selectedActor = this._getSelectedActorItem( + actorListView.getFocusItemIndex() + ); + + if (!selectedActor) { + return cb(null); + } + + const request = selectedActor.request; + EnigAssert(request); + + rejectFollowRequest(this.client.user, selectedActor, request, err => { + if (err) { + this.client.log.error( + { error: err.message }, + 'Error Rejecting Follow request' + ); + } + + this._removeSelectedFollowRequest(actorListView, false); // false=do not move to followers + + return cb(err); + }); } _followingActorToggled(actorInfo, cb) { From fcd961c854a6517fcc71168a28f2ef27bc584e4f Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 27 Aug 2023 10:47:42 -0600 Subject: [PATCH 219/233] Cleanup --- art/themes/luciano_blocktronics/theme.hjson | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/art/themes/luciano_blocktronics/theme.hjson b/art/themes/luciano_blocktronics/theme.hjson index ce31c79ee..02c1d84f5 100644 --- a/art/themes/luciano_blocktronics/theme.hjson +++ b/art/themes/luciano_blocktronics/theme.hjson @@ -1322,7 +1322,11 @@ config: { selectedActorInfoFormat: "|00|15{preferredUsername} |08(|02{name}|08)\n|07following|08: {statusIndicator}\n\n|06{plainTextSummary}" statusFollowing: "|00|10√" - staticIndicatorDisabled: "|00|12X" + statusNotFollowing: "|00|12X" + helpTextFollowing: "|00|10SPC |08: |02Toggle Following" + helpTextFollowers: "|00|10DEL |08: |02Remove Follower" + helpTextFollowRequests: "|00|10SPC |08: |02Accept\r\n|10DEL |08: |02Deny" + mainInfoFormat10: "{helpText}" } 0: { mci: { @@ -1331,8 +1335,8 @@ width: 35 itemFormat: "|00|03{subject}|00 {statusIndicator}" focusItemFormat: "|00|19|15{subject!styleUpper}|00 {statusIndicator}" - itemFormat: "|00{statusIndicator} |00|03{subject}" - focusItemFormat: "|00{statusIndicator} |00|19|15{subject}" + itemFormat: "|00|08{statusIndicator} |00|03{subject}" + focusItemFormat: "|00|08{statusIndicator} |00|19|15{subject}" textOverflow: "..." } MT2: { @@ -1343,6 +1347,10 @@ focusTextStyle: first lower styleSGR1: "|00|08" } + MT10: { + width: 22 + height: 2 + } } } } From bdb76055660055802dfdb3039b89b30f324eae0e Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 29 Dec 2023 18:20:52 -0700 Subject: [PATCH 220/233] Local copy of any-ascii until they support CJS --- core/anyascii/any-ascii.js | 30 + core/anyascii/block.js | 1207 ++++++++++++++++++++++++++++++++++++ 2 files changed, 1237 insertions(+) create mode 100644 core/anyascii/any-ascii.js create mode 100644 core/anyascii/block.js diff --git a/core/anyascii/any-ascii.js b/core/anyascii/any-ascii.js new file mode 100644 index 000000000..2e056fd74 --- /dev/null +++ b/core/anyascii/any-ascii.js @@ -0,0 +1,30 @@ +const block = require('./block.js'); + +const blocks = {}; + +/** + * Transliterates a Unicode string into ASCII. + * + * @param {string} string + * @return {string} + */ +module.exports = function anyAscii(string) { + let result = ''; + for (const c of string) { + const codePoint = c.codePointAt(0); + if (codePoint <= 0x7f) { + result += c; + continue; + } + const blockNum = codePoint >>> 8; + const lo = codePoint & 0xff; + let b = blocks[blockNum]; + if (b === undefined) { + blocks[blockNum] = b = block(blockNum).split('\t'); + } + if (b.length > lo) { + result += b[lo]; + } + } + return result; +}; diff --git a/core/anyascii/block.js b/core/anyascii/block.js new file mode 100644 index 000000000..503714ddf --- /dev/null +++ b/core/anyascii/block.js @@ -0,0 +1,1207 @@ +module.exports = function block(blockNum) { + switch (blockNum) { + case 0: + return ' ! c L $ Y | S " (C) a << ! (R) - deg +- 2 3 \' u P - , 1 o >> 1/4 1/2 3/4 ? A A A A A A Ae C E E E E I I I I D N O O O O O * O U U U U Y Th ss a a a a a a ae c e e e e i i i i d n o o o o o / o u u u u y th y'; + case 1: + return "A a A a A a C c C c C c C c D d D d E e E e E e E e E e G g G g G g G g H h H h I i I i I i I i I i IJ ij J j K k q L l L l L l L l L l N n N n N n 'n Ng ng O o O o O o Oe oe R r R r R r S s S s S s S s T t T t T t U u U u U u U u U u U u W w Y y Y Z z Z z Z z s b B B b 6 6 O C c D D D d z E E E F f G G hw I I K k l l W N n O O o Gh gh P p R 2 2 Sh sh t T t T U u U V Y y Z z Zh ` ` zh dz 5 5 ts w c x qc q DZ Dz dz LJ Lj lj NJ Nj nj A a I i O o U u U u U u U u U u e A a A a Ae ae G g G g K k O o O o Zh zh j DZ Dz dz G g Hw W N n A a Ae ae O o"; + case 2: + return "A a A a E e E e I i I i O o O o R r R r U u U u S s T t Y y H h N d Ou ou Z z A a E e O o O o O o O o Y y l n t j db qp A C c L T s z ' ' B U A E e J j Q q R r Y y a a a b o c d d e e er e e er o j g g g g u y h h i i i l l l lzh w w m n n n o oe u f r r r r r r i r r s sh j i sh t t u u v a w y y z z zh zh ' ` x q pc b oe g h j k l q ' ` dz dzh dz ts tsh tc fng ls lz ww ]] y y h h j r r r r w y ' '' ` ' ` ' ` ' ` < > ^ v ^ ^ ' - ' ` , _ ` ' : - ' ` + + + - ^ . . , ~ \" r x g l s x ` 5 4 3 2 1 3 7 _ = '' v ^ < > . ` `` '' ~ : ' ' , , _ _ <"; + case 3: + return " a e i o u c d h m r t v x H h S s ' , W w i s s. s. ; J ' \"' A ; E I I O Y O i A V G D E Z I Th I K L M N X O P R S T Y F Ch Ps O I Y a e i i y a v g d e z i th i k l m n x o p r s s t y f ch ps o i y o y o & b th Y Y Y ph p & Q q St st W w Q q S s Sh sh F f X x H h J j C c Ti ti k r s j Th e e Sh sh S S s r. S S. S."; + case 4: + return "E E Dj G Ie Dz I I J Lj Nj C K I U Dzh A B V G D E Zh Z I Y K L M N O P R S T U F Kh Ts Ch Sh Shch ' Y ' E Yu Ya a b v g d e zh z i y k l m n o p r s t u f kh ts ch sh shch ' y ' e yu ya e e dj g ie dz i i j lj nj c k i u dzh O o E e Ie ie E e Ie ie O o Io io Ks ks Ps ps F f Y y Y y U u O o O o Ot ot Q q 1000 . . 100000 1000000 Jh jh ' ' Rh rh G g Gh gh Gh gh J j Z z Q q G g Q q Q q Ng ng Ng ng Ph ph W w S s Th th U u U u H h Ts ts J j C c H h Ch ch Ch ch H Gi gi Q q Lh lh Ng ng Nh nh Dzh dzh Mh mh h A a A a Ae ae E e A a E e Dzh dzh J j Dz dz I i I i O o O o Y y A a U u U u U u Tsh tsh Gh gh Y y Xh xh X x H h"; + case 5: + return "D d Dj dj Zj zj Dz dz Lj lj Nj nj Sj sj Tj tj A a L l Lkh lkh Rkh rkh A a Q q W w Q q L l N n Ph ph ' ' Ny ny Dzh dzh Dch dch L l A B G D E Z E Y T' Zh I L Kh Ts K H Dz Gh Ch M Y N Sh O Ch' P J Rr S V T R Ts' W P' K' O F ` ' * ! , ? . a a b g d e z e y t' zh i l kh ts k h dz gh ch m y n sh o ch' p j rr s v t r ts' w p' k' o f ev h . - * * Dram e e a o i e e a a o o u - | h . ` ` ^ o ' v g d h v z h t y kh kh l m m n n s ' f f ts ts k r s t YYY v oy ey ' \""; + case 6: + return "# sn. ^ # sm. # cbrt 4rt r %0 %00 Af , / ^ * i ; . . ? y ' a ' u' ' i' b h t th j h kh d dh r z s sh s d t dh ` gh g g y i i f q k l m n h w a y a u i a ' ' i e e o e e o a u' 0 1 2 3 4 5 6 7 8 9 % . , * b q a ' a u' e a o u i t th b t t p th bh dz dz n j ts ch ch d d d dd dh dh dh d d r r r r r zh d zh r sh s ch ts ch th ng f f p v v ph q g k k g g ng kp g gg n g g g l l l l n n n n ny h n e h h h o o o u u u u v y ey e v e ny e e' . e # # ^ d r 0 1 2 3 4 5 6 7 8 9 s l n & m. h"; + case 7: + return "* . . ! ! : : : ; ? . / \\ + . ' ' b g j d d h w z h t d y yh k l m n s s ` p p s q r sh t bh gh dh a a a o u a e e i e i i i u u o h h h zh kh ph 'y p p c ny p c ng c dd d r s ng ng g p v g g k b mb n n n sl r z s j c s z j a aa i ii y o oo e ee ch s s g h sh n r b lh k v m f dh th l g gn s d z t y p j ch th' h' kh dh' x sh' s' l' t' z' ' gh q w a aa i ee u oo e ey o oa n 0 1 2 3 4 5 6 7 8 9 a e i e u o o n b p t j c d r rr s gb f k l n m ny n h w y ny j c r n ' ` o * , ! - . D T"; + case 8: + return "' b g d h w z h t y k l m n s ` f s q r sh t ` ` y y e e a a a a a a a a u u i i i o ; : .. <. <: ? . -< -. -: =: |: / . ... a b g d h u z h t i k l m n s ` p s q r sh t d kd ` ' , n j n t n n bh r l l s ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' u y y . . nj c th th g . LE pt a a b b c t vb gb zl mv y ny r w y dz ts kh u z n k q mb mp tt nr ny f q n ph th th ch kh gy ky n n l gr # e o ou e on oun en a u i u e a i o u e e un on o o"; + case 9: + return "m m m h a a a i i u u r l e e e ai o o o au k kh g gh n c ch j jh n t th d dh n t th d dh n n p ph b bh m y r r l l l v s s s h o o ' ' a i i u u r r e e e ai o o o au e a Om e u u q kh g z r rh f y r l l l , . 0 1 2 3 4 5 6 7 8 9 . ' a o o a u u d zh y g j ' d b * m m h a a i i u u r l e ai o au k kh g gh n c ch j jh n t th d dh n t th d dh n p ph b bh m y r l s s s h ' ' a i i u u r r e ai o au t u r rh y r l l l 0 1 2 3 4 5 6 7 8 9 r v Rs Rs 1 2 3 1 3 / ^ g m . '"; + case 10: + return " m m h a a i i u u e ai o au k kh g gh n c ch j jh n t th d dh n t th d dh n p ph b bh m y r l l v s s h ' a i i u u e ai o au kh g z r ph 0 1 2 3 4 5 6 7 8 9 m ' * y . m m h a a i i u u r l e e ai o o au k kh g gh n c ch j jh n t th d dh n t th d dh n p ph b bh m y r l l v s s s h ' ' a i i u u r r e e ai o o au Om r l l l 0 1 2 3 4 5 6 7 8 9 . Rs zh ' ' '"; + case 11: + return " m m h a a i i u u r l e ai o au k kh g gh n c ch j jh n t th d dh n t th d dh n p ph b bh m y r l l v s s s h ' ' a i i u u r r e ai o au i u r rh y r l l l 0 1 2 3 4 5 6 7 8 9 ^ w 1 2 3 1 2 3 m k a a i i u u e e ai o o au k n c j n t n t n n p m y r r l l l v s s s h a i i u u e e ai o o au Om u 0 1 2 3 4 5 6 7 8 9 10 100 1000 N M V - + - Rs #"; + case 12: + return "m n m h m a a i i u u r l e e ai o o au k kh g gh n c ch j jh n t th d dh n t th d dh n p ph b bh m y r r l l l v s s s h ' ' a i i u u r r e e ai o o au ' i c z r n r l l l 0 1 2 3 4 5 6 7 8 9 * 0 1 2 3 1 2 3 t m m m h * a a i i u u r l e e ai o o au k kh g gh n c ch j jh n t th d dh n t th d dh n p ph b bh m y r r l l v s s s h ' ' a i i u u r r e e ai o o au ' i n l r l l l 0 1 2 3 4 5 6 7 8 9 h h m"; + case 13: + return "m m m h m a a i i u u r l e e ai o o au k kh g gh n c ch j jh n t th d dh n t th d dh n n p ph b bh m y r r l l l v s s s h t ' a i i u u r r e e ai o o au r p m y l u 2 4 12 16 32 48 64 i r l l l 0 1 2 3 4 5 6 7 8 9 10 100 1000 80 160 240 20 40 60 d n n r l l k m m h a a ae ae i i u u r r l l e e ai o o au k kh g gh n ng c ch j jh n jn nj t th d dh n nd t th d dh n nd p ph b bh m mb y r l v s s s h l f a ae ae i i u u r e e ai o o au u 0 1 2 3 4 5 6 7 8 9 r l ~"; + case 14: + return ' k kh kh kh kh kh ng ch ch ch s ch y d t th th th n d t th th th n b p ph f ph f ph m y r rue l lue w s s s h l o h . a a a am i i ue ue u u B e ae o ai ai - m * 0 1 2 3 4 5 6 7 8 9 # @ k kh kh gh ng ch ch x jh gn n t th d dh n d t th th dh n b p ph f ph f bh m y r l v s s s h l h ... a a a am i i u u ou ou o l y e e o ai ai - o 0 1 2 3 4 5 6 7 8 9 n m g gn'; + case 15: + return "Om @ @ @ @ # $ % ! * * - - , . ; | | / * : * * * o oo ooo x xx ox 0 1 2 3 4 5 6 7 8 9 1- 2- 3- 4- 5- 6- 7- 8- 9- 0- = ^ * < > ( ) k kh g gh ng c ch j ny t th d dh n t th d dh n p ph b bh m ts tsh dz dzh w zh z ' y r l sh s s h ks r q r i i u u r r l l e ai o au m h i i m m ` h h h h h h k kh g gh ng c ch j ny t th d dh n t th d dh n p ph b bh m ts tsh dz dzh w zh z ' y r l sh s s h ks w y r * * * * * * * * * * * * * * xo xxx * * : @ # + + + + ~ ~"; + case 16: + return "k kh g gh n c ch j jh n nn t th d dh n t th d dh n p ph b bh m y r l v s h l ' ' i i u u e e o o a a i i u u e ai i ao e m y r v h ss 0 1 2 3 4 5 6 7 8 9 , . n* r* l* e* s s r r l l r r l l n jh b b n m l sh o s pw o u n yw ghw i o u e k kh g c z n d n ph f b x h v a e e ai f 0 1 2 3 4 5 6 7 8 9 a ai 1 ! A B G D E V Z T I K' L M N O P' Zh R S T' U P K Gh Q' Sh Ch Ts Dz Ts' Ch' Kh J H E Y W X O E Ae a b g d e v z t i k' l m n o p' zh r s t' u p k gh q' sh ch ts dz ts' ch' kh j h e y w x o f e ` g ` * n ae ` w"; + case 17: + return 'g kk n d tt l m b pp s ss j jj ch k t p h ng nn nd nb dg ln ll lh lh mb mh bg bn bd bs bsg bsd bsb bss bsj bj bch bt bp v pph sg sn sd sl sm sb sbg sss s sj sch sk st sp sh s ss s ss z g d m b s z j ch t p ng j j jj j jj chk chh ch ch pb f hh q gd ns nj nh dl a ae ya yae eo e yeo ye o wa wae oe yo u wo we wi yu eu ui i ao au yao yayo eoo eou eoeu yeoo yeou oeo oe oye oo ou yoya yoyae yoyeo yoo yoi ua uae ueoeu uye uu yua yueo yue yuyeo yuye yuu yui euu eueu uiu ia iya io iu ieu io o oeo ou oi yo aeu yau yeoya oya oyae g kk gs n nj nh d l lg lm lb ls lt lp lh m b bs s ss ng j ch k t p h gl gsg ng nd ns nz nt dg dl lgs ln ld ldh ll lmg lms lbs lbh lv lss lz lk lq mg ml mb ms mss mz mch mh mh bl bp bh v sg sd sl sb z ngg ngkk ngng ngk ng ngs ngz pb f hn hl hm hb q gn gb gch gk gh nn'; + case 18: + return "he hu hi ha hie h ho hoa le lu li la lie l lo lwa he hu hi ha hie h ho hwa me mu mi ma mie m mo mwa se su si sa sie s so swa re ru ri ra rie r ro rwa se su si sa sie s so swa she shu shi sha shie sh sho shwa k'e k'u k'i k'a k'ie k' k'o k'oa k'we k'wi k'wa k'wie k'wi kh'e kh'u kh'i kh'a kh'ie kh' kh'o kh'we kh'wi kh'wa kh'wie kh'wi be bu bi ba bie b bo bwa ve vu vi va vie v vo vwa te tu ti ta tie t to twa che chu chi cha chie ch cho chwa he hu hi ha hie h ho hoa hwe hwi hwa hwie hwi ne nu ni na nie n no nwa nye nyu nyi nya nyie ny nyo nywa 'e 'u 'i 'a 'ie ' 'o 'wa ke ku ki ka kie k ko koa kwe kwi kwa kwie kwi khe khu khi kha khie kh kho khwe khwi khwa khwie khwi we wu wi wa wie w wo woa `e `u `i `a `ie ` `o ze zu zi za zie z zo zwa zhe zhu zhi zha zhie zh zho zhwa ye yu yi ya yie y yo yoa de du di da die d do dwa d'e d'u d'i d'a d'ie d' d'o d'wa"; + case 19: + return "je ju ji ja jie j jo jwa ge gu gi ga gie g go goa gwe gwi gwa gwie gwi nge ngu ngi nga ngie ng ngo ngwa t'e t'u t'i t'a t'ie t' t'o t'wa ch'e ch'u ch'i ch'a ch'ie ch' ch'o ch'wa p'e p'u p'i p'a p'ie p' p'o p'wa ts'e ts'u ts'i ts'a ts'ie ts' ts'o ts'wa ts'e ts'u ts'i ts'a ts'ie ts' ts'o ts'oa fe fu fi fa fie f fo fwa pe pu pi pa pie p po pwa rya mya fya + . , ; , : ? # 1 2 3 4 5 6 7 8 9 10 20 30 40 50 60 70 80 90 100 10000 mwe mwi mwie mwi bwe bwi bwie bwi fwe fwi fwie fwi pwe pwi pwie pwi A E I O U V Ga Ka Ge Gi Go Gu Gv Ha He Hi Ho Hu Hv La Le Li Lo Lu Lv Ma Me Mi Mo Mu Na Hna Nah Ne Ni No Nu Nv Qua Que Qui Quo Quu Quv Sa S Se Si So Su Sv Da Ta De Te Di Ti Do Du Dv Dla Tla Tle Tli Tlo Tlu Tlv Tsa Tse Tsi Tso Tsu Tsv Wa We Wi Wo Wu Wv Ya Ye Yi Yo Yu Yv Mv ye yi yo yu yv mv"; + case 20: + return "- e iy i ii o oo oo e i a aa we we wi wi wii wii wo wo woo woo wo wa wa waa waa wa ai w ' t k sh s n w ' h w c n l e i o a pe piy pi pii po poo poo he hi pa paa pwe pwe pwi pwi pwii pwii pwo pwo pwoo pwoo pwa pwa pwaa pwaa pwa p p h te tiy ti tii to too too de di ta taa twe twe twi twi twii twii two two twoo twoo twa twa twaa twaa twa t t'e t'i t'o t'a ke kiy ki kii ko koo koo ka kaa kwe kwe kwi kwi kwii kwii kwo kwo kwoo kwoo kwa kwa kwaa kwaa kwa k kw k'e k'i k'o k'a ce ciy ci cii co coo coo ca caa cwe cwe cwi cwi cwii cwii cwo cwo cwoo cwoo cwa cwa cwaa cwaa cwa c c me miy mi mii mo moo moo ma maa mwe mwe mwi mwi mwii mwii mwo mwo mwoo mwoo mwa mwa mwaa mwaa mwa m m mw m m ne niy ni nii no noo noo na naa nwe nwe nwa nwa nwaa nwaa nwa n ng nw le liy li lii lo loo loo la laa lwe lwe lwi lwi lwii lwii lwo lwo lwoo lwoo lwa lwa lwaa lwaa l l l se siy si sii so soo soo sa saa swe swe swi swi swii swii swo swo swoo swoo"; + case 21: + return "swa swa swaa swaa swa s s sw s sk skw sw spwa stwa skwa scwa she shi shii sho shoo sha shaa shwe shwe shwi shwi shwii shwii shwo shwo shwoo shwoo shwa shwa shwaa shwaa sh ye yiy yi yii yo yoo yoo ya yaa ywe ywe ywi ywi ywii ywii ywo ywo ywoo ywoo ywa ywa ywaa ywaa ywa y y y yi re re li riy ri rii ro roo lo ra raa la rwaa rwaa r r r fe fiy fi fii fo foo fa faa fwaa fwaa f the the thi thi thii thii tho thoo tha thaa thwaa thwaa th tthe tthi ttho ttha ** te ti to ta hai hi hii hu huu ha haa h h hk qiy qi qii qu quu qa qaa q tle tli tlo tla re ri ro ra ngiy ngi ngii ngu nguu nga ngaa ng nng she shi sho sha the thi tho tha th hli hlii hlu hluu hla hlaa hl the thi thii tho thoo tha thaa th b e i o a we wi wo wa ne ni no na ke ki ko ka ge gi go ga khoo kho khu khe khi kha ghoo gho ghu ghe ghi gha woo wo wu we wi wa whoo who whu whe whi wha too to tu te ti ta t'oo t'o t'u t'e t'i t'a poo po pu pe pi pa p goo go gu ge gi ga koo ko ku ke ki ka k'oo k'o k'u k'e k'i"; + case 22: + return "k'a k' noo no nu ne ni na moo mo mu me mi ma yoo yo yu ye yi ya joo jo jo ju je ji ji ja ch'oo ch'o ch'u ch'e ch'i ch'a loo lo lu le li la dloo dlo dlu dle dli dla lhoo lho lhu lhe lhi lha tloo tlo tlu tle tli tla tl'oo tl'o tl'u tl'e tl'i tl'a zoo zo zu ze zi za z z dzoo dzo dzu dze dzi dza soo so su se si sa shoo sho shu she shi sha sh choo cho chu che chi cha tsoo tso tsu tse tsi tsa ts'oo ts'o ts'u ts'e ts'i ts'a X . qai ngai nngi nngii nngu nnguu nnga nngaa thwe thwi thwii thwo thwoo thwa thwaa th w b l f s n h d t c q m g ng z r a o u e i ea oi ui ia ae p > < f v u y y w th dh a o a ae a a o o o r k c k g ng g g w h h h h n n n i e j j a a i p z s s s c z t t d b b p p e m m m l l ng ng d o ea io q k k st r r y q x . : + 17 18 19 k sh oo o i e a ae"; + case 23: + return "a i u k g ng t d n p b m y r l w s h i u r a i u k g ng t d n p b m y r l w s h i u , . a i u k g ng t d n p b m y r l w s h i u a i u k g ng t d n p b m y l w s i u k kh k kh ng ch chh ch chh nh d th d th n t th t th n b ph p ph m y r l v s s s h l ' ' 'a e ei o o ou au rue rueu lue lueu ae ai ao ao ov a e ei oe eu o ou uo aeu oea ie e ae ai ao au am ah ak a r ! a . # : - -Lo- * @ CR ' 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9"; + case 24: + return "@ ... , . : * - - , . - 0 1 2 3 4 5 6 7 8 9 a e i o u o u e n ng b p h g m l s x t d q j y r w f k k c z h r lh zh ch e i o u o u ng b p h g m t d q j c y v k g h j ny z e i y u u ng k g h p x t d j f g h c z r ch zh i k r f zh x m h h h h 3 9 a i k ng ts t th d n t d p ph s zh z ' t zh gh ng ts dzh t dh t dh s c zh z w y bh lh oy ay aay way poy pay pwoy tay kay kway may noy nay lay soy say shoy shay shwoy yoy yay ray nwi nwi nwii nwii nwo nwo nwoo nwoo rwe rwi rwii rwo rwoo rwa p t k c m n s sh w w y ' rwe loo laa thwe thwa tthwe tthoo tthaa tlwe tloo shwe shoo goo gwo goo gaa gwa joo jwe l r s"; + case 25: + return " k kh g gh n c ch j jh n t th d dh n p ph b bh m y r l v s s s h jn tr a i u e ai o au e o y r v k n m t n p m r l h ' lo ! ? 0 1 2 3 4 5 6 7 8 9 g h ng z s y d t l b p m f w hh ' k c n aa i e ae u o oa ue oe aue ai g k ng g k ng z s y z s y d t n d t n b p m b p m f w l f w l h dd bb h dd bb gw kw gw kw sw sw ' aa i u u e ae o oa ue ai aai ui oi oai uei ii w ng n m k t p 0 1 2 3 4 5 6 7 8 9 1 lae laew 08 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 88 .1 .2 .3 .4 .5 .6 .7 .8 .9 .10 .11 .12 .13 .14 .15"; + case 26: + return 'k g ng ngk p b m mp t d n nr c j ny nc y r l w s h i u e o e \\ * k kh kh k kh kh ng ch s ch s s ny t th d th n t th t th n b p ph f p f ph m ny y h lue l lue w s s s h l h i i u u e o lae th r l lng ng ng p th m b s a a a a i i ue ue u u o o oy e ae o ai ai o m - . 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 w. ww. s. * * * ^ - , . ; : @ ch. w w g r t'; + case 27: + return "m ng ng r h a a i i u u re ro le lo e ai o au k kh g gh ng c ch j jh ny t th d dh n t th d dh n p ph b bh m y r l w s s s h ' a i i u u re ro le lo e ai o au e o q x ts f v z sy jny 0 1 2 3 4 5 6 7 8 9 * @ . : , . - a e u ng r i e u ai h ^ ^ ^ ^ ^ ^ ^ ^ ^ ** @@ ng r h a i u e o e eu k q g ng c j z ny t d n p f v b m y r l w s x h y r l i u e o e eu m w kh sy 0 1 2 3 4 5 6 7 8 9 ' reu leu bh k m h h h b b p p n n w w w g g j d r r m m t t s s s y y ng l l ny c nd mb i u ' e e e i i o o u u ng h * + | )"; + case 28: + return "k kl kh g gl ng c ch j ny t th d n p pl ph f fl b bl m ml ts tsh z y r l h hl v s sh w y r a i o o u u e k m l n p r t ng ng ' , . . . . 0 1 2 3 4 5 6 7 8 9 t th d 0 1 2 3 4 5 6 7 8 9 a t g m l a k j m w i s h n r u c d n y e p d n r o t b n h m m ' , . v d o s t t ' e u A B G D E V Z T I K' L M N O P' Zh R S T' U P K Gh Q' Sh Ch Ts Dz Ts' Ch' Kh J H E Y W X O F E ` G ` Ae ` W . * ; , L K D B \" h h h h h h h m m m m m m m m m h h h h"; + case 29: + return 'a ae ae b c d d e e i j k l m n o o o o o oe ou o o p r r t u u u w v w z zh ` ` g l p r ps l A Ae B B D E E G H I J K L M N N O Ou P R T U W a a a ae b d e e e e g i k m ng o o o o p t u u w v ` v g d f ch i r u v v g r f ch ue b d f m n p r r s t z g n g th i i p u u b d f g k l m n p r s sh v x z a a d e e e e i o sh u zh a c c d e f j g y i i i i j l l l m w n n n o f s sh t u u u v a z z z zh th r a ae ao av c d d g g k l l m n n r r s s z a b b e f l o p sh u w a o u'; + case 30: + return "A a B b B b B b C c D d D d D d D d D d E e E e E e E e E e F f G g H h H h H h H h H h I i I i K k K k K k L l L l L l L l M m M m M m N n N n N n N n O o O o O o O o P p P p R r R r R r R r S s S s S s S s S s T t T t T t T t U u U u U u U u U u V v V v W w W w W w W w W w X x X x Y y Z z Z z Z z h t w y a' s s. s. Ss d A a A a A a A a A a A a A a A a A a A a A a A a E e E e E e E e E e E e E e E e I i I i O o O o O o O o O o O o O o O o O o O o O o O o U u U u U u U u U u U u U u Y y Y y Y y Y y Ll ll V v Y y"; + case 31: + return "a ha a ha a ha a ha A Ha A Ha A Ha A Ha e he e he e he E He E He E He i hi i hi i hi i hi I Hi I Hi I Hi I Hi i hi i hi i hi i hi I Hi I Hi I Hi I Hi o ho o ho o ho O Ho O Ho O Ho y hy y hy y hy y hy Hy Hy Hy Hy o ho o ho o ho o ho O Ho O Ho O Ho O Ho a a e e i i i i o o y y o o a ha a ha a ha a ha A Ha A Ha A Ha A Ha i hi i hi i hi i hi I Hi I Hi I Hi I Hi o ho o ho o ho o ho O Ho O Ho O Ho O Ho a a a a a a a A A A A A ' i ' ~ \"~ i i i i i E E I I I '` '' '~ i i i i i i I I I I h` h' h~ y y y y r rh y y Y Y Y Y Rh \"` \"' ` o o o o o O O O O O ' h"; + case 32: + return " - - - - - - || _ ' ' ' ' \" \" \" \" + ++ * * . .. ... - %0 %00 ' '' ''' ` `` ``` ^ < > * !! !? - _ - ^ *** - / [ ] ?? ?! !? & P < > * ; _ ** ./. ~ _ * : '''' : * : : + : : 0 i 4 5 6 7 8 9 + - = ( ) n 0 1 2 3 4 5 6 7 8 9 + - = ( ) a e o x e h k l m n p s t CE C Cr F L m N Pts Rs W NIS d EUR K T Dr Pf P G A HRN C lt Sm T Rs TL M Manat Rb Lari BTC Som"; + case 33: + return 'a/c a/s C C CL c/o c/u E g F g H H H h h I I L l # N No (P) p P Q R R R Rx R SM TEL TM V Z oz Ohm Mho Z i K A B C e e E F F M o a b g d i Q FAX p g G P S G L L Y D d e i j PL & P A/S f Sh 1/7 1/9 1/10 1/3 2/3 1/5 2/5 3/5 4/5 1/6 5/6 1/8 3/8 5/8 7/8 1/ I II III IV V VI VII VIII IX X XI XII L C D M i ii iii iv v vi vii viii ix x xi xii l c d m (|) |)) ((|)) C c 6 L |))) (((|))) 0/3 2 3 < ^ > v :left_right_arrow: :arrow_up_down: :arrow_upper_left: :arrow_upper_right: :arrow_lower_right: :arrow_lower_left: < > < > < ^ > v < > < ^ > v | :leftwards_arrow_with_hook: :arrow_right_hook: < > ~ - v < > < > v < < > \\ = < > < < ^ ^ > > v v = | = < ^ > v = = < - > < ^ > v - | \\ / \\ / < > < > ^ v < ^ > v < > < ^ > v ^ ^ ^ ^ ^ ^ > \\ \\ | > | > < > - < > - < > -'; + case 34: + return 'V C d E E 0 ^ D E E E E E E # P U S - -+ + / \\ * * * sqrt cbrt 4rt ~ inf L < < < | | || || ^ v ^ v S S SSS S SS SSS S S S : : : :: _ -: - ~ ~ ~ ~ ~ ~ ~ -~ ~ ~ ~= = = ~ ~ ~ ~ ~= = = = = = = = := =: = = = = = = = = = = = = = = <= >= <= >= < > << >> () = < > < > <~ >~ < > = = = = < > < > < > < > < > < > < > < > < > v v v [ ] [ ] ^ v + - x / . o * = - + - x . + + + + + + + + + + + + + + < > < > < > - - - + T v ^ v < / ^ v ^ v * * * * >< >< >< > < ~= v ^ < > ^ v + # < > <<< >>> = = =< => < > < > [ ] [ ] < > < > < > < > | - / \\ + + + + + + + + + + + + + E'; + case 35: + return "0 ~ ^ ^ v ^ ^ ~ [ ] [ ] + + + + - * * * * * + # # - :watch: :hourglass: + + + + ( ) ( ) ^ * > x :keyboard: < > < # * * * * * * * * * I # = : * * * * * / \\ / \\ < > < > < > 0 * * v * * ^ ^ * * ^ * * v v ' * * * * * ' * : * * * * * * * ~ > , * 0 | ; = ? v ^ i r o a e i o a NAK + * * | * * * * * * * * * * * * * * * * * * * * * # . < > # # ( ( ( ) ) ) [ [ [ ] ] ] { { { | } } } | - { { S S [ ] ][ / | | - - - - + + + + + + + + + + + + + + + ' < :eject: | - - - - - - 3 4 5 + - ( ) { } [ ] # # - # * * E :fast_forward: :rewind: :arrow_double_up: :arrow_double_down: :track_next: :track_previous: :play_pause: :alarm_clock: :stopwatch: :timer: :hourglass_flowing_sand: < > ^ v :pause_button: :stop_button: :record_button: * * * * <"; + case 36: + return 'NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US SP DEL b _ NL / ? < > ] * * * : ; < = % 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. (a) (b) (c) (d) (e) (f) (g) (h) (i) (j) (k) (l) (m) (n) (o) (p) (q) (r) (s) (t) (u) (v) (w) (x) (y) (z) A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 0'; + case 37: + return '- - | | - - | | - - | | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - | | - | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / \\ X - | - | - | - | - | - | # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # :black_small_square: :white_small_square: # # # # # # ^ ^ ^ ^ :arrow_forward: > > > > > v v v v :arrow_backward: < < < < < * * * * * * * * * * * * * * * * ( ) * * * * * * * * * * / \\ / \\ * # # # # # ^ ^ ^ * # # # # * * * * / \\ \\ :white_medium_square: :black_medium_square: :white_medium_small_square: :black_medium_small_square: /'; + case 38: + return ':sunny: :cloud: :umbrella2: :snowman2: :comet: * * * * * * * 0 180 :telephone: @ # :ballot_box_with_check: x X :umbrella: :coffee: W B :shamrock: * < > < :point_up: > v :skull_crossbones: Z :radioactive: :biohazard: + + :orthodox_cross: ChR. + + :star_and_crescent: * * * :peace: :yin_yang: Qian Dui Li Zhen Xun Kan Gen Kun :wheel_of_dharma: :frowning2: :relaxed: :) * ) ( Mercury :female_sign: Earth :male_sign: Jupiter Saturn Uranus Neptune Pluto :aries: :taurus: :gemini: :cancer: :leo: :virgo: :libra: :scorpius: :sagittarius: :capricorn: :aquarius: :pisces: K Q R B N P k q r b n :chess_pawn: :spades: H D :clubs: S :hearts: :diamonds: C :hotsprings: # # # # b # # + + * 1 2 3 4 5 6 7 * :recycle: * * :infinity: :wheelchair: 1 2 3 4 5 6 * * * * YangYao YinYao TaiYang ShaoYin ShaoYang TaiYin * * :hammer_pick: :anchor: :crossed_swords: :medical_symbol: :scales: :alembic: * :gear: * :atom: :fleur_de_lis: * > < :warning: :zap: * * * * * :transgender_symbol: * * :white_circle: :black_circle: * * * * :coffin: :urn: * * * * * * * * 30 150 135 :soccer: :baseball: * M K m k :snowman: :partly_sunny: * * :thunder_cloud_rain: w b # X * :ophiuchus: :pick: * :helmet_with_cross: * :chains: :no_entry: * * * * * * v * X \\ * * * Uranus * * * * * + :shinto_shrine: :church: * * * * * :mountain: :beach_umbrella: :fountain: :golf: :ferry: :sailboat: # :skier: :ice_skate: :person_bouncing_ball: :tent: * * :fuelpump: * *'; + case 39: + return '< < :scissors: < < :white_check_mark: @ @ :airplane: :envelope: :fist: :raised_hand: :v: :writing_hand: \\ :pencil2: / > :black_nib: v :heavy_check_mark: X :heavy_multiplication_x: x x + + + + :cross: + + + :star_of_david: * * * * * * :sparkles: * * * * * * * * * * :eight_spoked_asterisk: :eight_pointed_black_star: * * * * * * * * * * * * * * * :snowflake: * * :sparkle: * * * * :x: * :negative_squared_cross_mark: # # # # :question: :grey_question: :grey_exclamation: * :exclamation: | | | \' \' " " \' " P ! :heart_exclamation: :heart: * * * ( ) ( ) < > < > < > ( ) { } 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 > :heavy_plus_sign: :heavy_minus_sign: :heavy_division_sign: \\ > / > > > > > > :arrow_right: > > > > > > > > > > > > > > :curly_loop: > > > \\ > / \\ > / > > > > > :loop: ^ ^ T < > { } v \\< >/ | / ) \\ ^ v # ^ w > < * * * T T # + - - - + # # # # # # [ ] < > << >> [ ] ( ) ^ v < > > < > - < > - < > < > ~'; + case 40: + return ' a , b \' k ; l @ c i f st m s p * e : h in o ! r ^ d j g ar n t q + ch en gh - u ? v _ sh ow ed ing x the and 1 wh . ou " z ` of | th w er # y with for {7} A {27} B {37} K {237} L {47} C I F {347} M S P {57} E {257} H {357} O {2357} R {457} D J G {3457} N T Q {67} {167} {267} {1267} {367} U {2367} V {467} {1467} {2467} {12467} {3467} X {23467} {123467} {567} {1567} {2567} {12567} {3567} Z {23567} {123567} {4567} {14567} W {124567} {34567} Y {234567} {1234567} {8} {18} {28} {128} {38} {138} {238} {1238} {48} {148} {248} {1248} {348} {1348} {2348} {12348} {58} {158} {258} {1258} {358} {1358} {2358} {12358} {458} {1458} {2458} {12458} {3458} {13458} {23458} {123458} {68} {168} {268} {1268} {368} {1368} {2368} {12368} {468} {1468} {2468} {12468} {3468} {13468} {23468} {123468} {568} {1568} {2568} {12568} {3568} {13568} {23568} {123568} {4568} {14568} {24568} {124568} {34568} {134568} {234568} {1234568} {78} {178} {278} {1278} {378} {1378} {2378} {12378} {478} {1478} {2478} {12478} {3478} {13478} {23478} {123478} {578} {1578} {2578} {12578} {3578} {13578} {23578} {123578} {4578} {14578} {24578} {124578} {34578} {134578} {234578} {1234578} {678} {1678} {2678} {12678} {3678} {13678} {23678} {123678} {4678} {14678} {24678} {124678} {34678} {134678} {234678} {1234678} {5678} {15678} {25678} {125678} {35678} {135678} {235678} {1235678} {45678} {145678} {245678} {1245678} {345678} {1345678} {2345678} {12345678}'; + case 41: + return '> > < > - > < > v ^ ^ v < > < > > > ^ v > > > > > < > < > < > < > \\ / \\ / \\ / X X X X X X X X X X X X > :arrow_heading_up: :arrow_heading_down: < > < > < > - + < > < > = = = > < > - ^ - - | | - | - | < > ^ v < > ^ v < > ^ v < > ^ v < ^ > v = = = = < < > > | | > = ~ < > ~ < < > > < < > < v ^ ||| * : { } ( ) ( ) < > [ ] [ ] [ ] < > < > > < [ ] : | > ^ ^ < < > ^ > > < > ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 0 0 0 0 0 * * * * * * * * * * * < > * * / \\ * o # # ^ ^ ^ ^ # < > * * * * * * * { } {{ }} * * * * # < E # # # # # ^ ^ # # * * + + + + + + :> \\ / \\ / \\ ++ +++ < > + -'; + case 42: + return '* + x . + ^ v M W X S S SSSS S S S S S S S S S S S S S S S S >< < ; >> | + + + + + + + - - - - (+ +) x x x x * (x x) x x / + - x - - ; U ^ v v ^ ^ v X 0 X 0 w m v ^ ^ v * ^ v ^ v M W v ^ X ^ v ^ v ^ ^ ^ v v v < > = = # # ~ ~ ~ = = = = =+ += =~ ::= == === = = < > ?< >? <= >= <= >= <= >= <= >= < > < > < > = = < > ~ ~ = = = = =< => =< => =< => =< => ~< ~> < > << >> << >< >< < > < > < > < > = < > < > < > < > < > < > << >> < > < > < > < > < > < > < > < > [ ] < > < > - - < > >< >< + + + + + + + + + + + + + + + + + + + - - | | | | || || ||| ||| : <<< >>> <= >= /// ||| // | |'; + case 43: + return '/ \\ \\ / - :arrow_left: :arrow_up: :arrow_down: / \\ \\ / - | v ^ v ^ - - \\ \\ | | - - # :black_large_square: :white_large_square: - - * * * * * * * * * * * * * * * * * < < < < < < < < < < < < < < < < < < < > > < > > > < < < > v / \\ :star: * * * * :o: * * * * / \\ / \\ > > < ^ > v - | \\ / \\ / < ^ > v > < < ^ > v \\ / \\ / < ^ > v - | - | - | < ^ > v < ^ > v < ^ > v < > < > < > A < ^ > v < ^ > v < > < > ^ ^ v v < > < > ^ ^ v v < > < > ^ ^ v v ^ ^ * * * x x x * * * * * ^ v < > Neptune ^ v * * * * + ? + Pluto Pluto Pluto Pluto * * * * * * * * * Cupido Hades Zeus Kronos Apollon Admetos Vulcanus Poseidon * * * * < ^ > v * * * V N Q N2 100 D3 * * * * * * #'; + case 44: + return "A B V G D E Zh Dz Z I J I G K L M N O P R S T U F H O P Sht C Ch Sh U I E H Ju E E Jo Je O Jo Th U I A M Ch a b v g d e zh dz z i j i g k l m n o p r s t u f h o p sht c ch sh u i e h ju e e jo je o jo th u i a m ch L l L P R a t H h K k Z z A M A A v W w v H h o e r o e j V S Z A a B b G g D d E e 6 6 Z z E e Th th I i K k L l M m N n Ks ks O o P p R r S s T t U u Ph ph Kh kh Ps ps O o ' ' ` ` E e K k N n N n O o 900 900 Sh sh Sh sh Sh sh X x H h H h H h H h H h H h J j Dj dj C c C c Ng ng Ny ny W w & MR. PR. STRS. TR. KhR. CS. Sh sh J j n X x \\\\ /. .\\ // .5 . '"; + case 45: + return "a b g d e v z t i k' l m n o p' zh r s t' u p k gh q' sh ch ts dz ts' ch' kh j h e y w x o e ae a b b g g dj dj d d d d e f k k k h h h h ' x x q q i j j j l m n gn ng p u r r gh gh gh s s c t t tc t v w y z z z e o w loa moa roa soa shoa boa toa choa noa nyoa 'oa zoa doa d'oa joa t'oa ch'oa p'oa poa ngwe ngwi ngwie ngwi she shu shi sha shie sh sho che chu chi cha chie ch cho zhe zhu zhi zha zhie zh zho ch'e ch'u ch'i ch'a ch'ie ch' ch'o k'ye k'yu k'yi k'ya k'yie k'y k'yo kye kyu kyi kya kyie ky kyo xye xyu xyi xya xyie xy xyo gye gyu gyi gya gyie gy gyo b v g d zh z k l m n o p r s t kh ts ch sh shch f st a e dj u e yu ia e o io"; + case 46: + return '+ + + + + + + + + + + * \\ / # _ _ _ , / / / > = !? / - ~ \\ / ~ ~ [ ] [ ] [ ] ( ) (( )) : : :: + ? \' * - , - , ; + + + S -- --- . : | C = , " - : . : . . ; / +++ , P ; / + + & ! ? [ ] [ ] ( ) ( ) - Bing Han Yi Yi Yi Ren Jiong Ji Dao Dao Bu Jie Xiao Xiao Wang Wang Wang Wang Ji Yao Ji Ji Xin Xin Shou Pu Wu Ri Yue Dai Wu Shi Shui Shui Huo Zhao Zhao Qiang Niu Quan Yu Pi Mu Shi Shi Zhu Mi Mi Wang Wang Wang Wang Wang Yang Yang Yang Lao Yu Yu Rou Jiu Cao Cao Cao Hu Yi Ya Ya Jian Jiao Jiao Yan Bei Zu Che Chuo Chuo Chuo Yi Jin Chang Chang Chang Men Fu Fu Yu Qing Wei Ye Feng Fei Shi Shi Shi Shi Shou Ma Gu Gui Yu Niao Lu Mai Huang Min Qi Qi Chi Chi Long Long Gui Gui Gui'; + case 47: + return 'Yi Gun Zhu Pie Yi Jue Er Tou Ren Er Ru Ba Jiong Mi Bing Ji Kan Dao Li Bao Bi Fang Xi Shi Bu Jie Han Si You Kou Wei Tu Shi Zhi Sui Xi Da Nu Zi Mian Cun Xiao Wang Shi Che Shan Chuan Gong Ji Jin Gan Yao Yan Yin Gong Yi Gong Ji Shan Chi Xin Ge Hu Shou Zhi Pu Wen Dou Jin Fang Wu Ri Yue Yue Mu Qian Zhi Dai Shu Wu Bi Mao Shi Qi Shui Huo Zhao Fu Yao Qiang Pian Ya Niu Quan Xuan Yu Gua Wa Gan Sheng Yong Tian Pi Ne Bo Bai Pi Min Mu Mao Shi Shi Shi Rou He Xue Li Zhu Mi Mi Fou Wang Yang Yu Lao Er Lei Er Yu Rou Chen Zi Zhi Jiu She Chuan Zhou Gen Se Cao Hu Chong Xue Xing Yi Ya Jian Jiao Yan Gu Dou Shi Zhi Bei Chi Zou Zu Shen Che Xin Chen Chuo Yi You Bian Li Jin Chang Men Fu Li Zhui Yu Qing Fei Mian Ge Wei Jiu Yin Ye Feng Fei Shi Shou Xiang Ma Gu Gao Biao Dou Chang Li Gui Yu Niao Lu Lu Mai Ma Huang Shu Hei Zhi Min Ding Gu Shu Bi Qi Chi Long Gui Yue + + + + + + + + + + + +'; + case 48: + return " , . \" (JIS) - / 0 < > << >> [ ] [ ] [( )] @ = [ ] [( )] [ ] [ ] ~ \" \" \" @ 1 2 3 4 5 6 7 8 9 :wavy_dash: < <' / /' \\ @ XX 10 20 30 - Masu :part_alternation_mark: ~ # a a i i u u e e o o ka ga ki gi ku gu ke ge ko go sa za shi ji su zu se ze so zo ta da chi ji tsu tsu zu te de to do na ni nu ne no ha ba pa hi bi pi fu bu pu he be pe ho bo po ma mi mu me mo ya ya yu yu yo yo ra ri ru re ro wa wa i e o n vu ka ke ' ` ' ` - -' yori = a a i i u u e e o o ka ga ki gi ku gu ke ge ko go sa za shi ji su zu se ze so zo ta da chi ji tsu tsu zu te de to do na ni nu ne no ha ba pa hi bi pi fu bu pu he be pe ho bo po ma mi mu me mo ya ya yu yu yo yo ra ri ru re ro wa wa i e o n vu ka ke va vi ve vo - - -' koto"; + case 49: + return ' b p m f d t n l g k h j q x zh ch sh r z c s a o e e ai ei ao ou an en ang eng er i u u v ng gn i e n g kk gs n nj nh d tt l lg lm lb ls lt lp lh m b pp bs s ss j jj ch k t p h a ae ya yae eo e yeo ye o wa wae oe yo u wo we wi yu eu ui i nn nd ns nz lgs ld lbs lz lq mb ms mz mh bg bd bsg bsd bj bt v pph sg sn sd sb sj z ng ngs ngz f hh q yoya yoyae yoi yuyeo yuye yui o oi - re 1 2 3 4 A B C I II III IV a b c b j ji g e enn oo onn ir ann inn unn m ng ainn aunn am om ong inn p t k h v dl y k gw kw eu a T WG XG BXG SW HZZ HZG HP HZWG SZWG HZT HZZP HPWG HZW HZZZ N H S P SP D HZ HG SZ SWZ ST SG PD PZ TN SZZ SWG HXWG HZZZG PG Q ku shi su to nu ha hi fu he ho mu ra ri ru re ro'; + case 50: + return '(g) (n) (d) (l) (m) (b) (s) () (j) (ch) (k) (t) (p) (h) (Ga) (Na) (Da) (La) (Ma) (Ba) (Sa) (A) (Ja) (Cha) (Ka) (Ta) (Pa) (Ha) (Ju) (OJeon) (OHu) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (Yue) (Huo) (Shui) (Mu) (Jin) (Tu) (Ri) (Zhu) (You) (She) (Ming) (Te) (Cai) (Zhu) (Lao) (Dai) (Hu) (Xue) (Jian) (Qi) (Zi) (Xie) (Ji) (Xiu) (Zi) (Zhi) Wen You Wen Zheng 10 20 30 40 50 60 70 80 PTE 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 g n d l m b s j ch k t p h Ga Na Da La Ma Ba Sa A Ja Cha Ka Ta Pa Ha ChamGo JuUi U (K) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) Yue Huo Shui Mu Jin Tu Ri Zhu You She Ming Te Cai Zhu Lao Mi Nan Nu Shi You Yin Zhu Xiang Xiu Xie Zheng Shang Zhong Xia Zuo You Yi Zong Xue Jian Qi Zi Xie Ye 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 1M 2M 3M 4M 5M 6M 7M 8M 9M 10M 11M 12M Hg erg eV LTD a i u e o ka ki ku ke ko sa shi su se so ta chi tsu te to na ni nu ne no ha hi fu he ho ma mi mu me mo ya yu yo ra ri ru re ro wa i e o Reiwa'; + case 51: + return 'apartment alpha ampere are inning inch won escudo acre ounce ohm kai-ri carat calorie gallon gamma giga guinea curie guilder kilo kilogram kilometer kilowatt gram gram ton cruzeiro krone case koruna co-op cycle centime shilling centi cent dozen deci dollar ton nano knot heights percent parts barrel piaster picul pico building farad feet bushel franc hectare peso pfennig hertz pence page beta point volt hon pound hall horn micro mile mach mark mansion micron milli millibar mega megaton meter yard yard yuan liter lira rupee ruble rem roentgen watt 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H 10H 11H 12H 13H 14H 15H 16H 17H 18H 19H 20H 21H 22H 23H 24H hPa da AU bar oV pc dm dm2 dm3 IU Heisei Showa Taisho Meiji Inc. pA nA uA mA kA KB MB GB cal kcal pF nF uF ug mg kg Hz kHz MHz GHz THz ul ml dl kl fm nm um mm cm km mm2 cm2 m2 km2 mm3 cm3 m3 km3 m/s m/s2 Pa kPa MPa GPa rad rad/s rad/s2 ps ns us ms pV nV uV mV kV MV pW nW uW mW kW MW kOhm MOhm a.m. Bq cc cd C/kg Co. dB Gy ha HP in KK KM kt lm ln log lx mb mil mol PH p.m. PPM PR sr Sv Wb V/m A/m 1D 2D 3D 4D 5D 6D 7D 8D 9D 10D 11D 12D 13D 14D 15D 16D 17D 18D 19D 20D 21D 22D 23D 24D 25D 26D 27D 28D 29D 30D 31D gal'; + case 52: + return 'Qiu Tian Zim Kua Wu Yin Gau Jap Ding Si Tou Yi Zaau Man Ng Nou Dung Ziu Ho Hang Jau Xie Lou Mai Dau Ng Jau Chou Keoi Kei Fei Jyu Nuo Fau Fu Dan Co Geoi Xu Xing Si Xiong Liu Lin Xiang Yong Xin Zhen Dai Wu Pan Ru Ci Ma Qian Yi Yin Nei Cheng Feng Wun Sau Taai Zhuo Fang Ao Wu Zuo Hing Zhou Dong Su Yi Qiong Kuang Lei Nao Zhu Shu Zat Cim Zeon Xu Seoi Zung Shen Jie Die Nuo Su Yi Long Ying Beng Gin Zik Koek Lan Miao Yi Li Ji Yu Luo Chai Nim Gu Bei Hun Xu Hui Rao Naam Zhou Cam Han Xi Tai Yao Hui Jun Ma Lue Tang Yao Zhao Zhai Yu Zhuo Er Ran Qi Chi Wu Han Tang Se Si Qiong Lei Sa Hon Seon Kui Pu Ta Shu Yang Ou Tai Syu Mian Yin Diao Yu Mie Jun Niao Xie You Joek Jing Che Feng Lei Li Sin Luo Sek Ji Wong Fui Jip Quan Zik Cai Liang Gu Mao Gung Gua Sui Din Mong Mao Man Quan Shi Li Buk Wang Kou Du Zhen Ting Leon Juk Bing Huo Dong Gong Cheng Cung Qin Jiong Lu Xing Cat Nan Xie Mit Bi Jie Su Hung Gong Gung You Xing Qia Pi Dian Fu Luo Qia Qia Tang Bai Gan Ci Xuan Lang Fu Fu She Diao Li Hua Tou Pian Di Ruan E Qie Yi Zhuo Rui Jian Gong Chi Chong Xi Syu'; + case 53: + return 'Lue Deng Lin Jue Su Xiao Zan Put Fei Zhu Zhan Jian Zou Chua Xie Li Cim Chi Xi Jian Gaa Ji Gaa Fei Chu Beng Jie Kit Ba Liang Kuai Sai Xia Bie Jue Lei Xin Bai Yang Lu Bei E Lu Lung Coek Che Nuo Xuan Heng Yu Gwai Gui Yi Xuan Gong Lou Ti Le Shi Pei Sun Yao Xian Zou Wai Que Yin Xi Zhi Jia Hu La Yi Ke Fu Qin Ai Deoi Ke Chu Xie Chu Wei Cin Teng Huan Su You Can Jun Zhao Xu Shi Si Shua Kui Shuang He Gai Yan Qiu Shen Hua Xi Fan Pang Dan Fang Gong Ao Fu Ne Xue You Hua Hung Chen Guo N Hua Li Fa Xiao Pou Hung Si Siu Wo Le Lin Yi Hou Xu Qu Er Lou Kei Xun Gaai Sau Dau Gaai Nie Wei Xie Ti Hong Tun Nie Nie Yin Zhen Gaa Fu Gu Jing Mei Wai Shou Nuo Ye Qi Tou Han Jun Dong Hun Lu Ju Huo Ling Sau Tian Lun Tung Tung Je Jyu Jyu Man Ge Yan Shi Xue Pen Chun Niu Duo Ze E Xie You E Sheng Wen Ku Hu Ge Xia Man Lue Ji Hou Zhi Zaai Gaa Wai Haap Bai Ai Zhui Qian Gou Dan Bei Bo Chu Li Xiao Xiu Gou Po Zyu Ci Jing Hong Ti Cu Kuo Lao Zhi Xie Xi Pei Qie Zha Xi Gang Ze Cong Ji Huo Ta Yan Xu Po Sai Haam Wai Saap Guo Ye Xiang Xue He'; + case 54: + return 'Zuo Yi Ci Je Leng Xian Tai Rong Yi Zhi Xi Xian Ju Ji Han Dou Pao Li Zung Lan Sai Han Yan Qu Lyun Yan Han Kan Chi Nie Huo Coeng Bi Xia Weng Xuan Wan You Qin Xu Nie Bi Hao Jing Ao Ao Jik Coeng Zhen Tan Ju Zuo Bu Jie Ai Zang Ci Fa Haau Zoi Jyu Nie Liu Mei Dui Bang Bi Bao Wang Chu Xia Tian Chang Gei Suk Duo Wei Fu Duo Yu Ye Kui Wei Kuai Jyu Wei Yao Long Xing Bu Chi Xie Nie Lang Yi Zong Man Zhang Xia Gun Xie Lau Ji Liao Yi Ji Yin Kyut Da Yi Xie Hao Yong Kan Chan Tai Tang Zhi Bao Meng Kui Chan Lei Sik Xi Hei Xi Qiao Nang Yun Zi Long Fu Zong Ngoi Gu Kai Diao Hua Kui Heoi Gao Tao Ling Shan Lai Nie Fu Gao Qie Ban Jia Kong Xi Yu Zhui Shen Chuo Xiao Ji Nu Xiao Yi Yu Yi Yan Shen Ran Hao Sa Jun You Daam Xin Pei Qiu Chan Bu Dong Si Er Si Mao Yun Ji Qiao Xiong Pao Chu Peng Nuo Jie Yi Er Duo Zong Haau Jiu Duo Nei Mau Qie Lu Qiu Sou Can Dou Xi Feng Yi Suo Qie Po Xin Tong Xin You Bei Long Wun Haan Wan Sau Yun Li Ta Lan Man Qiang Zhou Yan Xi Lu Xi Sao Fan Fan Wei Fa Yi Nao Cheng Tan Ji Shu Pian An Kua Cha Saan Xian Zhi'; + case 55: + return 'Soeng Caa Feng Lian Xun Xu Mi Hui Mu Yong Zhan Yi Nou Tang Xi Yun Shu Fu Yi Da Ging Lian Cao Can Ju Lu Su Nen Ao An Qian Haam Cui Cong Leoi Ran Nian Mai Xin Yue Nai Ao Shen Ma Daam Dong Lan Xi Yue Zhi Weng Huai Meng Niao Wan Mi Nie Qu Zan Lian Zhi Zi Hai Xu Hao Xuan Zhi Mian Chun Gou Hei Chun Luan Zhu Shou Liao Jiu Xie Ding Jie Rong Mang Geoi Ke Yao Ning Yi Lang Yong Yin Yan Su Sik Lin Ya Mao Ming Zui Yu Yi Gou Mi Jun Wen Jyun Kang Dian Long Wu Xing Cui Qiao Mian Meng Qin Sam Wan De Ai Cam Bian Nou Lian Jin Yu Chui Zuo Bo Hui Yao Tui Ji An Luo Ji Wei Bo Za Xu Nian Yun Jyun Ba Zhe Ju Wei Xie Qi Yi Xie Ci Qiu Du Niao Qi Ji Tui Cik Song Dian Lao Zhan Zi Fan Yin Cen Ji Hui Zi Lan Nao Ju Qin Dai Shutsu Jie Xu Cong Yong Dou Chi Tou Min Huang Sui Ke Zu Hao Cheng Xue Ni Chi Lian An Mu Si Xiang Yang Hua Cuo Qiu Lao Fu Dui Mang Lang Tuo Han Mang Bo Qun Qi Han Giu Long Bin Tiao Ze Qi Zan Mi Pei Zhan Xiang Gang Kwai Qi Sung Lu Cam Yun E Duan Min Wei Quan Sou Min Tu Ngaak Ming Yao Jue Li Kuai Gang Yuan Da Gou Lao Lou Qian Ao Biao Yong Mang'; + case 56: + return 'Dao Ao Dik Xi Fu Dan Jiu Run Tong Qu E Qi Ji Ji Hua Jiao Zui Biao Meng Bai Wei Yi Ao Yu Hao Dui Wo Ni Cuan Zing Li Lu Niao Huai Li Soeng Lu Feng Mi Yu Fong Ju Faan Hau Zhan Peng Yi Gaa Ji Bi Jap Ren Huang Fan Ge Ku Jie Sha Hei Si Tong Yuan Zi Bi Kua Li Huang Xun Nuo Fong Zhe Wen Xian Qia Ye Mao Mok Saam Shu Zin Qiao Zhun Kun Wu Ying Chuang Ti Lian Bi Gou Mang Xie Feng Lou Zao Zheng Chu Man Long Jip Yin Pin Zheng Jian Luan Nie Yi Gei Ji Ji Zhai Yu Jiu Huan Zhi La Ling Zhi Ben Zha Ju Dan Liao Yi Zhao Xian Chi Ci Chi Yan Lang Dou Long Chan Jin Tui Cha Ai Chi Aa Ying Zhe Tou Waa Tui Cha Yao Zong Pan Qiao Lian Qin Lu Yan Kang Su Yi Chan Jiong Jiang Bai Jing Zoi Dong Go Juan Han Di Wu Saan Hong Tou Chi Diao Bi Nei Xun Lu Sai Xie Bi Seoi Bi San Xian Rui Bie Er Juan Hau Zhen Bei E Yu Qu Zan Mi Yi Si Gung Man Daan Shan Tai Mu Jing Bian Rong Ceng Can Ding Daai Taai Wu Keoi Di Tong Ta Xing Song Duo Xi Tao Zung Ti Shan Jian Zhi Wei Yin Gu Lam Huan Zhong Qi Zong Naam Xie Xie Ze Wei Mou Wong Ta Zhan Ning Jeoi Jing Xin Yi Ren Shu Cha Zhuo'; + case 57: + return 'Mong Mian Ji Fang Pei Ai Fan Ao Qin Qia Xiao Fen Gan Qiao Ge Tong Chan You Gao Ben Fu Chu Zhu Taai Zhou En Hang Nin Jue Chong Cha Kong Lie Li Yu Paang Yu Hai Li Hou Gong Ke Yuan De Hui Giu Guang Jiong Zuo Fu Qie Bei Che Ci Mang Han Xi Qiu Huang Tung Gip Chou San Yan Zhi De Te Men Ling Shou Tui Can Die Che Peng Yi Ju Ji Lai Tian Yuan Cai Qi Yu Lian Cong Man Gip Zung Yu Ji Wei Mi Sui Xie Xu Chi Qiu Hui Ging Yu Qie Shun Shui Duo Lou Deon Pang Tai Zhou Yin Sao Fei Chen Yuan Yi Hun Se Ye Min Fen He Cik Yin Ce Ni Ao Feng Lian Chang Chan Ma Die Hu Lu Oi Yi Hua Zha Hu E Huo Sun Ni Xian Li Xian Yan Long Men Jin Ji Jyu Bian Yu Huo Miao Chou Mai Deoi Le Jie Wei Yi Xuan Xi Can Lan Yin Xie Za Luo Ling Qian Huo Jian Wo Zoi Zoi Ge Zhu Die Yong Ji Yang Ru Xi Shuang Yu Yi Qian Ji Qu Tian Shou Qian Mu Jin Mao Yin Gai Po Xuan Mao Fang Ya Gang Song Hui Yu Gua Guai Liu E Zi Zi Bi Wa Laam Lie Bat Kuai Mei Hai Yin Zhu Chong Xian Xuan So Qiu Pei Gui Er Gong Qiong Hu Lao Li Chen San Zhuo Wo Pou Keng Tun Peng Te Ta Zhuo Biao Gu Hu'; + case 58: + return 'Bing Zhi Dong Dui Zhou Nei Lin Po Ji Min Wei Che Gou Bang Ru Tan Bu Zong Kui Lao Han Ying Zhi Jie Xing Xie Xun Shan Qian Xie Su Hai Mi Hun Pi Jung Hui Na Song Ben Chou Jie Huang Lan Jyun Hu Dou Huo Gun Yao Ce Gui Jian Jian Dao Jin Ma Hui Mian Can Lue Pi Yang Ju Ju Que Huk Qian Shai Cau Jiu Huo Yun Da Xuan Xiao Fei Ce Ye Hak Den Saap Qin Hui Tun Ling Qiang Xi Ni Sai Meng Tuan Lan Hao Ci Zhai Ao Luo Mie Fu Xie Bo Hui Qing Xie Zat Hei Bo Qian Po Jiao Jue Kun Song Ju E Nie Qian Die Die Pei Qi Zhi Qi Zhui Ku Yu Qin Ku He Fu Geng Di Xian Gui He Qun Han Tong Bo Shan Bi Lu Ye Ni Chuai San Diao Lu Tou Lian Ke San Zhen Chuai Lian Mao Deon Qian Kai Shao Xiao Bi Zha Yin Xi Shan Su Sa Rui Chuo Lu Ling Cha Zaai Huan Dau Dau Jia Ban Hu Dou Lou Ju Juan Ke Suo Luo Zhe Ding Duan Zhu Yan Pang Cha Ji Jyu Jyu Ngai Yi Zin Syun You Hui Yao Yao Zhi Gong Qi Gen Gwong Zi Hou Mi Fu Hu Guang Tan Di Tou Yan Bun Dung Qu Man Chang Ming Tao Bao An Ceon Zung Xian Ceon Si Ci Mao Lang Nan Bei Chen Fei Zhou Ji Jie Shu Sik Kun Die Lu Soeng Zeoi'; + case 59: + return 'Hoeng Caap Yu Tai Chan Man Min Huan Wen Nuan Huan Hou Jing Bo Xian Li Jin Gwok Mang Piao Hao Yang Kai Xian Su Wei Che Xi Jin Ceng He Fen Shai Ling Hei Dui Qi Pu Yue Bo Haak Hui Die Yan Ju Jiao Nan Lie Yu Ti Tian Wu Hong Xiao Hao Kwan Tiao Zheng Tang Huang Fu Ngok Tyun Tun Sai Reng Jiao Gong Xin Saam Naai Yuan Jue Hua Sik Bang Mou Cat Gang Wei Daai Mei Si Bian Lu Qu Doi Ming Ge Zhe Lu Pai Rong Qiu Lie Gong Xian Xi Xin Man Niao Fu Zaak Zau Xie Lie Fu Cuo Zhuo Ba Zuo Zhe Zui He Ji Haau Jian Din Fong Naam Tu Xian Yan Tang Ta Di Jue Ang Han Xiao Ju Wei Bang Zhui Nie Tian Nai Hap Mau You Mian Zin Bui Nai Sheng Cha Yan Gen Chong Ruan Jia Qin Mao E Li Chi Zang He Jie Nian Wing Guan Hou Gai Cung Ben Suo Wu Ji Xi Qiong He Weng Xian Jie Hun Pi Shen Chou Zhen Sau Zhan Shuo Ji Song Zhi Ben Sou Sin Pun Lang Bi Xuan Pei Dai Qi Zhi Pi Chan Bi Su Huo Hen Jiong Chuan Jiang Nen Gu Fang Zoeng Mik Ta Cui Xi De Xian Kuan Zhe Ta Hu Cui Lu Juan Lu Qian Pao Zhen Fan Li Cao Qi Ciu Suk Ti Ling Qu Lian Lu Shu Gong Zhe Pao Jin Qing Jung Dung Zong Pu Jin Biao Jian Gun Goi Bin Zao Lie'; + case 60: + return 'Li Luo Shen Mian Jian Di Bei Lian Zeon Xian Pin Que Long Zui Gou Jue Shan Xue Laam Xie Hei Lan Qi Yi Nuo Li Yue Din Yi Chi Ji Hang Xie Keng Zi He Xi Qu Hai Xia Hai Gui Chan Xun Xu Shen Kou Xia Sha Yu Ya Pou Zu You Zi Lian Xian Xia Yi Sha Yan Jiao Xi Chi Shi Kang Yin Hei Yi Xi Se Jin Ye You Que Ye Luan Kun Zheng Zing Seoi Ho Ling Xie Gwai Cui Xiu An Xiu Can Chuan Zha Sei Yi Pi Ku Sheng Lang Tui Xi Ling Qi Wo Lian Du Men Lan Wei Duan Kuai Ai Zai Hui Yi Mo Zi Fen Peng Zaap Bi Li Lu Luo Hai Zhen Gai Que Zhen Kong Cheng Jiu Jue Ji Ling Dung Shao Que Rui Chuo Neng Zhi Lou Pao Gam Seoi Bao Rong Xian Lei Xiao Fu Qu Sha Zhi Tan Rong Su Ying Mao Nai Bian Shuai Tang Han Sao Rong Taap Deng Pu Jiao Tan Taap Ran Ning Lie Die Die Zhong Siu Lu Dan Xi Gui Ji Ni Yi Nian Yu Wang Guo Ze Yan Cui Xian Jiao Tou Fu Pei Jyut You Qiu Ya Bu Bian Shi Zha Yi Bian Jau Dui Lan Yi Chai Chong Xuan Xu Yu Xiu Hong Cung Hung Ta Guo Kiu Lou Suk Long Xie Che Jian Tan Pi Zan Xuan Xian Niao San Joeng Taai Hak Mi Ji Nou Hu Hua Wang You Ze Bi Mi Qiang Xie'; + case 61: + return 'Fan Yi Tan Lei Yong Siu Jin She Yin Ji Su Gu Sing Nai Wang Mian Su Yi Shai Xi Ji Luo You Mao Zha Sui Zhi Bian Li Tou Hau Haam Hoeng Cung Ji Cyu Qiao Guan Xi Zhen Yong Nie Jun Xie Yao Xie Zhi Neng Sam Si Long Chen Mi Que Dan Shan Mai Zip Syu Su Xie Bo Ding Zu Fong Shu She Han Tan Gao Tim Gu Lam Na Mi Xun Men Jian Cui Jue He Fei Shi Che Shen Nu Ping Man Fu Sin Naam Yi Chou Mei Ku Bao Lei Ke Sha Bi Sui Ge Pi Yi Xian Ni Ying Zhu Chun Feng Xu Piao Wu Liao Cang Zou Zuo Bian Yao Huan Pai Xiu Se Lei Qing Xiao Jiao Guo Wong Mou Yan Xue Zhu Heng Ying Xi Can Jeoi Lian Xian Huan Yin Jing Lian Shan Cang Bei Jian Shu Fan Dian Jeoi Ba Yu Jing Nang Lei Yi Dai Gau Chan Chao Gan Jin Nen Jam Pui Liao Mo You Siu Liu Han Bun Yong Jin Chi Ren Nong Ceon Hip Hong Tian Fung Ai Gua Biao Bo Qiong Jung Shu Chui Hui Chao Fu Hui E Wei Fen Tan Zau Lun He Yong Hui Yu Zong Yan Qiu Zhao Jiong Tai Zin Ting Bou Jik Dat Hau Tui Lin Jiong Zha Xing Hu Zing Xu Jyun Fung Hei Cui Qing Mo Fung Zao Beng Chi Hung Dung Yan Ge Mo Bei Juan Die Zhao Saat Wu Yan Sin Jue Xian'; + case 62: + return 'Tai Han Seoi Dian Ji Jie Kao Zuan Ziu Xie Lai Fan Huo Xi Nie Mi Ran Cuan Yin Mi Hon Jue Qu Tong Wan Zhe Li Shao Kong Xian Zhe Zhi Tiao Shu Bei Ye Pian Chan Hu Ken Jiu An Chun Qian Bei Ba Fen Ke Tuo Tuo Zuo Ling Sek Gui Yan Shi Hou Lie Sha Si Fung Bei Ren Du Bo Liang Qian Fei Ji Zong Hui He Li Yuan Yue Xiu Chan Di Lei Jin Chong Si Pu Yao Jiang Huan Huan Tao Ru Weng Ying Rao Yin Shi Yin Jue Tun Xuan Jia Zhong Qie Zhu Diao You Hing Saan Yi Shi Yi Mo Huou Gwong Que Xiao Wu Geng Ying Ting Shi Ni Geng Ta Wo Ju Chan Piao Zhuo Hu Nao Yan Gou Yu Hou Ban Si Chi Hu Yang Weng Xian Pin Rong Lou Lao Shan Xiao Ze Hai Fan Han Chan Zhan Sat Ta Zhu Nong Han Yu Zhuo You Li Huo Xi Xian Chan Lian Hiu Si Jiu Pu Qiu Gong Zi Yu Lung Si Reng Niu Mei Ba Jiu Dau Xu Ping Bian Mao Fat Pat Pei Gwing Yi Yu Gwai Ping Qu Bao Hui Jyun Cyun Hau Bu Mang La Tu Wu Li Ling Ceon Ji Jun Zou Duo Jue Dai Bei Sam Juk Pang Ji Cung La Bin Sui Tu Xue Si Sam Gik Jau Jyu Duo Jyun Gim Sui Bi Tu Se Can Tu Mian Jin Lu Lei Maan Zhan Bi Ji Zen Xuan Li Deon Taam Sui Yong Shu'; + case 63: + return 'Daat Ji E Laap Gei Gwong Jing Qiong Luo Zhen Tun Gu Yu Lei Bo Nei Pian Lian Tang Lian Wen Dang Li Ting Wa Zhou Gang Xing Ang Fan Peng Bo Tuo Shu Yi Bo Qie Tou Gong Tong Han Cheng Jie Huan Xing Dian Chai Dong Pi Ruan Lie Sheng Ou Di Yu Chuan Rong Kang Tang Cong Piao Chuang Lu Tong Zheng Li Sa Pan Si Dang Dang Hu Yi Xian Xie Luo Liu Ham Tan Gan Tan Sang San Jeoi You Nan Din Gang Jun Chi Gou Wan Li Liu Lie Xia Bei An Yu Ju Rou Xun Zi Cuo Can Zeng Yong Fu Ruan Sing Xi Shu Jiao Jiao Xu Zhang Zong Gei Shui Chen Fan Ji Zhi Jan Gu Wu Cui Qie Shu Hai Tuo Du Zi Ran Mu Fu Ling Ji Xiu Xuan Nai Ya Jie Li Da Ru Yuan Lu Shen Li Liang Geng Xin Xie Qin Qie Che You Bu Kuang Que Ai Qin Qiang Chu Pei Kuo Yi Guai Sheng Pian Gaai Zhou Huang Hui Hu Bei Ngou Zi Zha Ji Gu Xi Gao Chai Ma Zhu Tui Zhui Xian Lang Baan Hiu Zing Zhi Ai Xian Guo Xi Tui Can Sao Xian Jie Fen Qun Ceoi Yao Dao Jia Lei Yan Lu Tui Ying Pi Luo Li Bie Hoeng Mao Bai Huang Dau Yao He Chun He Ning Chou Li Tang Huan Bi Ba Che Yang Da Ao Xue Zi Da Ran Bang Cuo Wan Ta Bao Gan Yan Xi Zhu Ya'; + case 64: + return 'Fan You An Tui Meng She Jin Gu Ji Qiao Jiao Yan Xi Kan Mian Xuan Shan Wo Qian Huan Ren Zhen Tian Jue Xie Qi Ang Mei Gu Bei Tao Fan Ju Chan Shun Bi Mao Shuo Gu Hong Hua Luo Hang Jia Quan Gai Huang Bu Gu Feng Mu Ai Ying Shun Liang Jie Chi Jie Chou Ping Chen Yan Du Di Dai Liang Xian Biao Xing Meng Ye Mi Qi Qi Wo Xie Yu Qia Cheng Yao Ying Yang Ji Zong Xuan Min Lou Kai Yao Yan Sun Gui Huang Ying Sheng Cha Lian Sim Xuan Chuan Che Ni Qu Miao Huo Yu Zhan Hu Ceng Biao Qian Xi Jiang Kou Mai Mang Zhan Bian Ji Jue Nang Bi Shi Shuo Mo Lie Mie Mo Xi Chan Qu Jiao Huo Xian Xu Niu Tong Hou Yu Jau Chong Bo Zuan Diao Zhuo Ji Qia Kwai Xing Hui Shi Ku Dui Yao Yu Bang Jie Zhe Jia Shi Di Dong Ci Fu Min Zhen Zhen Cik Yan Qiao Hang Gong Qiao Lue Guai La Rui Fa Cuo Yan Gong Jie Guai Guo Suo Wo Zheng Nie Diao Lai Ta Cui Ya Gun Mong Ging Di Kei Mian Jie Min Ju Yu Zhen Zhao Zha Xing Dat Ban He Gou Hong Lao Wu Bo Keng Lu Cu Lian Yi Qiao Shu Saan Xuan Jin Qin Hui Su Chuang Dun Long Koeng Nao Tan Dan Wei Gan Da Li Ca Xian Pan La Zhu Niao Huai Ying Xian Lan Mo Ba Buk Gui Bi Fu'; + case 65: + return 'Huo Yi Liu Yang Yin Juan Huo Cheng Dou E Zi Yan Zhui Zha Qi Yu Quan Huo Nie Huang Ju She Jyu Jyun Peng Ming Cao Lou Li Chuang Zai Cui Shan Dan Qi Suk Lai Ling Liao Reng Yu Yi Diao Qi Yi Nian Fu Jian Ya Fang Rui Xian Jyut Lai Bi Shi Po Nian Zhi Tao Tian Tian Ru Yi Lie An He Qiong Li Gui Zi Su Yuan Ya Cha Wan Juan Ting You Hui Jian Rui Mang Ju Zi Ju An Sui Lai Hun Quan Chang Duo Kong Ne Can Ti Xu Jiu Huang Qi Jie Mao Yan Hoeng Zhi Tui Loek Ai Pang Cang Tang En Hun Qi Chu Suo Zhuo Nou Tu Shen Lou Biao Li Man Xin Cen Huang Mei Gao Lian Dao Zhan Zi Cou Fung Zhi Ba Cui Qiu Kai Long Xian Fei Guo Cheng Jiu E Chong Yue Hong Yao Ya Yao Tong Zha You Xue Yao Ke Huan Lang Yue Chen Cyun Cyun Shen Wo Ning Ming Hong Chuang Yun Xuan Jin Zhuo Yu Tan Kang Qiong Gwai Cheng Jiu Xue Zheng Chong Pan Qiao Ke Qu Lan Yi Rong Si Qian Si Hat Fa Sap Meng Hua Baak Gwong Hai Qiao Chu Que Dui Li Ba Jie Xu Luo Seoi Yun Zhong Hu Yin Pok Zhi Qian Zim Gan Jian Zhu Zhu Ku Nie Rui Ze Ang Zhi Gong Yi Chi Ji Zhu Lao Ren Rong Zheng Na Ce Zin Sai Yi Jue Bie Cheng Jun Dou Wei Yi Zhe Yan Cuk'; + case 66: + return 'San Lun Ping Zhao Han Yu Dai Zhao Fei Sha Ling Ta Qu Mang Ye Bao Gui Gua Nan Ge Gaa Shi Ke Suo Ci Zhou Tai Kuai Qin Xu Du Ce Huan Cong Sai Zheng Qian Jin Zong Wei Haan Gim Xi Na Pu Sou Ju Zhen Shao Tao Ban Ta Qian Weng Rong Luo Hu Sou Zhong Pu Mie Jin Shao Mi Shu Ling Lei Jiang Leng Zhi Diao Zaam San Gu Fan Mei Sui Jian Tang Xie Ku Wu Fan Luo Can Ceng Ling Yi Cong Yun Meng Yu Zhi Yi Dan Huo Wei Tan Se Xie Sou Song Qian Liu Yi Au Lei Li Fei Lie Lin Xian Xiao Ou Mi Xian Rang Zhuan Shuang Yan Bian Ling Hong Qi Liao Ban Bi Hu Hu Ce Pei Qiong Ming Jiu Bu Mei San Wei Zong Bei Li Quan Sam Hun Xiang Zing Shi Ying Nan Huang Jiu Yan Deoi Sa Tuan Xie Zhe Men Xi Man Zoeng Huang Tan Xiao Ye Bi Luo Fan Li Cui Chua Dao Di Kuang Chu Xian Chan Mi Qian Qiu Zhen Zi Cin Hu Gan Chi Guai Mu Bo Hua Geng Yao Mao Wang Ngau Wu Jik Ru Xue Zheng Min Jiang O Zhan Zuo Yue Lie Syu Zhou Bi Ren Yu Gin Chuo Er Yi Mi Qing Wang Ji Bu Syu Bie Fan Yue Li Fan Qu Fu Er E Zheng Tian Yu Jin Qi Ju Lai Che Bei Niu Yi Xu Mou Xun Fu Cau Nin Ting Beng Zha Wei'; + case 67: + return 'Ke Yao Ou Xiao Geng Tang Gui Hui Ta Gong Yao Da Qi Jin Lue Mi Mi Jian Lu Fan Ou Mi Jie Fu Bie Huang Su Yao Nie Jin Lian Bo Jian Ti Ling Zuan Shi Yin Dao Chou Ca Mie Yan Lan Chong Jiao Shuang Quan Nie Luo Fan Shi Luo Zhu Zi Chou Juan Jiong Er Yi Rui Cai Ren Fu Lan Sui Yu You Dian Ling Zhu Ta Ping Zhai Jiao Chui Bu Kou Cun Jyun Han Han Mou Hu Gong Di Fu Xuan Mi Mei Lang Gu Zhao Ta Yu Zong Li Lu Wu Lei Ji Li Li Zong Po Yang Wa Tuo Peng Zong Zhao Gui Xu Nai Que Wei Zheng Dong Wei Bo Zin Huan Xuan Zan Li Yan Huang Xue Hu Bao Ran Xiao Po Liao Zhou Yi Xu Luo Kao Chu Fu Na Han Chao Lu Zhan Ta Fu Hong Zeng Qiao Su Pin Guan Lou Hun Chu Ze Er Er Ruan Qi Si Ju Gaak Yan Bang Ye Zi Ne Chuang Ba Cao Ti Han Zuo Ba Zhe Wa Geng Bi Er Zhu Wu Wen Zhi Zhou Lu Wen Gun Qiu La Zai Sou Mian Di Qi Cao Piao Lian Shi Long Su Qi Yuan Feng Xu Jue Di Pian Guan Niu Ren Zhen Gai Pi Tan Chao Chun He Zhuan Mo Bie Qi Shi Bi Jue Si Taam Gua Na Hui Xi Er Xiu Mou Zyu Xi Zhi Run Ju Die Zhe Shao Meng Bi Han Yu Xian Pang Neng Can Bu Bong Qi'; + case 68: + return 'Ji Zhuo Lu Jun Xian Xi Cai Wen Zhi Zi Kun Cong Tian Chu Di Chun Qiu Zhe Zha Rou Bin Ji Xi Zhu Jue Ge Ji Da Chen Suo Ruo Xiang Huang Qi Zhu Sun Chai Weng Ke Kao Gu Gai Fan Cong Cao Zhi Chan Lei Xiu Zhai Zhe Yu Gui Gong Zan Dan Huo Sou Tan Gu Xi Man Duo Ao Pi Wu Ai Meng Pi Meng Yang Zhi Bo Ying Wei Rang Lan Yan Chan Quan Zhen Pu Dou Tai Fei Shu Zit Dang Cuo Tan Tian Chi Ta Jia Shun Huang Liao Caa Chen Jin E Gou Fu Duo Gu E Beng Tao Di Do Di Bu Wan Zhao Lun Qi Mu Qian Gin Zong Sou You Zhou Ta Zek Su Bu Xi Jiang Cao Fu Teng Che Fu Fei Wu Xi Yang Ming Pang Mang Seng Meng Cao Tiao Kai Bai Xiao Xin Qi Seoi Cong Shao Huan Niu Xiao Chen Dan Feng Yin Ang Ran Ri Man Fan Qu Shi He Bian Dai Mo Deng Gong Jyun Kuang Zing Cha Duo You Hao Tin Gua Xue Lei Jin Qi Qu Wang Yi Liao Gat Dang Yan Yi Yin Qi Zhe Xi Yi Ye Wu Zhi Zhi Han Chuo Fu Chun Ping Kuai Chou Haau Tuo Qiong Cong Gao Kua Qu Qu Zhi Meng Li Zhou Ta Zhi Gu Liang Hu La Dian Ci Ying Zi Qi Zhuo Cha Mao Du Yin Chai Rui Hen Ruan Fu Lai Xing Jian Yi Mei Kau Mang Ji Suo Han'; + case 69: + return 'Seoi Li Zi Zu Yao Ge Li Qi Gong Li Bing Suo Gou Duk Su Chou Jian Xie Bei Xu Jing Pu Ling Xiang Zuo Diao Chun Qing Nan Zhai Lu Yi Shao Yu Hua Li Pa Siu Mui Li Ung Cik Shuang So Yi Ning Si Ku Fu Yi Deng Ran Ce Gaan Ti Qin Biao Sui Wei Dun Se Ai Qi Zun Kuan Fei Jyun Yin Zing Sao Dou Hui Xie Ze Tan Tang Zhi Yi Fu E Fuk Jun Jia Cha Xian Man Syun Bi Ling Jie Kui Jia Ceoi Cheng Lang Xing Fei Lu Zha He Ji Ni Ying Xiao Teng Lao Ze Kui Goeng Qian Ju Piao Fan Tou Lin Mi Zhuo Xie Hu Mi Jie Za Cong Li Ran Zhu Yin Han Hiu Yi Luan Yue Ran Ling Niang Yu Nue Heoi Yi Nue Yi Qian Xia Chu Yin Mi Xi Na Kan Zu Xia Yan Tu Ti Wu Suo Yin Chong Zhou Mang Yuan Nu Miao Zao Wan Li Qu Na Shi Bi Zi Bang Gaap Juan Xiang Kui Pai Kuang Xun Zha Yao Kun Hui Xi E Yang Tiao You Jue Li Jyun Li Cheng Ji Hu Zhan Fu Chang Guan Ju Meng Chang Tan Mou Xing Li Yan Sou Shi Yi Bing Cong Hou Wan Di Ji Ge Han Bo Xiu Liu Can Can Yi Xuan Yan Zao Han Yong Zong Fung Kang Yu Qi Zhe Ma Fung Waan Shuang Jin Guan Pu Lin Dang Ting Jiang La Yi Yong Ci Yan Jie Xun Wei Xian Ning'; + case 70: + return 'Fu Ge Zim Mo Zhu Nai Xian Wen Li Can Mie Jian Ni Chai Wan Xu Nu Mai Zui Kan Ka Hang Haam Yu Wei Zhu Gei Gan Yi Maa Diao Fu Bi Zhu Zi Shu Xia Ni Joeng Jiao Xun Chong Nou Rong Zhi Sang Shan Yu Zam Jin Zung Lu Han Bie Yi Zui Zhan Yu Wan Ni Guan Jue Beng Can Zung Duo Qi Yao Kui Ruan Hou Xun Xie Syun Kui Fei Xie Bo Ke Cui Xu Bai Ou Zong Bang Ti Chu Chi Niao Guan Feng Xie Deng Wei Jue Kui Zeng Sa Duo Ling Meng Fan Guo Meng Long Kei Ying Hin Guan Cu Li Du Cin Biao Qian Xi Nung De De Xian Lian Ci Shao Xie Shi Wei Cam Cam He You Lu Lai Ying Sheng Juan Qi Jian Yun Gou Qi Cong Lin Ji Mai Chuang Nian Bin Li Ling Gang Cheng Xuan Xian Hu Bi Zu Dai Dai Hun Sai Che Ti Jyu Nuo Zhi Liu Fei Jiao Guan Xi Lin Xuan Reng Tao Pi Xin Shan Zhi Wa Tou Tian Yi Xie Pi Yao Yao Nu Hao Nin Yin Fan Nan Yao Wan Yuan Xia Zhou Yuan Shi Mian Xi Ji Tao Fei Xue Ni Ci Mi Bian Gaam Na Yu E Zhi Ren Xu Lue Hui Xun Nao Han Jia Dou Hua Tu Ping Cu Xi Song Mi Xin Wu Qiong Zhang Tao Xing Jiu Ju Hun Ti Man Yan Ji Shou Lei Wan Che Can Jie You Hui Zha Su Ge'; + case 71: + return 'Nao Xi Hou Dui Chi Wei Zhe Gun Chao Chi Zao Hui Luan Liao Lao Tuo Hui Wu Ao She Sui Mai Tan Xin Jing An Ta Chan Wei Tuan Ji Chen Che Yu Xian Xin Hung Daan Seon Nao Waan Yan Qiu Jiang Song Jun Liao Ju Hou Man Lie Jyut Chu Chi Xiang Qin Mei Shu Chai Chi Gu Yu Yin Syu Liu Lao Shu Zhe Shuang Hui Fat Fui E Mung Sha Zong Jue Jun Tuan Lou Wei Chong Zhu Lie Fun Zhe Zhao Yi Chu Ni Bo Suan Yi Hao Ya Huan Man Man Qu Lao Hao Zhong Min Xian Zhen Shu Zuo Zhu Gou Xuan Yi Zhi Xie Jin Can Zai Bu Liang Zhi Ji Wan Guan Ju Jing Ai Fu Gui Hou Yan Ruan Zhi Biao Yi Suo Die Gui Sheng Xun Chen She Qing Coeng Si Chun Hong Dong Cheng Wei Ru Shu Cai Ji Za Qi Yan Fu Yu Fu Po Zhi Tan Zuo Che Qu You He Hou Gui E Jiang Yun Tou Cun Tu Fu Zuo Hu Ngo Bo Zhao Jue Tang Jue Fu Huang Chun Yong Chui Suo Chi Qian Cai Xiao Man Can Qi Jian Bi Ji Zhi Zhu Qu Zhan Ji Bian Zaan Li Li Yue Quan Cheng Fu Cha Tang Shi Hang Qie Qi Bo Na Tou Chu Cu Yue Zhi Chen Chu Bi Meng Ba Tian Min Lie Feng Cheng Qiu Tiao Fu Kuo Jian Cung Cuk Zhen Qiu Zuo Chi Kui Lie Bei Du Wu So Zhuo Lu'; + case 72: + return 'Tang Zai Chu Liang Tian Kun Chang Jue Tu Huan Fei Bi Daap Xia Wo Ji Qu Kui Hu Qiu Sui Cai Zi Qiu Pi Pang Wa Yao Rong Xun Cu Die Chi Cuo Meng Xuan Duo Bie Zhe Chu Chan Gui Duan Zou Deng Lai Teng Yue Quan Zhu Ling Chen Zhen Fu She Tiao Kua Ai Man Qiong Shu Hai Shan Wai Zhan Long Jiu Li Gei Chun Rong Yue Jue Kang Fan Qi Hong Fu Lu Hong Tuo Min Tian Juan Qi Zheng Qing Gong Tian Lang Mao Yin Lu Yuan Ju Pi Hang Xie Bian Hun Zhu Rong Sang Wu Cha Keng Shan Peng Man Xiu Zung Cong Keng Zhuan Chan Si Chong Sui Bei Kai Mit Zhi Wei Min Ling Zuan Nie Ling Qi Yue Lip Yi Xi Chen Jung Rong Chen Nong You Ji Bo Fang Dau Cu Di Jiao Yu He Xu Yu Qu Sau Bai Geng Jiong Gwai Ya Shu You Song Ye Cang Yao Shu Yan Shuai Liao Cong Yu Bo Sui Cin Yan Lei Lin Ti Du Yue Ji Cin Yun Bong Daan Ju Ju Chu Chen Gong Xiang Xian An Gui Yu Lei Se Tu Chen Xing Qiu Hang Saa Dang Cai Di Yan Zi Gung Ying Chan Gwai Li Suo Ma Ma Gou Tang Pei Lou Qi Cuo Tu E Can Jie Yi Ji Dang Jue Bi Lei Yi Chun Chun Po Li Zai Tai Po Cu Ju Xu Fan Si Xu Er Huo Zhu Ran Fa Juan Han Liang Zhi Mi Yu'; + case 73: + return 'Joek Cen Mei Yin Mian Tu Kui Sau Hei Mi Rong Yu Qiang Mi Ju Pi Jin Wang Ji Meng Jian Xue Bao Gan Chan Li Li Qiu Dun Ying Yun Chen Zhi Ran Baat Lue Kai Gui Yue Hui Pi Cha Duo Chan Sha Shi She Xing Ying Shi Chi Ye Han Fei Ye Yan Zuan Sou Jin Duo Xian Guan Tao Qie Chan Han Meng Yue Cu Qian Jin Shan Mu Yuan Coeng Peng Zheng Zhi Chun Yu Mou Wan Jiang Qi Su Pie Tian Kuan Cu Sui Co Jie Jian Ao Jiao Ye Ye Long Zao Bao Lian Ceoi Huan Lu Wei Xian Tie Bo Zheng Zhu Bei Meng Xie Ou You Xiao Li Zha Mi Ngit Ye Mou Mat Po Xie Lai Jyu Bong Shan Zhuo Wai Shan Jue Ji Jie Sei Niao Ao Chu Wu Guan Xie Ting Xue Dang Zhan Tan Peng Xie Xu Xian Si Kua Zheng Wu Huo Run Wen Du Huan Kuo Fu Chuai Xian Qin Qie Lan Man Ya Ying Que Hang Chun Zhi Gau Wei Yan Xiang Yi Ni Zheng Chuai Jyu Shi Ding Zi Jue Xu Yuan Zung Gwang Xu Dao Tian Ge Yi Hong Yi Sai Li Ku Xian Sui Xi Xuan Fung Gwok Di Lai Zhou Nian Cheng Jian Bi Zhuan Ling Hao Bang Tang Chi Ma Xian Shuan Yong Qu Pu Hui Wei Yi Ye Gam Che Hao Bin Si Xian Chan Hun Han Ci Zhi Qi Kui Rou Gu Ying Xiong Gap Hu Cui Syu Que'; + case 74: + return 'Di Wu Qiu Aan Yan Liao Bi Soeng Bin Yuan Nue Bao Ying Hong Ci Qia Ti Yu Lei Bao Ji Fu Xian Cen Hu Se Beng Qing Yu Wa Ai Han Dan Ge Di Huo Pang Zhui Ling Mai Mai Lian Xiao Xue Zhen Po Fu Nou Xi Dui Dan Yun Xian Yin Shu Dui Beng Hu Fei Fei Za Bei Fei Xian Shi Mian Zhan Zhan Zhan Hui Fu Wan Mo Qiao Liao Cim Mie Hu Hong Yu Qi Duo Ang Saa Ba Di Xuan Di Bi Zhou Pao Tie Yi Ting Jia Zhi Tu Xie Dan Tiao Xie Chang Yuan Guan Liang Beng Gei Lu Ji Xuan Shu Du Sou Hu Yun Chan Bang Rong E Weng Ba Feng Yu Zhe Fen Guan Bu Ge Dun Huang Du Ti Bo Qian Lie Long Wei Zhan Lan Sui Na Bi Tuo Zhu Die Bu Ju Po Xia Wei Po Da Fan Chan Hu Za Zai Zai Zai Zai Fan Xie Hong Chi Bao Yin Gaa Jing Bo Ruan Chou Ying Yi Gai Kun Yun Zhen Ya Ju Hou Min Bai Ge Bian Zhuo Hao Zhen Sheng Gen Bi Duo Chun Chua San Cheng Ran Chen Mao Pei Wei Pi Fu Zhuo Qi Lin Yi Men Wu Qi Die Chen Xia He Sang Gua Hou Ao Fu Qiao Hun Pi Yan Si Xi Ming Kui Ge Hou Ao San Shuang Lou Zhen Hui Chan Lin Na Han Du Jin Mian Fan E Chao Hong Hong Yu Xue Pao Bi Chao'; + case 75: + return 'You Yi Xue Sa Xu Li Li Yuan Dui Huo Sha Leng Pou Hu Guo Bu Rui Wei Sou An Yu Xiang Heng Yang Xiao Yao Bi Ci Heng Tao Liu Fei Zhu Tou Xi Zan Yi Dou Yuan Jiu Bo Ti Ying Tou Yi Nian Shao Ben Gou Ban Mo Gai En She Caan Zhi Yang Jian Yuan Shui Ti Wei Xun Zhi Yi Ren Shi Hu Ne Ye Jian Sui Ying Bao Hu Hu Ye Bin Yang Lian Xi En Dui Zan Zhu Ying Ying Jin Chuang Dan Liu Kuai Yi Ye Jian En Ning Ci Qian Xue Bo Mi Shui Mo Liang Qi Qi Shou Fu Bo Beng Bie Yi Wei Huan Fan Qi Mao Fu Ang Ang Fu Qi Qun Tuo Yi Bo Pian Ba Keoi Xuan Jyut Pei Yu Chi Lu Yi Li Niao Xi Wu Gwing Lei Pu Zhuo Zui Zhuo Chang An Er Yu Leng Fu Zha Hun Chun Sou Bi Bi Zha Song He Li Giu Han Zai Gu Cheng Lou Mo Mi Mai Ao Zhe Zhu Huang Fan Deng Tong Biu Du Wo Wei Ji Chi Lin Biao Long Jian Nie Luo Shen On Gua Nie Yi Ku Wan Wa Qia Bo Kao Ling Gan Gua Hai Kuang Heng Kui Ze Ting Lang Bi Huan Po Yao Wan Ti Sui Kua Dui Ao Jian Mo Kui Kuai An Ma Qing Qiao Hou Kao Hao Duo Xian Nai Suo Jie Pi Pa Song Chang Nie Man Song Ci Xian Kuo Gou Di Pou Tiao Zu'; + case 76: + return 'Wo Fei Cai Peng Sai Sou Rou Qi Cuo Pan Bo Man Zong Ci Kui Ji Lan Sou Meng Mian Pan Lu Zuan Jiu Liu Yi Wen Li Li Zeng Zhu Hun Shen Chi Xing Wang Dong Huo Pi Hu Mei Che Mei Chao Ju Nou Ji Yi Ru Ling Ya Ding Qi Zi Mong Bang Gong Ze Jie Yu Qin Bei Ba Tuo Yang Qiao You Zhi Jie Mo Sheng Shan Qi Shan Mi Gong Yi Geng Geng Tou Fu Xue Ye Ting Tiao Mou Liu Can Li Shu Lu Huo Cuo Pai Liu Ju Zhan Ju Zheng Zu Xian Zhi Zeoi Gyun La Mong Biu La Xu Geng E Mu Zhong Ti Yuan Zhan Geng Weng Lang Yu Sou Zha Hai Hua Zhan Chang Lou Chan Zhi Wei Xuan Zao Min Gui Su Cuk Maa Si Duo Cen Kuan Teng Nei Lao Lu Yi Xie Yan Qing Pu Chou Xian Guan Jie Lai Meng Ye Cong Li Yin Chun Qiu Teng Yu Zau Gau Dai Du Hong Si Xi Qi Ci Yuan Ji Yun Fang Gong Hang Zhen Que Jyun Niu Jie Pi Gan Xuan Sheng Shi Qiao Ci Die Bo Diao Wan Ci Zhi Bai Wu Bao Dan Ba Tong Gyun Gong Jiu Gui Ci You Yuan Lao Ju Fu Nie E E Xing Kan Yan Tu Pou Beng Ming Shui Yan Qi Yuan Bie Ling Xuan Hou Huang Yao Juan Kui E Ji Mo Chong Bao Wu Zhen Xu Ta Chi Xi Cong Ma Kou Yan Can Au He Deng Ran'; + case 77: + return 'Tong Yu Xiang Nao Shun Fen Pu Ling Ao Huan Yi Huan Meng Ying Lei Yan Bao Die Ling Shi Jiao Lie Jing Ju Ti Pi Gang Xiao Wai Chuai Di Huan Yao Li Mi Hu Sheng Jia Yin Wei Jyun Piao Lu Ling Yi Cai Shan Hu Shu Tuo Mo Hua Tie Bing Peng Hun Fu Guo Bu Li Chan Pi Cuo Meng Suo Qiang Zhi Kuang Bi Ao Meng Xian Ku Tou Tuan Wei Xian Tan Tuan Lao Chan Ni Ni Li Dong Ju Qian Bo Shai Zha Tao Qian Nong Yi Jing Gan Di Jian Mei Da Jian Yu Xie Zai Mang Li Gun Xun Ta Zhe Yang Tuan Shang Xi Qiao Wei Ying Chua Qu Wa Zhi Ting Gu Shang Ca Fu Tie Ta Ta Zhuo Han Ping He Zhui Zhou Bo Liu Nu Xi Pao Di He Ti Wai Ti Qi Ji Chi Ba Jin Ke Li Ju Qu La Gu Qia Qi Xian Jian Shi Jian Ai Hua Zha Ze Yao Zhan Ji Cha Yan Jian Wong Yan Jiao Tong Nan Yue Ceoi Chi De Mo Zo Qian Kun Zhun Meng Xu Song Shi Bi XiaoChu Lu Tai Pi TongRen DaYou Qian Yu Sui Gu Lin Guan ShiKe Bi Bo Fu WuWang DaChu Yi DaGuo Kan Li Xian Heng Dun DaZhuang Jin MingYi JiaRen Kui Jian Xie Sun Yi Guai Gou Cui Sheng Kun Jing Ge Ding Zhen Gen Jian GuiMei Feng Lu Xun Dui Huan Jie ZhongFu XiaoGuo JiJi WeiJi'; + case 78: + return 'Yi Ding Kao Qi Shang Xia Han Wan Zhang San Shang Xia Ji Bu Yu Mian Gai Chou Chou Zhuan Qie Pi Shi Shi Qiu Bing Ye Cong Dong Si Cheng Diu Qiu Liang Diu You Liang Yan Bing Sang Gun Jiu Ge Ya Qiang Zhong Ji Jie Feng Guan Chuan Chan Lin Zhuo Zhu Ba Wan Dan Wei Zhu Jing Li Ju Pie Fu Yi Yi Nai Wu Jiu Jiu Tuo Me Yi Yi Zhi Wu Zha Hu Fa Le Yin Ping Pang Qiao Hu Guai Cheng Cheng Yi Yin Ya Mie Jiu Qi Ye Xi Xiang Gai Jiu Xia Hu Shu Dou Shi Ji Nang Jia Ju Shi Mao Hu Mai Luan Zi Ru Xue Yan Fu Sha Na Gan Suo Yu Cui Zhe Qian Zhi Gui Gan Luan Lin Yi Jue Le Ma Yu Zheng Shi Shi Er Chu Yu Kui Yu Yun Hu Qi Wu Jing Si Sui Gen Gen Ya Xie Ya Qi Ya Ji Tou Wang Kang Da Jiao Hai Yi Chan Heng Mu Ye Xiang Jing Ting Liang Xiang Jing Ye Qin Bo You Xie Dan Lian Duo Men Ren Ren Ji Ji Wang Yi Shen Ren Le Ding Ze Jin Pu Chou Ba Zhang Jin Jie Bing Reng Cong Fo San Lun Bing Cang Zi Shi Ta Zhang Fu Xian Xian Tuo Hong Tong Ren Qian Gan Ge Bo Dai Ling Yi Chao Chang Sa Chang Yi Mu Men Ren Fan Chao Yang Qian Zhong Pi Wo Wu Jian Jia Yao Feng Cang Ren Wang Fen Di Fang'; + case 79: + return 'Zhong Qi Pei Yu Diao Dun Wu Yi Xin Kang Yi Ji Ai Wu Ji Fu Fa Xiu Jin Pi Dan Fu Tang Zhong You Huo Hui Yu Cui Yun San Wei Chuan Che Ya Xian Shang Chang Lun Cang Xun Xin Wei Zhu Ze Xian Nu Bo Gu Ni Ni Xie Ban Xu Ling Zhou Shen Qu Ci Beng Shi Jia Pi Yi Si Yi Zheng Dian Han Mai Dan Zhu Bu Qu Bi Zhao Ci Wei Di Zhu Zuo You Yang Ti Zhan He Bi Tuo She Yu Yi Fu Zuo Gou Ning Tong Ni Xian Qu Yong Wa Qian Shi Ka Bao Pei Hui He Lao Xiang Ge Yang Bai Fa Ming Jia Er Bing Ji Hen Huo Gui Quan Tiao Jiao Ci Yi Shi Xing Shen Tuo Kan Zhi Gai Lai Yi Chi Kua Guang Li Yin Shi Mi Zhu Xu You An Lu Mou Er Lun Dong Cha Chi Xun Gong Zhou Yi Ru Cun Xia Si Dai Lu Ta Jiao Zhen Ce Qiao Kuai Chai Ning Nong Jin Wu Hou Jiong Cheng Zhen Zuo Chou Qin Lu Ju Shu Ting Shen Tui Bo Nan Xiao Bian Tui Yu Xi Cu E Qiu Xu Guang Ku Wu Jun Yi Fu Liang Zu Qiao Li Yong Hun Jing Qian San Pei Su Fu Xi Li Fu Ping Bao Yu Qi Xia Xin Xiu Yu Di Che Chou Zhi Yan Lia Li Lai Si Jian Xiu Fu Huo Ju Xiao Pai Jian Biao Chu Fei Feng Ya An Bei Yu Xin Bi Hu'; + case 80: + return 'Chang Zhi Bing Jiu Yao Cui Lia Wan Lai Cang Zong Ge Guan Bei Tian Shu Shu Men Dao Tan Jue Chui Xing Peng Tang Hou Yi Qi Ti Gan Jing Jie Sui Chang Jie Fang Zhi Kong Juan Zong Ju Qian Ni Lun Zhuo Wo Luo Song Leng Hun Dong Zi Ben Wu Ju Nai Cai Jian Zhai Ye Zhi Sha Qing Ning Ying Cheng Qian Yan Ruan Zhong Chun Jia Ji Wei Yu Bing Ruo Ti Wei Pian Yan Feng Tang Wo E Xie Che Sheng Kan Di Zuo Cha Ting Bei Xie Huang Yao Zhan Chou Yan You Jian Xu Zha Ci Fu Bi Zhi Zong Mian Ji Yi Xie Xun Cai Duan Ce Zhen Ou Tou Tou Bei Za Lou Jie Wei Fen Chang Gui Sou Zhi Su Xia Fu Yuan Rong Li Nu Yun Jiang Ma Bang Dian Tang Hao Jie Xi Shan Qian Jue Cang Chu San Bei Xiao Yong Yao Tan Suo Yang Fa Bing Jia Dai Zai Tang Gu Bin Chu Nuo Can Lei Cui Yong Zao Zong Beng Song Ao Chuan Yu Zhai Zu Shang Chuang Jing Chi Sha Han Zhang Qing Yan Di Xie Lou Bei Piao Jin Lian Lu Man Qian Xian Tan Ying Dong Zhuan Xiang Shan Qiao Jiong Tui Zun Pu Xi Lao Chang Guang Liao Qi Cheng Chan Wei Ji Bo Hui Chuan Tie Dan Jiao Jiu Seng Fen Xian Ju E Jiao Jian Tong Lin Bo Gu Xian Su Xian Jiang Min Ye Jin Jia Qiao Pi Feng Zhou Ai Sai'; + case 81: + return 'Yi Jun Nong Chan Yi Dang Jing Xuan Kuai Jian Chu Dan Jiao Sha Zai Can Bin An Ru Tai Chou Chai Lan Ni Jin Qian Meng Wu Ning Qiong Ni Chang Lie Lei Lu Kuang Bao Yu Biao Zan Zhi Si You Hao Qing Chen Li Teng Wei Long Chu Chan Rang Shu Hui Li Luo Zan Nuo Tang Yan Lei Nang Er Wu Yun Zan Yuan Xiong Chong Zhao Xiong Xian Guang Dui Ke Dui Mian Tu Chang Er Dui Er Jin Tu Si Yan Yan Shi Sap Dang Qian Dou Fen Mao Shen Dou Baak Jing Li Huang Ru Wang Nei Quan Liang Yu Ba Gong Liu Xi Han Lan Gong Tian Guan Xing Bing Qi Ju Dian Zi Fen Yang Jian Shou Ji Yi Ji Chan Jiong Mao Ran Nei Yuan Mao Gang Ran Ce Jiong Ce Zai Gua Jiong Mao Zhou Mao Gou Xu Mian Mi Rong Yin Xie Kan Jun Nong Yi Mi Shi Guan Meng Zhong Ju Yuan Ming Kou Lin Fu Xie Mi Bing Dong Tai Gang Feng Bing Hu Chong Jue Hu Kuang Ye Leng Pan Fu Min Dong Xian Lie Qia Jian Jing Sou Mei Tu Qi Gu Zhun Song Jing Liang Qing Diao Ling Dong Gan Jian Yin Cou Ai Li Chuang Ming Zhun Cui Si Duo Jin Lin Lin Ning Xi Du Ji Fan Fan Fan Feng Ju Chu Zheng Feng Mu Zhi Fu Feng Ping Feng Kai Huang Kai Gan Deng Ping Qian Xiong Kuai Tu Ao Chu Ji Dang Han Han Zao'; + case 82: + return 'Dao Diao Dao Ren Ren Chuang Fen Qie Yi Ji Kan Qian Cun Chu Wen Ji Dan Xing Hua Wan Jue Li Yue Lie Liu Ze Gang Chuang Fu Chu Qu Diao Shan Min Ling Zhong Pan Bie Jie Jie Pao Li Shan Bie Chan Jing Gua Geng Dao Chuang Kui Ku Duo Er Zhi Shua Quan Sha Ci Ke Jie Gui Ci Gui Kai Duo Ji Ti Jing Lou Luo Ze Yuan Cuo Xue Kei La Qian Sha Chuang Gua Jian Cuo Li Ti Fei Pou Chan Qi Chuang Zi Gang Wan Bo Ji Duo Qing Shan Du Jian Ji Bo Yan Ju Huo Sheng Jian Duo Duan Wu Gua Fu Sheng Jian Ge Da Kai Chuang Chuan Chan Tuan Lu Li Peng Shan Piao Kou Jiao Gua Qiao Jue Hua Zha Zhuo Lian Ju Pi Liu Gui Jiao Gui Jian Jian Tang Huo Ji Jian Yi Jian Zhi Chan Jian Mo Li Zhu Li Ya Quan Ban Gong Jia Wu Mai Lie Jin Keng Xie Zhi Dong Zhu Nu Jie Qu Shao Yi Zhu Mo Li Jin Lao Lao Juan Kou Yang Wa Xiao Mou Kuang Jie Lie He Shi Ke Jin Gao Bo Min Chi Lang Yong Yong Mian Ke Xun Juan Qing Lu Bu Meng Chi Lei Kai Mian Dong Xu Xu Kan Wu Yi Xun Weng Sheng Lao Mu Lu Piao Shi Ji Qin Jiang Chao Quan Xiang Yi Jue Fan Juan Tong Ju Dan Xie Mai Xun Xun Lu Li Che Rang Quan Bao Shao Yun Jiu Bao Gou Wu'; + case 83: + return 'Yun Wen Xiong Gai Gai Bao Cong Yi Xiong Peng Ju Tao Ge Pu E Pao Fu Gong Da Jiu Gong Bi Hua Bei Nao Shi Fang Jiu Yi Za Jiang Kang Jiang Kuang Hu Xia Qu Fan Gui Qie Zang Kuang Fei Hu Yu Gui Kui Hui Dan Gui Lian Lian Suan Du Jiu Jue Xi Pi Qu Yi Ke Yan Bian Ni Qu Shi Xun Qian Nian Sa Zu Sheng Wu Hui Ban Shi Xi Wan Hua Xie Wan Bei Zu Zhuo Xie Dan Mai Nan Dan Ji Bo Shuai Bo Kuang Bian Bu Zhan Ka Lu You Lu Xi Gua Wo Xie Jie Jie Wei Ang Qiong Zhi Mao Yin Wei Shao Ji Que Luan Chi Juan Xie Xu Jin Que Wu Ji E Qing Xi San Chang Wei E Ting Li Zhe Han Li Ya Ya Yan She Di Zha Pang Ya Qie Ya Zhi Ce Pang Ti Li She Hou Ting Zui Cuo Fei Yuan Ce Yuan Xiang Yan Li Jue Sha Dian Chu Jiu Jin Ao Gui Yan Si Li Chang Lan Li Yan Yan Yuan Si Gong Lin Rou Qu Qu Er Lei Du Xian Zhuan San Can Can Can Can Ai Dai You Cha Ji You Shuang Fan Shou Guai Ba Fa Ruo Shi Shu Zhuo Qu Shou Bian Xu Xia Pan Sou Ji Wei Sou Die Rui Cong Kou Gu Ju Ling Gua Dao Kou Zhi Jiao Zhao Ba Ding Ke Tai Chi Shi You Qiu Po Ye Hao Si Tan Chi Le Diao Ji Liao Hong'; + case 84: + return 'Mie Xu Mang Chi Ge Xuan Yao Zi He Ji Diao Cun Tong Ming Hou Li Tu Xiang Zha Xia Ye Lu Ya Ma Ou Huo Yi Jun Chou Lin Tun Yin Fei Bi Qin Qin Jie Bu Fou Ba Dun Fen E Han Ting Keng Shun Qi Hong Zhi Yin Wu Wu Chao Na Xue Xi Chui Dou Wen Hou Hong Wu Gao Ya Jun Lu E Ge Mei Dai Qi Cheng Wu Gao Fu Jiao Hong Chi Sheng Na Tun Wu Yi Dai Ou Li Bei Yuan Guo Wen Qiang Wu E Shi Juan Pen Wen Ne M Ling Ran You Di Zhou Shi Zhou Tie Xi Yi Qi Ping Zi Gu Ci Wei Xu He Nao Ga Pei Yi Xiao Shen Hu Ming Da Qu Ju Han Za Tuo Duo Pou Pao Bie Fu Yang He Za He Hai Jiu Yong Fu Da Zhou Wa Ka Gu Ka Zuo Bu Long Dong Ning Ta Si Xian Huo Qi Er E Guang Zha Xi Yi Lie Zi Mie Mi Zhi Yao Ji Zhou Ge Shu Zan Xiao Hai Hui Kua Huai Tao Xian E Xuan Xiu Guo Yan Lao Yi Ai Pin Shen Tong Hong Xiong Duo Wa Ha Zai You Die Pai Xiang Ai Gen Kuang Ya Da Xiao Bi Hui Nian Hua Xing Kuai Duo Fen Ji Nong Mou Yo Hao Yuan Long Pou Mang Ge O Chi Shao Li Na Zu He Ku Xiao Xian Lao Bo Zhe Zha Liang Ba Mie Lie Sui Fu Bu Han Heng Geng Shuo Ge'; + case 85: + return 'You Yan Gu Gu Bei Han Suo Chun Yi Ai Jia Tu Xian Wan Li Xi Tang Zuo Qiu Che Wu Zao Ya Dou Qi Di Qin Ma Mo Gong Dou Qu Lao Liang Suo Zao Huan Lang Sha Ji Zu Wo Feng Jin Hu Qi Shou Wei Shua Chang Er Li Qiang An Ze Yo Nian Yu Tian Lai Sha Xi Tuo Hu Ai Zhao Nou Ken Zhuo Zhuo Shang Di Heng Lin A Cai Xiang Tun Wu Wen Cui Sha Gu Qi Qi Tao Dan Dan Ye Zi Bi Cui Chuai He Ya Qi Zhe Fei Liang Xian Pi Sha La Ze Ying Gua Pa Zhe Se Zhuan Nie Guo Luo Yan Di Quan Chan Bo Ding Lang Xiao Ju Tang Chi Ti An Jiu Dan Ka Yong Wei Nan Shan Yu Zhe La Jie Hou Han Die Zhou Chai Wai Nuo Yu Yin Za Yao O Mian Hu Yun Chuan Hui Huan Huan Xi He Ji Kui Zhong Wei Sha Xu Huang Duo Nie Xuan Liang Yu Sang Chi Qiao Yan Dan Pen Can Li Yo Zha Wei Miao Ying Pen Bu Kui Xi Yu Jie Lou Ku Zao Hu Ti Yao He A Xiu Qiang Se Yong Su Hong Xie Ai Suo Ma Cha Hai Ke Da Sang Chen Ru Sou Wa Ji Pang Wu Qian Shi Ge Zi Jie Lao Weng Wa Si Chi Hao Suo Gaa Hai Suo Qin Nie He Zhi Sai N Ge Na Die Ai Qiang Tong Bi Ao Ao Lian Zui Zhe Mo Sou Sou Tan'; + case 86: + return 'Di Qi Jiao Chong Jiao Kai Tan Shan Cao Jia Ai Xiao Piao Lou Ga Gu Xiao Hu Hui Guo Ou Xian Ze Chang Xu Po De Ma Ma Hu Lei Du Ga Tang Ye Beng Ying Sai Jiao Mi Xiao Hua Mai Ran Chuai Peng Lao Xiao Ji Zhu Chao Kui Zui Xiao Si Hao Fu Liao Qiao Xi Chu Chan Dan Hei Xun E Zun Fan Chi Hui Zan Chuang Cu Dan Yu Tun Ceng Jiao Ye Xi Qi Hao Lian Xu Deng Hui Yin Pu Jue Qin Xun Nie Lu Si Yan Ying Da Zhan O Zhou Jin Nong Hui Xie Qi E Zao Yi Shi Jiao Yuan Ai Yong Jue Kuai Yu Pen Dao Ga Hm Dun Dang Xin Sai Pi Pi Yin Zui Ning Di Lan Ta Huo Ru Hao Xia Ye Duo Pi Chou Ji Jin Hao Ti Chang Xun Me Ca Ti Lu Hui Bo You Nie Yin Hu Me Hong Zhe Li Liu Hai Nang Xiao Mo Yan Li Lu Long Mo Dan Chen Pin Pi Xiang Huo Mo Xi Duo Ku Yan Chan Ying Rang Dian La Ta Xiao Jue Chuo Huan Huo Zhuan Nie Xiao Ca Li Chan Chai Li Yi Luo Nang Za Su Xi Zen Jian Za Zhu Lan Nie Nang Lan Lo Wei Hui Yin Qiu Si Nin Jian Hui Xin Yin Nan Tuan Tuan Dun Kang Yuan Jiong Pian Yun Cong Hu Hui Yuan E Guo Kun Cong Tong Tu Wei Lun Guo Qun Ri Ling Gu Guo Tai Guo Tu You'; + case 87: + return 'Guo Yin Hun Pu Yu Han Yuan Lun Quan Yu Qing Guo Chuan Wei Yuan Quan Ku Pu Yuan Yuan Ya Tu Tu Tu Tuan Lue Hui Yi Huan Luan Luan Tu Ya Tu Ting Sheng Pu Lu Kuai Ya Zai Wei Ge Yu Wu Gui Pi Yi De Qian Qian Zhen Zhuo Dang Qia Xia Shan Kuang Chang Qi Nie Mo Ji Jia Zhi Zhi Ban Xun Yi Qin Mei Jun Rong Tun Fang Ben Ben Tan Kan Huai Zuo Keng Bi Jing Di Jing Ji Kuai Di Jing Jian Tan Li Ba Wu Fen Zhui Po Ban Tang Kun Qu Tan Zhi Tuo Gan Ping Dian Gua Ni Tai Pi Jiong Yang Fo Ao Lu Qiu Mu Ke Gou Xue Ba Chi Che Ling Zhu Fu Hu Zhi Chui La Long Long Lu Ao Dai Pao Min Xing Dong Ji He Lu Ci Chi Lei Gai Yin Hou Dui Zhao Fu Guang Yao Duo Duo Gui Cha Yang Yin Fa Gou Yuan Die Xie Ken Shang Shou E Bing Dian Hong Ya Kua Da Ka Dang Kai Hang Nao An Xing Xian Yuan Bang Fu Ba Yi Yin Han Xu Chui Qin Geng Ai Beng Fang Que Yong Jun Jia Di Mai Lang Juan Cheng Shan Jin Zhe Lie Lie Bu Cheng Hua Bu Shi Xun Guo Jiong Ye Nian Di Yu Bu Ya Quan Sui Pi Qing Wan Ju Lun Zheng Kong Chong Dong Dai Tan An Cai Chu Beng Kan Zhi Duo Yi Zhi Yi Pei Ji Zhun Qi Sao Ju Ni'; + case 88: + return 'Ku Ke Tang Kun Ni Jian Dui Jin Gang Yu E Peng Gu Tu Leng Fang Ya Qian Kun An Shen Duo Nao Tu Cheng Yin Hun Bi Lian Guo Die Zhuan Hou Bao Bao Yu Di Mao Jie Ruan Ye Geng Kan Zong Yu Huang E Yao Yan Bao Ci Mei Chang Du Tuo Yin Feng Zhong Jie Jin Heng Gang Chun Jian Ping Lei Xiang Huang Leng Duan Wan Xuan Ji Ji Kuai Ying Ta Cheng Yong Kai Su Su Shi Mi Ta Weng Cheng Tu Tang Que Zhong Li Zhong Bang Sai Zang Dui Tian Wu Zheng Xun Ge Zhen Ai Gong Yan Kan Tian Yuan Wen Xie Liu Hai Lang Chang Peng Beng Chen Lu Lu Ou Qian Mei Mo Zhuan Shuang Shu Lou Chi Man Biao Jing Ce Shu Zhi Zhang Kan Yong Dian Chen Zhi Xi Guo Qiang Jin Di Shang Mu Cui Yan Ta Zeng Qian Qiang Liang Wei Zhui Qiao Zeng Xu Shan Shan Ba Pu Kuai Dong Fan Que Mo Dun Dun Zun Di Sheng Duo Duo Tan Deng Mu Fen Huang Tan Da Ye Zhu Jian Ao Qiang Ji Qiao Ken Yi Pi Bi Dian Jiang Ye Yong Xue Tan Lan Ju Huai Dang Rang Qian Xun Xian Xi He Ai Ya Dao Hao Ruan Jin Lei Kuang Lu Yan Tan Wei Huai Long Long Rui Li Lin Rang Chan Xun Yan Lei Ba Wan Shi Ren San Zhuang Zhuang Sheng Yi Mai Ke Zhu Zhuang Hu Hu Kun Yi Hu Xu Kun Shou Mang Zun'; + case 89: + return 'Shou Yi Zhi Gu Chu Jiang Feng Bei Zhai Bian Sui Qun Ling Fu Cuo Xia Xiong Xie Nao Xia Kui Xi Wai Yuan Mao Su Duo Duo Ye Qing Wai Gou Gou Qi Meng Meng Yin Huo Chen Da Ze Tian Tai Fu Guai Yao Yang Hang Gao Shi Tao Tai Tou Yan Bi Yi Kua Jia Duo Hua Kuang Yun Jia Ba En Lian Huan Di Yan Pao Juan Qi Nai Feng Xie Fen Dian Quan Kui Zou Huan Qi Kai Zha Ben Yi Jiang Tao Zang Ben Xi Huang Fei Diao Xun Beng Dian Ao She Weng Ha Ao Wu Ao Jiang Lian Duo Yun Jiang Shi Fen Huo Bi Luan Duo Nu Nu Ding Nai Qian Jian Ta Jiu Nuan Cha Hao Xian Fan Ji Shuo Ru Fei Wang Hong Zhuang Fu Ma Dan Ren Fu Jing Yan Hai Wen Zhong Pa Du Ji Keng Zhong Yao Jin Yun Miao Fou Chi Yue Zhuang Niu Yan Na Xin Fen Bi Yu Tuo Feng Wan Fang Wu Yu Gui Du Ba Ni Zhou Zhuo Zhao Da Nai Yuan Tou Xian Zhi E Mei Mo Qi Bi Shen Qie E He Xu Fa Zheng Min Ban Mu Fu Ling Zi Zi Shi Ran Shan Yang Man Jie Gu Si Xing Wei Zi Ju Shan Pin Ren Yao Dong Jiang Shu Ji Gai Xiang Hua Juan Jiao Gou Lao Jian Jian Yi Nian Zhi Ji Ji Xian Heng Guang Jun Kua Yan Ming Lie Pei E You Yan Cha Shen Yin Shi Gui Quan Zi'; + case 90: + return 'Song Wei Hong Wa Lou Ya Rao Jiao Luan Ping Xian Shao Li Cheng Xie Mang Fu Suo Mei Wei Ke Chuo Chuo Ting Niang Xing Nan Yu Na Pou Nei Juan Shen Zhi Han Di Zhuang E Pin Tui Xian Mian Wu Yan Wu Ai Yan Yu Si Yu Wa Li Xian Ju Qu Zhui Qi Xian Zhuo Dong Chang Lu Ai E E Lou Mian Cong Pou Ju Po Cai Ling Wan Biao Xiao Shu Qi Hui Fan Wo Rui Tan Fei Fei Jie Tian Ni Quan Jing Hun Jing Qian Dian Xing Hu Wan Lai Bi Yin Chou Nao Fu Jing Lun An Lan Kun Yin Ya Ju Li Dian Xian Hua Hua Ying Chan Shen Ting Dang Yao Wu Nan Chuo Jia Tou Xu Yu Wei Di Rou Mei Dan Ruan Qin Hui Wo Qian Chun Miao Fu Jie Duan Yi Zhong Mei Huang Mian An Ying Xuan Jie Wei Mei Yuan Zheng Qiu Shi Xie Tuo Lian Mao Ran Si Pian Wei Wa Cu Hu Ao Jie Bao Xu Tou Gui Chu Yao Pi Xi Yuan Ying Rong Ru Chi Liu Mei Pan Ao Ma Gou Kui Qin Jia Sao Zhen Yuan Jie Rong Ming Ying Ji Su Niao Xian Tao Pang Lang Nao Bao Ai Pi Pin Yi Piao Yu Lei Xuan Man Yi Zhang Kang Yong Ni Li Di Gui Yan Jin Zhuan Chang Ze Han Nen Lao Mo Zhe Hu Hu Ao Nen Qiang Ma Pie Gu Wu Qiao Tuo Zhan Miao Xian Xian Mo Liao Lian Hua'; + case 91: + return 'Gui Deng Zhi Xu Yi Hua Xi Kui Rao Xi Yan Chan Jiao Mei Fan Fan Xian Yi Hui Jiao Fu Shi Bi Shan Sui Qiang Lian Huan Xin Niao Dong Yi Can Ai Niang Ning Ma Tiao Chou Jin Ci Yu Pin Rong Ru Nai Yan Tai Ying Qian Niao Yue Ying Mian Bi Ma Shen Xing Ni Du Liu Yuan Lan Yan Shuang Ling Jiao Niang Lan Qian Ying Shuang Hui Quan Mi Li Luan Yan Zhu Lan Zi Jie Jue Jue Kong Yun Ma Zi Cun Sun Fu Bei Zi Xiao Xin Meng Si Tai Bao Ji Gu Nu Xue You Zhuan Hai Luan Sun Nao Mie Cong Qian Shu Can Ya Zi Ni Fu Zi Li Xue Bo Ru Nai Nie Nie Ying Luan Mian Ning Rong Ta Gui Zhai Qiong Yu Shou An Tu Song Wan Rou Yao Hong Yi Jing Zhun Mi Zhu Dang Hong Zong Guan Zhou Ding Wan Yi Bao Shi Shi Chong Shen Ke Xuan Shi You Huan Yi Tiao Shi Xian Gong Cheng Qun Gong Xiao Zai Zha Bao Hai Yan Xiao Jia Shen Chen Rong Huang Mi Kou Kuan Bin Su Cai Zan Ji Yuan Ji Yin Mi Kou Qing He Zhen Jian Fu Ning Bing Huan Mei Qin Han Yu Shi Ning Jin Ning Zhi Yu Bao Kuan Ning Qin Mo Cha Ju Gua Qin Hu Wu Liao Shi Ning Zhai Shen Wei Xie Kuan Hui Liao Jun Huan Yi Yi Bao Qin Chong Bao Feng Cun Dui Si Xun Dao Lu Dui Shou'; + case 92: + return 'Po Feng Zhuan Fu She Ke Jiang Jiang Zhuan Wei Zun Xun Shu Dui Dao Xiao Jie Shao Er Er Er Ga Jian Shu Chen Shang Shang Mo Ga Chang Liao Xian Xian Kun You Wang You Liao Liao Yao Mang Wang Wang Wang Ga Yao Duo Kui Zhong Jiu Gan Gu Gan Tui Gan Gan Shi Yin Chi Kao Ni Jin Wei Niao Ju Pi Ceng Xi Bi Ju Jie Tian Qu Ti Jie Wu Diao Shi Shi Ping Ji Xie Zhen Xie Ni Zhan Xi Wei Man E Lou Ping Ti Fei Shu Xie Tu Lu Lu Xi Ceng Lu Ju Xie Ju Jue Liao Jue Shu Xi Che Tun Ni Shan Wa Xian Li E Hui Hui Long Yi Qi Ren Wu Han Shen Yu Chu Sui Qi Ren Yue Ban Yao Ang Ya Wu Jie E Ji Qian Fen Wan Qi Cen Qian Qi Cha Jie Qu Gang Xian Ao Lan Dao Ba Zuo Zuo Yang Ju Gang Ke Gou Xue Po Li Tiao Qu Yan Fu Xiu Jia Ling Tuo Pi Ao Dai Kuang Yue Qu Hu Po Min An Tiao Ling Chi Ping Dong Han Kui Xiu Mao Tong Xue Yi Bian He Ba Luo E Fu Xun Die Lu En Er Gai Quan Dong Yi Mu Shi An Wei Huan Zhi Mi Li Ji Tong Wei You Qia Xia Li Yao Jiao Zheng Luan Jiao E E Yu Xie Bu Qiao Qun Feng Feng Nao Li You Xian Rong Dao Shen Cheng Tu Geng Jun Gao Xia Yin Yu'; + case 93: + return 'Lang Kan Lao Lai Xian Que Kong Chong Chong Ta Lin Hua Ju Lai Qi Min Kun Kun Zu Gu Cui Ya Ya Gang Lun Lun Leng Jue Duo Zheng Guo Yin Dong Han Zheng Wei Xiao Pi Yan Song Jie Beng Zu Ku Dong Zhan Gu Yin Zi Ze Huang Yu Wai Yang Feng Qiu Yang Ti Yi Zhi Shi Zai Yao E Zhu Kan Lu Yan Mei Han Ji Ji Huan Ting Sheng Mei Qian Wu Yu Zong Lan Ke Yan Yan Wei Zong Cha Sui Rong Ke Qin Yu Qi Lou Tu Dui Xi Weng Cang Dang Rong Jie Kai Liu Wu Song Qiao Zi Wei Beng Dian Cuo Qian Yong Nie Cuo Ji Shi Ruo Song Zong Jiang Liao Kang Chan Die Cen Ding Tu Lou Zhang Zhan Zhan Ao Cao Qu Qiang Cui Zui Dao Dao Xi Yu Pei Long Xiang Ceng Bo Qin Jiao Yan Lao Zhan Lin Liao Liao Jin Deng Duo Zun Jiao Gui Yao Jiao Yao Jue Zhan Yi Xue Nao Ye Ye Yi Nie Xian Ji Xie Ke Xi Di Ao Zui Wei Yi Rong Dao Ling Jie Yu Yue Yin Ru Jie Li Gui Long Long Dian Rong Xi Ju Chan Ying Kui Yan Wei Nao Quan Chao Cuan Luan Dian Dian Nie Yan Yan Yan Kui Yan Chuan Kuai Chuan Zhou Huang Jing Xun Chao Chao Lie Gong Zuo Qiao Ju Gong Ju Wu Pu Pu Cha Qiu Qiu Ji Yi Si Ba Zhi Zhao Xiang Yi Jin Xun Juan Ba Xun Jin Fu'; + case 94: + return 'Za Bi Shi Bu Ding Shuai Fan Nie Shi Fen Pa Zhi Xi Hu Dan Wei Zhang Tang Dai Mo Pei Pa Tie Bo Lian Zhi Zhou Bo Zhi Di Mo Yi Yi Ping Qia Juan Ru Shuai Dai Zheng Shui Qiao Zhen Shi Qun Xi Bang Dai Gui Chou Ping Zhang San Wan Dai Wei Chang Sha Qi Ze Guo Mao Du Hou Zheng Xu Mi Wei Wo Fu Yi Bang Ping Die Gong Pan Huang Tao Mi Jia Teng Hui Zhong Shan Man Mu Biao Guo Ze Mu Bang Zhang Jing Chan Fu Zhi Hu Fan Chuang Bi Bi Zhang Mi Qiao Chan Fen Meng Bang Chou Mie Chu Jie Xian Lan Gan Ping Nian Jian Bing Bing Xing Gan Yao Huan You You Ji Guang Pi Ting Ze Guang Zhuang Mo Qing Bi Qin Dun Chuang Gui Ya Bai Jie Xu Lu Wu Zhuang Ku Ying Di Pao Dian Ya Miao Geng Ci Fu Tong Pang Fei Xiang Yi Zhi Tiao Zhi Xiu Du Zuo Xiao Tu Gui Ku Mang Ting You Bu Bing Cheng Lai Bi Ji An Shu Kang Yong Tuo Song Shu Qing Yu Yu Miao Sou Ce Xiang Fei Jiu E Gui Liu Sha Lian Lang Sou Zhi Bu Qing Jiu Jiu Jin Ao Kuo Lou Yin Liao Dai Lu Yi Chu Chan Tu Si Xin Miao Chang Wu Fei Guang Ku Kuai Bi Qiang Xie Lin Lin Liao Lu Ji Ying Xian Ting Yong Li Ting Yin Xun Yan Ting Di Pai Jian Hui Nai Hui Gong Nian'; + case 95: + return 'Kai Bian Yi Qi Nong Fen Ju Yan Yi Zang Bi Yi Yi Er San Shi Er Shi Shi Gong Diao Yin Hu Fu Hong Wu Tui Chi Jiang Ba Shen Di Zhang Jue Tao Fu Di Mi Xian Hu Chao Nu Jing Zhen Yi Mi Quan Wan Shao Ruo Xuan Jing Diao Zhang Jiang Qiang Peng Dan Qiang Bi Bi She Dan Jian Gou Ge Fa Bi Kou Jian Bie Xiao Dan Guo Jiang Hong Mi Guo Wan Jue Ji Ji Gui Dang Lu Lu Tuan Hui Zhi Hui Hui Yi Yi Yi Yi Yue Yue Shan Xing Wen Tong Yan Yan Yu Chi Cai Biao Diao Bin Peng Yong Piao Zhang Ying Chi Chi Zhuo Tuo Ji Fang Zhong Yi Wang Che Bi Di Ling Fu Wang Zheng Cu Wang Jing Dai Xi Xun Hen Yang Huai Lu Hou Wang Cheng Zhi Xu Jing Tu Cong Zhi Lai Cong De Pai Xi Dong Ji Chang Zhi Cong Zhou Lai Yu Xie Jie Jian Shi Jia Bian Huang Fu Xun Wei Pang Yao Wei Xi Zheng Piao Ti De Zheng Zhi Bie De Chong Che Jiao Hui Jiao Hui Mei Long Xiang Bao Qu Xin Xin Bi Yi Le Ren Dao Ding Gai Ji Ren Ren Chan Tan Te Te Gan Qi Shi Cun Zhi Wang Mang Xi Fan Ying Tian Min Wen Zhong Chong Wu Ji Wu Xi Jia You Wan Cong Song Kuai Yu Bian Zhi Qi Cui Chen Tai Tun Qian Nian Hun Xiong Niu Kuang Xian Xin Kang Hu Kai Fen'; + case 96: + return 'Huai Tai Song Wu Ou Chang Chuang Ju Yi Bao Chao Min Pei Zuo Zen Yang Ju Ban Nu Nao Zheng Pa Bu Tie Hu Hu Ju Da Lian Si Chou Di Dai Yi Tu You Fu Ji Peng Xing Yuan Ni Guai Fu Xi Bi You Qie Xuan Cong Bing Huang Xu Chu Bi Shu Xi Tan Yong Zong Dui Mo Zhi Yi Shi Nen Xun Shi Xi Lao Heng Kuang Mou Zhi Xie Lian Tiao Huang Die Hao Kong Gui Heng Xi Jiao Shu Si Hu Qiu Yang Hui Hui Chi Jia Yi Xiong Guai Lin Hui Zi Xu Chi Shang Nu Hen En Ke Dong Tian Gong Quan Xi Qia Yue Peng Ken De Hui E Xiao Tong Yan Kai Ce Nao Yun Mang Yong Yong Yuan Pi Kun Qiao Yue Yu Tu Jie Xi Zhe Lin Ti Han Hao Qie Ti Bu Yi Qian Hui Xi Bei Man Yi Heng Song Quan Cheng Kui Wu Wu You Li Liang Huan Cong Yi Yue Li Nin Nao E Que Xuan Qian Wu Min Cong Fei Bei De Cui Chang Men Li Ji Guan Guan Xing Dao Qi Kong Tian Lun Xi Kan Gun Ni Qing Chou Dun Guo Zhan Jing Wan Yuan Jin Ji Lan Yu Huo He Quan Tan Ti Ti Nie Wang Chuo Hu Hun Xi Chang Xin Wei Hui E Suo Zong Jian Yong Dian Ju Can Cheng De Bei Qie Can Dan Guan Duo Nao Yun Xiang Zhui Die Huang Chun Qiong Re Xing Ce Bian Min Zong Ti'; + case 97: + return 'Qiao Chou Bei Xuan Wei Ge Qian Wei Yu Yu Bi Xuan Huan Min Bi Yi Mian Yong Kai Dang Yin E Chen Mao Qia Ke Yu Ai Qie Yan Nuo Gan Yun Zong Sai Leng Fen Ying Kui Kui Que Gong Yun Su Su Qi Yao Song Huang Ji Gu Ju Chuang Ni Xie Kai Zheng Yong Cao Xun Shen Bo Kai Yuan Xi Hun Yong Yang Li Sao Tao Yin Ci Xu Qian Tai Huang Yun Shen Ming Gong She Cong Piao Mu Mu Guo Chi Can Can Can Cui Min Te Zhang Tong Ao Shuang Man Guan Que Zao Jiu Hui Kai Lian Ou Song Qin Yin Lu Shang Wei Tuan Man Qian She Yong Qing Kang Di Zhi Lou Juan Qi Qi Yu Ping Liao Cong You Chong Zhi Tong Cheng Qi Qu Peng Bei Bie Qiong Jiao Zeng Chi Lian Ping Kui Hui Qiao Cheng Yin Yin Xi Xi Dan Tan Duo Dui Dui Su Jue Ce Xiao Fan Fen Lao Lao Chong Han Qi Xian Min Jing Liao Wu Can Jue Cu Xian Tan Sheng Pi Yi Chu Xian Nao Dan Tan Jing Song Han Jiao Wei Xuan Dong Qin Qin Ju Cao Ken Xie Ying Ao Mao Yi Lin Se Jun Huai Men Lan Ai Lin Yan Kuo Xia Chi Yu Yin Dai Meng Ai Meng Dui Qi Mo Lan Men Chou Zhi Nuo Nuo Yan Yang Bo Zhi Kuang Kuang You Fu Liu Mie Cheng Hui Chan Meng Lan Huai Xuan Rang Chan Ji Ju Huan She Yi'; + case 98: + return 'Lian Nan Mi Tang Jue Gang Gang Zhuang Ge Yue Wu Jian Xu Shu Rong Xi Cheng Wo Jie Ge Jian Qiang Huo Qiang Zhan Dong Qi Jia Die Zei Jia Ji Zhi Kan Ji Kui Gai Deng Zhan Qiang Ge Jian Jie Yu Jian Yan Lu Hu Zhan Xi Xi Chuo Dai Qu Hu Hu Hu E Shi Ti Mao Hu Li Fang Suo Bian Dian Jiong Shang Yi Yi Shan Hu Fei Yan Shou Shou Cai Zha Qiu Le Pu Ba Da Reng Fan Ru Zai Tuo Zhang Diao Kang Yu Ku Gan Shen Cha Tuo Gu Kou Wu Den Qian Zhi Ren Kuo Men Sao Yang Niu Ban Che Rao Xi Qian Ban Jia Yu Fu Ao Xi Pi Zhi Zhi E Den Zhao Cheng Ji Yan Kuang Bian Chao Ju Wen Hu Yue Jue Ba Qin Dan Zheng Yun Wan Ne Yi Shu Zhua Pou Tou Dou Kang Zhe Pou Fu Pao Ba Ao Ze Tuan Kou Lun Qiang Yun Hu Bao Bing Zhi Peng Nan Bu Pi Tai Yao Zhen Zha Yang Bao He Ni Ye Di Chi Pi Jia Mo Mei Chen Ya Chou Qu Min Chu Jia Fu Zha Zhu Dan Chai Mu Nian La Fu Pao Ban Pai Lin Na Guai Qian Ju Ta Ba Tuo Tuo Ao Ju Zhuo Pan Zhao Bai Bai Di Ni Ju Kuo Long Jian Qia Yong Lan Ning Bo Ze Qian Hen Kuo Shi Jie Zheng Nin Gong Gong Quan Shuan Cun Za Kao Yi Xie Ce Hui Pin Zhuai Shi Na'; + case 99: + return 'Bai Chi Gua Zhi Kuo Duo Duo Zhi Qie An Nong Zhen Ge Jiao Kua Dong Na Tiao Lie Zha Lu Die Wa Jue Lie Ju Zhi Luan Ya Wo Ta Xie Nao Dang Jiao Zheng Ji Hui Xian Yu Ai Tuo Nuo Cuo Bo Geng Ti Zhen Cheng Sa Sa Keng Mei Nong Ju Peng Jian Yi Ting Shan Rua Wan Xie Cha Feng Jiao Wu Jun Jiu Tong Kun Huo Tu Zhuo Pou Lu Ba Han Shao Nie Juan Ze Shu Ye Jue Bu Wan Bu Zun Ye Zhai Lu Sou Tuo Lao Sun Bang Jian Huan Dao Wei Wan Qin Peng She Lie Min Men Fu Bai Ju Dao Wo Ai Juan Yue Zong Chen Chui Jie Tu Ben Na Nian Ruo Zuo Wo Qi Xian Cheng Dian Sao Lun Qing Gang Duo Shou Diao Pou Di Zhang Hun Ji Tao Qia Qi Pai Shu Qian Ling Ye Ya Jue Zheng Liang Gua Yi Huo Shan Zheng Lue Cai Tan Che Bing Jie Ti Kong Tui Yan Cuo Zhou Ju Tian Qian Ken Bai Pa Jie Lu Guai Ming Jie Zhi Dan Meng Can Sao Guan Peng Yuan Nuo Jian Zheng Jiu Jian Yu Yan Kui Nan Hong Rou Pi Wei Sai Zou Xuan Miao Ti Nie Cha Shi Zong Zhen Yi Xun Yong Bian Yang Huan Yan Zan An Xu Ya Wo Ke Chuai Ji Ti La La Chen Kai Jiu Jiu Tu Jie Hui Gen Chong Xiao Die Xie Yuan Qian Ye Cha Zha Bei Yao Wei Beng Lan Wen Qin'; + case 100: + return 'Chan Ge Lou Zong Gen Jiao Gou Qin Rong Que Chou Chuai Zhan Sun Sun Bo Chu Rong Bang Cuo Sao Ke Yao Dao Zhi Nu La Jian Sou Qiu Gao Xian Shuo Sang Jin Mie E Chui Nuo Shan Ta Zha Tang Pan Ban Da Li Tao Hu Zhi Wa Hua Qian Wen Qiang Tian Zhen E Xie Nuo Quan Cha Zha Ge Wu En She Kang She Shu Bai Yao Bin Sou Tan Sa Chan Suo Jiu Chong Chuang Guai Bing Feng Shuai Di Qi Sou Zhai Lian Cheng Chi Guan Lu Luo Lou Zong Gai Hu Zha Chuang Tang Hua Cui Nai Mo Jiang Gui Ying Zhi Ao Zhi Nie Man Chan Kou Chu She Tuan Jiao Mo Mo Zhe Can Keng Biao Jiang Yao Gou Qian Liao Ji Ying Jue Pie Pie Lao Dun Xian Ruan Gui Zan Yi Xian Cheng Cheng Sa Nao Hong Si Han Guang Da Zun Nian Lin Zheng Hui Zhuang Jiao Ji Cao Dan Dan Che Bo Che Jue Fu Liao Ben Fu Qiao Bo Cuo Zhuo Zhuan Wei Pu Qin Dun Nian Hua Xie Lu Jiao Cuan Ta Han Qiao Wo Jian Gan Yong Lei Nang Lu Shan Zhuo Ze Pu Chuo Ji Dang Se Cao Qing Qing Huan Jie Qin Kuai Dan Xie Ka Pi Bai Ao Ju Ye E Meng Sou Mi Ji Tai Zhuo Dao Xing Lan Ca Ju Ye Ru Ye Ye Ni Wo Jie Bin Ning Ge Zhi Zhi Kuo Mo Jian Xie Lie Tan Bai Sou Lu Lue Rao Ti'; + case 101: + return 'Pan Yang Lei Ca Shu Zan Nian Xian Jun Huo Li La Huan Ying Lu Long Qian Qian Zan Qian Lan Xian Ying Mei Rang Chan Weng Cuan Xie She Luo Jun Mi Chi Zan Luan Tan Zuan Li Dian Wa Dang Jiao Jue Lan Li Nang Zhi Gui Gui Qi Xun Pu Pu Shou Kao You Gai Yi Gong Gan Ban Fang Zheng Po Dian Kou Min Wu Gu He Ce Xiao Mi Chu Ge Di Xu Jiao Min Chen Jiu Shen Duo Yu Chi Ao Bai Xu Jiao Duo Lian Nie Bi Chang Dian Duo Yi Gan San Ke Yan Dun Ji Tou Xiao Duo Jiao Jing Yang Xia Min Shu Ai Qiao Ai Zheng Di Zhen Fu Shu Liao Qu Xiong Yi Jiao Shan Jiao Zhuo Yi Lian Bi Li Xiao Xiao Wen Xue Qi Qi Zhai Bin Jue Zhai Lang Fei Ban Ban Lan Yu Lan Wei Dou Sheng Liao Jia Hu Xie Jia Yu Zhen Jiao Wo Tiao Dou Jin Chi Yin Fu Qiang Zhan Qu Zhuo Zhan Duan Cuo Si Xin Zhuo Zhuo Qin Lin Zhuo Chu Duan Zhu Fang Chan Hang Yu Shi Pei You Mei Pang Qi Zhan Mao Lu Pei Pi Liu Fu Fang Xuan Jing Jing Ni Zu Zhao Yi Liu Shao Jian Yu Yi Qi Zhi Fan Piao Fan Zhan Kuai Sui Yu Wu Ji Ji Ji Huo Ri Dan Jiu Zhi Zao Xie Tiao Xun Xu Ga La Gan Han Tai Di Xu Chan Shi Kuang Yang Shi Wang Min Min Tun Chun Wu'; + case 102: + return 'Yun Bei Ang Ze Ban Jie Kun Sheng Hu Fang Hao Gui Chang Xuan Ming Hun Fen Qin Hu Yi Xi Xin Yan Ze Fang Tan Shen Ju Yang Zan Bing Xing Ying Xuan Po Zhen Ling Chun Hao Mei Zuo Mo Bian Xu Hun Zhao Zong Shi Shi Yu Fei Die Mao Ni Chang Wen Dong Ai Bing Ang Zhou Long Xian Kuang Tiao Chao Shi Huang Huang Xuan Kui Xu Jiao Jin Zhi Jin Shang Tong Hong Yan Gai Xiang Shai Xiao Ye Yun Hui Han Han Jun Wan Xian Kun Zhou Xi Cheng Sheng Bu Zhe Zhe Wu Wan Hui Hao Chen Wan Tian Zhuo Zui Zhou Pu Jing Xi Shan Ni Xi Qing Qi Jing Gui Zheng Yi Zhi An Wan Lin Liang Chang Wang Xiao Zan Fei Xuan Geng Yi Xia Yun Hui Xu Min Kui Ye Ying Shu Wei Shu Qing Mao Nan Jian Nuan An Yang Chun Yao Suo Pu Ming Jiao Kai Gao Weng Chang Qi Hao Yan Li Ai Ji Ji Men Zan Xie Hao Mu Mo Cong Ni Zhang Hui Bao Han Xuan Chuan Liao Xian Tan Jing Pie Lin Tun Xi Yi Ji Huang Dai Ye Ye Li Tan Tong Xiao Fei Shen Zhao Hao Yi Xiang Xing Shen Jiao Bao Jing Yan Ai Ye Ru Shu Meng Xun Yao Pu Li Chen Kuang Die Liao Yan Huo Lu Xi Rong Long Nang Luo Luan Shai Tang Yan Zhu Yue Yue Qu Ye Geng Ye Hu He Shu Cao Cao Sheng Man Ceng Ceng Ti'; + case 103: + return 'Zui Can Xu Hui Yin Qie Fen Pi Yue You Ruan Peng Fen Fu Ling Fei Qu Ti Nu Tiao Shuo Zhen Lang Lang Zui Ming Huang Wang Tun Chao Ji Qi Ying Zong Wang Tong Lang Lao Meng Long Mu Deng Wei Mo Ben Zha Shu Shu Mu Zhu Ren Ba Pu Duo Duo Dao Li Gui Ji Jiu Bi Xiu Cheng Ci Sha Ru Za Quan Qian Yu Gan Wu Cha Shan Xun Fan Wu Zi Li Xing Cai Cun Ren Biao Tuo Di Zhang Mang Chi Yi Gai Gong Du Li Qi Shu Gang Tiao Jiang Mian Wan Lai Jiu Mang Yang Ma Miao Si Yuan Hang Fei Bei Jie Dong Gao Yao Xian Chu Chun Pa Shu Hua Xin Chou Zhu Chou Song Ban Song Ji Wo Jin Gou Ji Mao Pi Bi Wang Ang Fang Fen Yi Fu Nan Xi Hu Ya Dou Xin Zhen Yao Lin Rui E Mei Zhao Guo Zhi Cong Yun Zui Sheng Shu Zao Di Li Lu Jian Cheng Song Qiang Feng Zhan Xiao Xian Ku Ping Tai Xi Zhi Guai Xiao Jia Jia Gou Bao Mo Yi Ye Ye Shi Nie Bi Duo Yi Ling Bing Ni La He Ban Fan Zhong Dai Ci Yang Fu Bai Mou Gan Qi Ran Rou Mao Shao Song Zhe Xia You Shen Gui Tuo Zha Nan Ning Yong Di Zhi Zha Cha Dan Gu Bu Jiu Ao Fu Jian Ba Duo Ke Nai Zhu Bi Liu Chai Shan Si Chu Pei Shi Guai Zha Yao Cheng Jiu Shi'; + case 104: + return 'Zhi Liu Mei Li Rong Zha Zao Biao Zhan Zhi Long Dong Lu Sheng Li Lan Yong Shu Xun Shuan Qi Zhen Qi Li Yi Xiang Zhen Li Se Gua Kan Ben Ren Xiao Bai Ren Bing Zi Chou Yi Ci Xu Zhu Jian Zui Er Er You Fa Gong Kao Lao Zhan Lie Yin Yang He Gen Yi Shi Ge Zai Luan Fu Jie Heng Gui Tao Guang Wei Kuang Ru An An Juan Yi Zhuo Ku Zhi Qiong Tong Sang Sang Huan Ju Jiu Xue Duo Zhui Yu Zan Lung Ying Jie Liu Zhan Ya Rao Zhen Dang Qi Qiao Hua Gui Jiang Zhuang Xun Suo Sha Zhen Bei Ting Kuo Jing Po Ben Fu Rui Tong Jue Xi Lang Liu Feng Qi Wen Jun Gan Su Liang Qiu Ting You Mei Bang Long Peng Zhuang Di Xuan Tu Zao Ao Gu Bi Di Han Zi Zhi Ren Bei Geng Jian Huan Wan Nuo Jia Tiao Ji Xiao Lu Hun Shao Cen Fen Song Meng Wu Li Li Dou Qin Ying Suo Ju Ti Xie Kun Zhuo Shu Chan Fan Wei Jing Li Bin Xia Fo Tao Zhi Lai Lian Jian Zhuo Ling Li Qi Bing Lun Cong Qian Mian Qi Qi Cai Gun Chan De Fei Pai Bang Bang Hun Zong Cheng Zao Ji Li Peng Yu Yu Gu Jun Dong Tang Gang Wang Di Cuo Fan Cheng Zhan Qi Yuan Yan Yu Quan Yi Sen Ren Chui Leng Qi Zhuo Fu Ke Lai Zou Zou Zhao Guan Fen Fen Shen Qing Ni'; + case 105: + return 'Wan Guo Lu Hao Jie Yi Chou Ju Ju Cheng Zuo Liang Qiang Zhi Chui Ya Ju Bei Jiao Zhuo Zi Bin Peng Ding Chu Chang Men Hua Jian Gui Xi Du Qian Dao Gui Dian Luo Zhi Quan Ming Fu Geng Peng Shan Yi Tuo Sen Duo Ye Fu Wei Wei Duan Jia Zong Jian Yi Shen Xi Yan Yan Chuan Jian Chun Yu He Zha Wo Pian Bi Yao Huo Xu Ruo Yang La Yan Ben Hui Kui Jie Kui Si Feng Xie Tuo Zhi Jian Mu Mao Chu Hu Hu Lian Leng Ting Nan Yu You Mei Song Xuan Xuan Yang Zhen Pian Ye Ji Jie Ye Chu Dun Yu Zou Wei Mei Ti Ji Jie Kai Qiu Ying Rou Huang Lou Le Quan Xiang Pin Shi Gai Tan Lan Wen Yu Chen Lu Ju Shen Chu Bi Xie Jia Yi Zhan Fu Nuo Mi Lang Rong Gu Jian Ju Ta Yao Zhen Bang Sha Yuan Zi Ming Su Jia Yao Jie Huang Gan Fei Zha Qian Ma Sun Yuan Xie Rong Shi Zhi Cui Wen Ting Liu Rong Tang Que Zhai Si Sheng Ta Ke Xi Gu Qi Gao Gao Sun Pan Tao Ge Chun Dian Nou Ji Shuo Gou Chui Qiang Cha Qian Huai Mei Xu Gang Gao Zhuo Tuo Qiao Yang Dian Jia Kan Zui Dao Long Bin Zhu Sang Xi Ji Lian Hui Yong Qian Guo Gai Gai Tuan Hua Qi Sen Cui Peng You Hu Jiang Hu Huan Gui Nie Yi Gao Kang Gui Gui Cao Man Jin'; + case 106: + return 'Di Zhuang Le Lang Chen Cong Li Xiu Qing Shuang Fan Tong Guan Ze Su Lei Lu Liang Mi Lou Chao Su Ke Chu Tang Biao Lu Jiu Zhe Zha Shu Zhang Man Mo Niao Yang Tiao Peng Zhu Sha Xi Quan Heng Jian Cong Ji Yan Qiang Xue Ying Er Xun Zhi Qiao Zui Cong Pu Shu Hua Kui Zhen Zun Yue Shan Xi Chun Dian Fa Gan Mo Wu Qiao Rao Lin Liu Qiao Xian Run Fan Zhan Tuo Lao Yun Shun Dun Cheng Tang Meng Ju Cheng Su Jue Jue Dian Hui Ji Nuo Xiang Tuo Ning Rui Zhu Tong Zeng Fen Qiong Ran Heng Qian Gu Liu Lao Gao Chu Xi Sheng Zi San Ji Dou Jing Lu Jian Chu Yuan Ta Shu Jiang Tan Lin Nong Yin Xi Hui Shan Zui Xuan Cheng Gan Ju Zui Yi Qin Pu Yan Lei Feng Hui Dang Ji Sui Bo Ping Cheng Chu Zhua Gui Ji Jie Jia Qing Zhai Jian Qiang Dao Yi Biao Song She Lin Li Cha Meng Yin Tao Tai Mian Qi Tuan Bin Huo Ji Qian Ni Ning Yi Gao Kan Yin Nou Qing Yan Qi Mi Zhao Gui Chun Ji Kui Po Deng Chu Ge Mian You Zhi Huang Qian Lei Lei Sa Lu Li Cuan Lu Mie Hui Ou Lu Zhi Gao Du Yuan Li Fei Zhuo Sou Lian Jiang Chu Qing Zhu Lu Yan Li Zhu Chen Jie E Su Huai Nie Yu Long Lai Jiao Xian Gui Ju Xiao Ling Ying Jian Yin You Ying'; + case 107: + return 'Xiang Nong Bo Chan Lan Ju Shuang She Wei Cong Quan Qu Cang Jiu Yu Luo Li Cuan Luan Dang Jue Yan Lan Lan Zhu Lei Li Ba Nang Yu Ling Guang Qian Ci Huan Xin Yu Yi Qian Ou Xu Chao Chu Qi Kai Yi Jue Xi Xu He Yu Kui Lang Kuan Shuo Xi Ai Yi Qi Chua Chi Qin Kuan Kan Kuan Kan Chuan Sha Gua Yin Xin Xie Yu Qian Xiao Ye Ge Wu Tan Jin Ou Hu Ti Huan Xu Pen Xi Xiao Chua She Shan Han Chu Yi E Yu Chuo Huan Zhi Zheng Ci Bu Wu Qi Bu Bu Wai Ju Qian Chi Se Chi Se Zhong Sui Sui Li Ze Yu Li Gui Dai E Si Jian Zhe Mo Mo Yao Mo Cu Yang Tian Sheng Dai Shang Xu Xun Shu Can Jue Piao Qia Qiu Su Qing Yun Lian Yi Fou Zhi Ye Can Hun Dan Ji Die Zhen Yun Wen Chou Bin Ti Jin Shang Yin Diao Jiu Hui Cuan Yi Dan Du Jiang Lian Bin Du Jian Jian Shu Ou Duan Zhu Yin Qing Yi Sha Qiao Ke Xiao Xun Dian Hui Hui Gu Qiao Ji Yi Ou Hui Duan Yi Xiao Wu Guan Mu Mei Mei Ai Jie Du Yu Bi Bi Bi Pi Pi Bi Chan Mao Hao Cai Pi Lie Jia Zhan Sai Mu Tuo Xun Er Rong Xian Ju Mu Hao Qiu Dou Sha Tan Pei Ju Duo Cui Bi San San Mao Sai Shu Shu Tuo He Jian Ta San'; + case 108: + return 'Lu Mu Mao Tong Rong Chang Pu Lu Zhan Sao Zhan Meng Lu Qu Die Shi Di Min Jue Mang Qi Pie Nai Qi Dao Xian Chuan Fen Yang Nei Bin Fu Shen Dong Qing Qi Yin Xi Hai Yang An Ya Ke Qing Ya Dong Dan Lu Qing Yang Yun Yun Shui Shui Zheng Bing Yong Dang Shui Le Ni Tun Fan Gui Ting Zhi Qiu Bin Ze Mian Cuan Hui Diao Han Cha Zhuo Chuan Wan Fan Da Xi Tuo Mang Qiu Qi Shan Pin Han Qian Wu Wu Xun Si Ru Gong Jiang Chi Wu Tu Jiu Tang Zhi Zhi Qian Mi Gu Wang Jing Jing Rui Jun Hong Tai Quan Ji Bian Bian Gan Wen Zhong Fang Xiong Jue Hu Niu Qi Fen Xu Xu Qin Yi Wo Yun Yuan Hang Yan Shen Chen Dan You Dun Hu Huo Qi Mu Nu Mei Da Mian Mi Chong Pang Bi Sha Zhi Pei Pan Zhui Za Gou Liu Mei Ze Feng Ou Li Lun Cang Feng Wei Hu Mo Mei Shu Ju Za Tuo Tuo Tuo He Li Mi Yi Fa Fei You Tian Zhi Zhao Gu Zhan Yan Si Kuang Jiong Ju Xie Qiu Yi Jia Zhong Quan Po Hui Mi Ben Ze Zhu Le You Gu Hong Gan Fa Mao Si Hu Ping Ci Fan Zhi Su Ning Cheng Ling Pao Bo Qi Si Ni Ju Sa Zhu Sheng Lei Xuan Jue Fu Pan Min Tai Yang Ji Yong Guan Beng Xue Long Lu Dan Luo Xie Po Ze Jing Yin'; + case 109: + return 'Pan Jie Ye Hui Hui Zai Cheng Yin Wei Hou Jian Yang Lie Si Ji Er Xing Fu Sa Se Zhi Yin Wu Xi Kao Zhu Jiang Luo Luo An Dong Ti Mou Lei Yi Mi Quan Jin Po Wei Xiao Xie Hong Xu Su Kuang Tao Qie Ju Er Zhou Ru Ping Xun Xiong Zhi Guang Huan Ming Huo Wa Qia Pai Wu Qu Liu Yi Jia Jing Qian Jiang Jiao Zhen Shi Zhuo Ce Fa Hui Ji Liu Chan Hun Hu Nong Xun Jin Lie Qiu Wei Zhe Jun Han Bang Mang Zhuo You Xi Bo Dou Huan Hong Yi Pu Ying Lan Hao Lang Han Li Geng Fu Wu Lian Chun Feng Yi Yu Tong Lao Hai Jin Jia Chong Jiong Mei Sui Cheng Pei Xian Shen Tu Kun Ping Nie Han Jing Xiao She Nian Tu Yong Xiao Xian Ting E Su Tun Juan Cen Ti Li Shui Si Lei Shui Tao Du Lao Lai Lian Wei Wo Yun Huan Di Heng Run Jian Zhang Se Fu Guan Xing Shou Shuan Ya Chuo Zhang Ye Kong Wo Han Tuo Dong He Wo Ju She Liang Hun Ta Zhuo Dian Qie De Juan Zi Xi Xiao Qi Gu Guo Yan Lin Tang Zhou Peng Hao Chang Shu Qi Fang Zhi Lu Nao Ju Tao Cong Lei Zhe Ping Fei Song Tian Pi Dan Yu Ni Yu Lu Gan Mi Jing Ling Lun Yin Cui Qu Huai Yu Nian Shen Biao Chun Hu Yuan Lai Hun Qing Yan Qian Tian Miao Zhi Yin Bo'; + case 110: + return 'Ben Yuan Wen Ruo Fei Qing Yuan Ke Ji She Yuan Se Lu Zi Du Yi Jian Mian Pai Xi Yu Yuan Shen Shen Rou Huan Zhu Jian Nuan Yu Qiu Ting Qu Du Fan Zha Bo Wo Wo Di Wei Wen Ru Xie Ce Wei He Gang Yan Hong Xuan Mi Ke Mao Ying Yan You Hong Miao Sheng Mei Zai Hun Nai Gui Chi E Pai Mei Lian Qi Qi Mei Tian Cou Wei Can Tuan Mian Hui Mo Xu Ji Pen Jian Jian Hu Feng Xiang Yi Yin Zhan Shi Jie Cheng Huang Tan Yu Bi Min Shi Tu Sheng Yong Ju Dong Tuan Jiao Jiao Qiu Yan Tang Long Huo Yuan Nan Ban You Quan Zhuang Liang Chan Xian Chun Nie Zi Wan Shi Man Ying La Kui Feng Jian Xu Lou Wei Gai Bo Ying Po Jin Yan Tang Yuan Suo Yuan Lian Yao Meng Zhun Cheng Ke Tai Ta Wa Liu Gou Sao Ming Zha Shi Yi Lun Ma Pu Wei Li Zai Wu Xi Wen Qiang Ze Shi Su Ai Qin Sou Yun Xiu Yin Rong Hun Su Suo Ni Ta Shi Ru Ai Pan Chu Chu Pang Weng Cang Mie Ge Dian Hao Huang Xi Zi Di Zhi Xing Fu Jie Hua Ge Zi Tao Teng Sui Bi Jiao Hui Gun Yin Gao Long Zhi Yan She Man Ying Chun Lu Lan Luan Yao Bin Tan Yu Xiu Hu Bi Biao Zhi Jiang Kou Shen Shang Di Mi Ao Lu Hu Hu You Chan Fan Yong Gun Man'; + case 111: + return 'Qing Yu Piao Ji Ya Chao Qi Xi Ji Lu Lou Long Jin Guo Cong Lou Zhi Gai Qiang Li Yan Cao Jiao Cong Chun Tuan Ou Teng Ye Xi Mi Tang Mo Shang Han Lian Lan Wa Chi Gan Feng Xuan Yi Man Zi Mang Kang Luo Peng Shu Zhang Zhang Zhuang Xu Huan Huo Jian Yan Shuang Liao Cui Ti Yang Jiang Cong Ying Hong Xiu Shu Guan Ying Xiao Zong Kun Xu Lian Zhi Wei Pi Yu Jiao Po Dang Hui Jie Wu Pa Ji Pan Wei Su Qian Qian Xi Lu Xi Xun Dun Huang Min Run Su Lao Zhen Cong Yi Zhe Wan Shan Tan Chao Xun Kui Ye Shao Tu Zhu Sa Hei Bi Shan Chan Chan Shu Tong Pu Lin Wei Se Se Cheng Jiong Cheng Hua Jiao Lao Che Gan Cun Hong Si Shu Peng Han Yun Liu Hong Fu Hao He Xian Jian Shan Xi Yu Lu Lan Ning Yu Lin Mian Zao Dang Huan Ze Xie Yu Li Shi Xue Ling Wan Zi Yong Hui Can Lian Dian Ye Ao Huan Zhen Chan Man Dan Dan Yi Sui Pi Ju Ta Qin Ji Zhuo Lian Nong Guo Jin Fen Se Ji Sui Hui Chu Ta Song Ding Se Zhu Lai Bin Lian Mi Shi Shu Mi Ning Ying Ying Meng Jin Qi Bi Ji Hao Ru Cui Wo Tao Yin Yin Dui Ci Huo Qing Lan Jun Ai Pu Zhuo Wei Bin Gu Qian Ying Bin Kuo Fei Cang Me Jian Wei Luo Zan Lu Li'; + case 112: + return 'You Yang Lu Si Zhi Ying Du Wang Hui Xie Pan Shen Biao Chan Mo Liu Jian Pu Se Cheng Gu Bin Huo Xian Lu Qin Han Ying Rong Li Jing Xiao Ying Sui Wei Xie Huai Xue Zhu Long Lai Dui Fan Hu Lai Shu Ling Ying Mi Ji Lian Jian Ying Fen Lin Yi Jian Yue Chan Dai Rang Jian Lan Fan Shuang Yuan Zhuo Feng She Lei Lan Cong Qu Yong Qian Fa Guan Jue Yan Hao Ying Sa Zan Luan Yan Li Mi Shan Tan Dang Jiao Chan Ying Hao Ba Zhu Lan Lan Nang Wan Luan Xun Xian Yan Gan Yan Yu Huo Biao Mie Guang Deng Hui Xiao Xiao Hui Hong Ling Zao Zhuan Jiu Zha Xie Chi Zhuo Zai Zai Can Yang Qi Zhong Fen Niu Jiong Wen Pu Yi Lu Chui Pi Kai Pan Yan Kai Pang Mu Chao Liao Gui Kang Dun Guang Xin Zhi Guang Guang Wei Qiang Bian Da Xia Zheng Zhu Ke Zhao Fu Ba Xie Xie Ling Zhuo Xuan Ju Tan Pao Jiong Pao Tai Tai Bing Yang Tong Shan Zhu Zha Dian Wei Shi Lian Chi Huang Zhou Hu Shuo Lan Ting Jiao Xu Heng Quan Lie Huan Yang Xiu Xiu Xian Yin Wu Zhou Yao Shi Wei Tong Mie Zai Kai Hong Lao Xia Zhu Xuan Zheng Po Yan Hui Guang Che Hui Kao Ju Fan Shao Ye Hui Gwaan Tang Jin Re Lie Xi Fu Jiong Xie Pu Ting Zhuo Ting Wan Hai Peng Lang Yan Xu Feng Chi Rong'; + case 113: + return 'Hu Xi Shu He Xun Ku Juan Xiao Xi Yan Han Zhuang Jun Di Xie Ji Wu Yan Lu Han Yan Huan Men Ju Dao Bei Fen Lin Kun Hun Tun Xi Cui Wu Hong Chao Fu Wo Jiao Cong Feng Ping Qiong Ruo Xi Qiong Xin Chao Yan Yan Yi Jue Yu Gang Ran Pi Xiong Gang Sheng Chang Shao Xiong Nian Geng Wei Chen He Kui Zhong Duan Xia Hui Feng Lian Xuan Xing Huang Jiao Jian Bi Ying Zhu Wei Tuan Shan Xi Nuan Nuan Chan Yan Jiong Jiong Yu Mei Sha Wei Zha Jin Qiong Rou Mei Huan Xu Zhao Wei Fan Qiu Sui Yang Lie Zhu Jie Zao Gua Bao Hu Yun Nan Shi Liang Bian Gou Tui Tang Chao Shan En Bo Huang Xie Xi Wu Xi Yun He He Xi Yun Xiong Nai Shan Qiong Yao Xun Mi Lian Ying Wu Rong Gong Yan Qiang Liu Xi Bi Biao Cong Lu Jian Shu Yi Lou Peng Sui Yi Teng Jue Zong Yun Hu Yi Zhi Ao Wei Liu Han Ou Re Jiong Man Kun Shang Cuan Zeng Jian Xi Xi Xi Yi Xiao Chi Huang Chan Ye Tan Ran Yan Xun Qiao Jun Deng Dun Shen Jiao Fen Si Liao Yu Lin Tong Shao Fen Fan Yan Xun Lan Mei Tang Yi Jiong Men Jing Jiao Ying Yu Yi Xue Lan Tai Zao Can Sui Xi Que Zong Lian Hui Zhu Xie Ling Wei Yi Xie Zhao Hui Da Nong Lan Ru Xian He Xun Jin Chou Dao Yao'; + case 114: + return 'He Lan Biao Rong Li Mo Bao Ruo Lu La Ao Xun Kuang Shuo Liao Li Lu Jue Liao Yan Xi Xie Long Ye Can Rang Yue Lan Cong Jue Chong Guan Ju Che Mi Tang Lan Zhu Lan Ling Cuan Yu Zhao Zhao Pa Zheng Pao Cheng Yuan Ai Wei Han Jue Jue Fu Ye Ba Die Ye Yao Zu Shuang Er Pan Chuang Ke Zang Die Qiang Yong Qiang Pian Ban Pan Chao Jian Pai Du Chuang Yu Zha Bian Die Bang Bo Chuang You You Du Ya Cheng Niu Niu Pin Jiu Mou Ta Mu Lao Ren Mang Fang Mao Mu Gang Wu Yan Ge Bei Si Jian Gu You Ge Sheng Mu Di Qian Quan Quan Zi Te Xi Mang Keng Qian Wu Gu Xi Li Li Pou Ji Gang Zhi Ben Quan Chun Du Ju Jia Jian Feng Pian Ke Ju Kao Chu Xi Bei Luo Jie Ma San Wei Mao Dun Tong Qiao Jiang Xi Li Du Lie Pai Piao Bo Xi Chou Wei Kui Chou Quan Quan Ba Fan Qiu Ji Chai Zhuo An Ge Zhuang Guang Ma You Kang Bo Hou Ya Yin Huan Zhuang Yun Kuang Niu Di Kuang Zhong Mu Bei Pi Ju Yi Sheng Pao Xia Tuo Hu Ling Fei Pi Ni Yao You Gou Xue Ju Dan Bo Ku Xian Ning Huan Hen Jiao He Zhao Ji Xun Shan Ta Rong Shou Tong Lao Du Xia Shi Kuai Zheng Yu Sun Yu Bi Mang Xi Juan Li Xia Yin Suan Lang Bei Zhi Yan'; + case 115: + return 'Sha Li Han Xian Jing Pai Fei Xiao Bai Qi Ni Biao Yin Lai Lie Jian Qiang Kun Yan Guo Zong Mi Chang Yi Zhi Zheng Ya Meng Cai Cu She Lie Dian Luo Hu Zong Gui Wei Feng Wo Yuan Xing Zhu Mao Wei Chuan Xian Tuan Ya Nao Xie Jia Hou Bian You You Mei Cha Yao Sun Bo Ming Hua Yuan Sou Ma Yuan Dai Yu Shi Hao Qiang Yi Zhen Cang Hao Man Jing Jiang Mo Zhang Chan Ao Ao Hao Cui Ben Jue Bi Bi Huang Pu Lin Xu Tong Yao Liao Shuo Xiao Shou Dun Jiao Ge Juan Du Hui Kuai Xian Xie Ta Xian Xun Ning Bian Huo Nou Meng Lie Nao Guang Shou Lu Ta Xian Mi Rang Huan Nao Luo Xian Qi Jue Xuan Miao Zi Lu Lu Yu Su Wang Qiu Ga Ding Le Ba Ji Hong Di Chuan Gan Jiu Yu Qi Yu Chang Ma Hong Wu Fu Wen Jie Ya Bin Bian Bang Yue Jue Men Jue Wan Jian Mei Dan Pin Wei Huan Xian Qiang Ling Dai Yi An Ping Dian Fu Xuan Xi Bo Ci Gou Jia Shao Po Ci Ke Ran Sheng Shen Yi Zu Jia Min Shan Liu Bi Zhen Zhen Jue Fa Long Jin Jiao Jian Li Guang Xian Zhou Gong Yan Xiu Yang Xu Luo Su Zhu Qin Yin Xun Bao Er Xiang Yao Xia Hang Gui Chong Xu Ban Pei Lao Dang Ying Hui Wen E Cheng Di Wu Wu Cheng Jun Mei Bei Ting Xian Chu'; + case 116: + return 'Han Xuan Yan Qiu Xuan Lang Li Xiu Fu Liu Ya Xi Ling Li Jin Lian Suo Suo Feng Wan Dian Pin Zhan Se Min Yu Ju Chen Lai Min Sheng Wei Tian Chu Zuo Beng Cheng Hu Qi E Kun Chang Qi Beng Wan Lu Cong Guan Yan Diao Bei Lin Qin Pi Pa Que Zhuo Qin Fa Jin Qiong Du Jie Hun Yu Mao Mei Chun Xuan Ti Xing Dai Rou Min Jian Wei Ruan Huan Xie Chuan Jian Zhuan Chang Lian Quan Xia Duan Yuan Ya Nao Hu Ying Yu Huang Rui Se Liu Shi Rong Suo Yao Wen Wu Zhen Jin Ying Ma Tao Liu Tang Li Lang Gui Zhen Qiang Cuo Jue Zhao Yao Ai Bin Shu Chang Kun Zhuan Cong Jin Yi Cui Cong Qi Li Jing Suo Qiu Xuan Ao Lian Men Zhang Yin Ye Ying Wei Lu Wu Deng Xiu Zeng Xun Qu Dang Lin Liao Qiong Su Huang Gui Pu Jing Fan Jin Liu Ji Hui Jing Ai Bi Can Qu Zao Dang Jiao Gun Tan Hui Huan Se Sui Tian Chu Yu Jin Lu Bin Shu Wen Zui Lan Xi Zi Xuan Ruan Wo Gai Lei Du Li Zhi Rou Li Zan Qiong Ti Gui Sui La Long Lu Li Zan Lan Ying Mi Xiang Qiong Guan Dao Zan Huan Gua Bo Die Bo Hu Zhi Piao Ban Rang Li Wa Sap Xiang Qian Ban Pen Fang Dan Weng Ou Fan Hou Wa Hu Ling Yi Ping Ci Bai Juan Chang Chi Lei Dang Meng Bu'; + case 117: + return 'Zhui Ping Bian Zhou Zhen Lei Ci Ying Qi Xian Lou Di Ou Meng Zhuan Beng Lin Zeng Wu Pi Dan Weng Ying Yan Gan Dai Shen Tian Tian Han Chang Sheng Qing Shen Chan Chan Rui Sheng Su Shen Yong Shuai Lu Fu Yong Beng Feng Ning Tian You Jia Shen Zha Dian Fu Nan Dian Ping Ting Hua Ting Zhen Zai Meng Bi Bi Liu Xun Liu Chang Mu Yun Fan Fu Geng Tian Jie Jie Quan Wei Fu Tian Mu Duo Pan Jiang Wa Da Nan Liu Ben Zhen Chu Mu Mu Ce Tian Gai Bi Da Zhi Lue Qi Lue Pan Yi Fan Hua She Yu Mu Jun Yi Liu She Die Chou Hua Dang Zhui Ji Wan Jiang Cheng Chang Tun Lei Ji Cha Liu Die Tuan Lin Jiang Jiang Chou Pi Die Die Pi Jie Dan Shu Shu Zhi Yi Ne Nai Ding Bi Jie Liao Gang Ge Jiu Zhou Xia Shan Xu Nue Li Yang Chen You Ba Jie Jue Qi Xia Cui Bi Yi Li Zong Chuang Feng Zhu Pao Pi Gan Ke Ci Xue Zhi Dan Zhen Fa Zhi Teng Ju Ji Fei Ju Shan Jia Xuan Zha Bing Nie Zheng Yong Jing Quan Teng Tong Yi Jie Wei Hui Tan Yang Chi Zhi Hen Ya Mei Dou Jing Xiao Tong Tu Mang Pi Xiao Suan Fu Li Zhi Cuo Duo Wu Sha Lao Shou Huan Xian Yi Beng Zhang Guan Tan Fei Ma Lin Chi Ji Tian An Chi Bi Bi Min Gu Dui E Wei'; + case 118: + return 'Yu Cui Ya Zhu Cu Dan Shen Zhong Chi Yu Hou Feng La Yang Chen Tu Yu Guo Wen Huan Ku Jia Yin Yi Lou Sao Jue Chi Xi Guan Yi Wen Ji Chuang Ban Hui Liu Chai Shou Nue Dian Da Bie Tan Zhang Biao Shen Cu Luo Yi Zong Chou Zhang Zhai Sou Se Que Diao Lou Lou Mo Qin Yin Ying Huang Fu Liao Long Qiao Liu Lao Xian Fei Dan Yin He Ai Ban Xian Guan Gui Nong Yu Wei Yi Yong Pi Lei Li Shu Dan Lin Dian Lin Lai Bie Ji Chi Yang Xuan Jie Zheng Me Li Huo Lai Ji Dian Xuan Ying Yin Qu Yong Tan Dian Luo Luan Luan Bo Bo Gui Ba Fa Deng Fa Bai Bai Qie Ji Zao Zao Mao De Pa Jie Huang Gui Ci Ling Gao Mo Ji Jiao Peng Gao Ai E Hao Han Bi Wan Chou Qian Xi Ai Xiao Hao Huang Hao Ze Cui Hao Xiao Ye Po Hao Jiao Ai Xing Huang Li Piao He Jiao Pi Gan Pao Zhou Jun Qiu Cun Que Zha Gu Jun Jun Zhou Zha Gu Zhao Du Min Qi Ying Yu Bei Zhao Zhong Pen He Ying He Yi Bo Wan He Ang Zhan Yan Jian He Yu Kui Fan Gai Dao Pan Fu Qiu Sheng Dao Lu Zhan Meng Li Jin Xu Jian Pan Guan An Lu Xu Zhou Dang An Gu Li Mu Ding Gan Xu Mang Wang Zhi Qi Yuan Tian Xiang Dun Xin Xi Pan Feng Dun Min'; + case 119: + return 'Ming Sheng Shi Yun Mian Pan Fang Miao Dan Mei Mao Kan Xian Kou Shi Yang Zheng Yao Shen Huo Da Zhen Kuang Ju Shen Yi Sheng Mei Mo Zhu Zhen Zhen Mian Shi Yuan Die Ni Zi Zi Chao Zha Xuan Bing Mi Long Sui Tong Mi Die Di Ne Ming Xuan Chi Kuang Juan Mou Zhen Tiao Yang Yan Mo Zhong Mo Zhe Zheng Mei Suo Shao Han Huan Di Cheng Cuo Juan E Man Xian Xi Kun Lai Jian Shan Tian Gun Wan Leng Shi Qiong Lie Ya Jing Zheng Li Lai Sui Juan Shui Sui Du Bi Pi Mu Hun Ni Lu Yi Jie Cai Zhou Yu Hun Ma Xia Xing Hui Gun Zai Chun Jian Mei Du Hou Xuan Tian Kui Gao Rui Mao Xu Fa Wo Miao Chou Kui Mi Weng Kou Dang Chen Ke Sou Xia Qiong Mo Ming Man Shui Ze Zhang Yi Diao Kou Mo Shun Cong Lou Chi Man Piao Cheng Gui Meng Wan Run Pie Xi Qiao Pu Zhu Deng Shen Shun Liao Che Xian Kan Ye Xu Tong Mou Lin Gui Jian Ye Ai Hui Zhan Jian Gu Zhao Qu Mei Chou Sao Ning Xun Yao Huo Meng Mian Pin Mian Lei Kuang Jue Xuan Mian Huo Lu Meng Long Guan Man Xi Chu Tang Kan Zhu Mao Jin Jin Yu Shuo Ze Jue Shi Yi Shen Zhi Hou Shen Ying Ju Zhou Jiao Cuo Duan Ai Jiao Zeng Yue Ba Shi Ding Qi Ji Zi Gan Wu Zhe Ku Gang Xi Fan Kuang'; + case 120: + return 'Dang Ma Sha Dan Jue Li Fu Min E Huo Kang Zhi Qi Kan Jie Bin E Ya Pi Zhe Yan Sui Zhuan Che Dun Wa Yan Jin Feng Fa Mo Zha Ju Yu Ke Tuo Tuo Di Zhai Zhen E Fu Mu Zhu La Bian Nu Ping Peng Ling Pao Le Po Bo Po Shen Za Ai Li Long Tong Yong Li Kuang Chu Keng Quan Zhu Kuang Gui E Nao Qia Lu Wei Ai Ge Xian Xing Yan Dong Peng Xi Lao Hong Shuo Xia Qiao Qing Wei Qiao Yi Keng Xiao Que Chan Lang Hong Yu Xiao Xia Mang Luo Yong Che Che Wo Liu Ying Mang Que Yan Sha Kun Yu Chi Hua Lu Chen Jian Nue Song Zhuo Keng Peng Yan Zhui Kong Cheng Qi Zong Qing Lin Jun Bo Ding Min Diao Jian He Lu Ai Sui Que Leng Bei Yin Dui Wu Qi Lun Wan Dian Nao Bei Qi Chen Ruan Yan Die Ding Du Tuo Jie Ying Bian Ke Bi Wei Shuo Zhen Duan Xia Dang Ti Nao Peng Jian Di Tan Cha Tian Qi Dun Feng Xuan Que Que Ma Gong Nian Su E Ci Liu Si Tang Bang Hua Pi Wei Sang Lei Cuo Tian Xia Xi Lian Pan Wei Yun Dui Zhe Ke La Zhuan Yao Gun Zhuan Chan Qi Ao Peng Liu Lu Kan Chuang Chen Yin Lei Biao Qi Mo Qi Cui Zong Qing Chuo Lun Ji Shan Lao Qu Zeng Deng Jian Xi Lin Ding Tan Huang Pan Za Qiao Di Li'; + case 121: + return 'Jian Jiao Xi Zhang Qiao Dun Jian Yu Zhui He Ke Ze Lei Jie Chu Ye Que Dang Yi Jiang Pi Pi Yu Pin E Ai Ke Jian Yu Ruan Meng Pao Ci Bo Yang Ma Ca Xian Kuang Lei Lei Zhi Li Li Fan Que Pao Ying Li Long Long Mo Bo Shuang Guan Lan Ca Yan Shi Shi Li Reng She Yue Si Qi Ta Ma Xie Yao Xian Qi Qi Zhi Beng Dui Zhong Ren Yi Shi You Zhi Tiao Fu Fu Mi Zu Zhi Suan Mei Zuo Qu Hu Zhu Shen Sui Ci Chai Mi Lu Yu Xiang Wu Tiao Piao Zhu Gui Xia Zhi Ji Gao Zhen Gao Shui Jin Shen Gai Kun Di Dao Huo Tao Qi Gu Guan Zui Ling Lu Bing Jin Dao Zhi Lu Chan Bi Zhe Hui You Xi Yin Zi Huo Zhen Fu Yuan Wu Xian Yang Zhi Yi Mei Si Di Bei Zhuo Zhen Yong Ji Gao Tang Si Ma Ta Fu Xuan Qi Yu Xi Ji Si Chan Dan Gui Sui Li Nong Mi Dao Li Rang Yue Ti Zan Lei Rou Yu Yu Li Xie Qin He Tu Xiu Si Ren Tu Zi Cha Gan Yi Xian Bing Nian Qiu Qiu Zhong Fen Hao Yun Ke Miao Zhi Jing Bi Zhi Yu Mi Ku Ban Pi Ni Li You Zu Pi Bo Ling Mo Cheng Nian Qin Yang Zuo Zhi Zhi Shu Ju Zi Huo Ji Cheng Tong Zhi Huo He Yin Zi Zhi Jie Ren Du Yi Zhu Hui Nong Fu'; + case 122: + return 'Xi Gao Lang Fu Xun Shui Lu Kun Gan Jing Ti Cheng Tu Shao Shui Ya Lun Lu Gu Zuo Ren Zhun Bang Bai Ji Zhi Zhi Kun Leng Peng Ke Bing Chou Zui Yu Su Lue Xiang Yi Xi Bian Ji Fu Pi Nuo Jie Zhong Zong Xu Cheng Dao Wen Xian Zi Yu Ji Xu Zhen Zhi Dao Jia Ji Gao Gao Gu Rong Sui Rong Ji Kang Mu Can Mei Zhi Ji Lu Su Ji Ying Wen Qiu Se He Yi Huang Qie Ji Sui Xiao Pu Jiao Zhuo Zhong Zui Lu Sui Nong Se Hui Rang Nuo Yu Pin Ji Tui Wen Cheng Huo Kuang Lu Biao Se Rang Zhuo Li Cuan Xue Wa Jiu Qiong Xi Qiong Kong Yu Shen Jing Yao Chuan Zhun Tu Lao Qie Zhai Yao Bian Bao Yao Bing Wa Zhu Jiao Qiao Diao Wu Gui Yao Zhi Chuang Yao Tiao Jiao Chuang Jiong Xiao Cheng Kou Cuan Wo Dan Ku Ke Zhuo Xu Su Guan Kui Dou Zhuo Xun Wo Wa Ya Yu Ju Qiong Yao Yao Tiao Chao Yu Tian Diao Ju Liao Xi Wu Kui Chuang Zhao Kuan Kuan Long Cheng Cui Liao Zao Cuan Qiao Qiong Dou Zao Long Qie Li Chu Shi Fu Qian Chu Hong Qi Hao Sheng Fen Shu Miao Qu Zhan Zhu Ling Long Bing Jing Jing Zhang Bai Si Jun Hong Tong Song Jing Diao Yi Shu Jing Qu Jie Ping Duan Li Zhuan Ceng Deng Cun Wai Jing Kan Jing Zhu Zhu Le Peng Yu Chi Gan'; + case 123: + return 'Mang Zhu Wan Du Ji Jiao Ba Suan Ji Qin Zhao Sun Ya Zhui Yuan Hu Hang Xiao Cen Bi Bi Jian Yi Dong Shan Sheng Da Di Zhu Na Chi Gu Li Qie Min Bao Tiao Si Fu Ce Ben Fa Da Zi Di Ling Ze Nu Fu Gou Fan Jia Gan Fan Shi Mao Po Ti Jian Qiong Long Min Bian Luo Gui Qu Chi Yin Yao Xian Bi Qiong Kuo Deng Xiao Jin Quan Sun Ru Fa Kuang Zhu Tong Ji Da Hang Ce Zhong Kou Lai Bi Shai Dang Zheng Ce Fu Yun Tu Pa Li Lang Ju Guan Jian Han Tong Xia Zhi Cheng Suan Shi Zhu Zuo Xiao Shao Ting Ce Yan Gao Kuai Gan Chou Kuang Gang Yun Ou Qian Xiao Jian Pou Lai Zou Bi Bi Bi Ge Tai Guai Yu Jian Dao Gu Chi Zheng Qing Sha Zhou Lu Bo Ji Lin Suan Jun Fu Zha Gu Kong Qian Qian Jun Chui Guan Yuan Ce Zu Bo Ze Qie Tuo Luo Dan Xiao Ruo Jian Xuan Bian Sun Xiang Xian Ping Zhen Xing Hu Yi Zhu Yue Chun Lu Wu Dong Shuo Ji Jie Huang Xing Mei Fan Chuan Zhuan Pian Feng Zhu Huang Qie Hou Qiu Miao Qian Gu Kui Shi Lou Yun He Tang Yue Chou Gao Fei Ruo Zheng Gou Nie Qian Xiao Cuan Long Peng Du Li Bi Zhuo Chu Shai Chi Zhu Qiang Long Lan Jian Bu Li Hui Bi Di Cong Yan Peng Can Zhuan Pi Piao Dou Yu Mie Tuan'; + case 124: + return 'Ze Shai Gui Yi Hu Chan Kou Cu Ping Zao Ji Gui Su Lou Ce Lu Nian Suo Cuan Diao Suo Le Duan Liang Xiao Bo Mi Shai Dang Liao Dan Dian Fu Jian Min Kui Dai Jiao Deng Huang Sun Lao Zan Xiao Lu Shi Zan Qi Pai Qi Pai Gan Ju Lu Lu Yan Bo Dang Sai Zhua Gou Qian Lian Bu Zhou Lai Shi Lan Kui Yu Yue Hao Zhen Tai Ti Nie Chou Ji Yi Qi Teng Zhuan Zhou Fan Sou Zhou Qian Zhuo Teng Lu Lu Jian Tuo Ying Yu Lai Long Qie Lian Lan Qian Yue Zhong Qu Lian Bian Duan Zuan Li Si Luo Ying Yue Zhuo Yu Mi Di Fan Shen Zhe Shen Nu He Lei Xian Zi Ni Cun Zhang Qian Zhai Bi Ban Wu Sha Kang Rou Fen Bi Cui Yin Zhe Mi Tai Hu Ba Li Gan Ju Po Mo Cu Zhan Zhou Chi Su Tiao Li Xi Su Hong Tong Zi Ce Yue Zhou Lin Zhuang Bai Lao Fen Er Qu He Liang Xian Fu Liang Can Jing Li Yue Lu Ju Qi Cui Bai Zhang Lin Zong Jing Guo Hua San San Tang Bian Rou Mian Hou Xu Zong Hu Jian Zan Ci Li Xie Fu Nuo Bei Gu Xiu Gao Tang Qiu Jia Cao Zhuang Tang Mi San Fen Zao Kang Jiang Mo San San Nuo Xi Liang Jiang Kuai Bo Huan Shu Zong Xian Nuo Tuan Nie Li Zuo Di Nie Tiao Lan Mi Si Jiu Xi Gong Zheng Jiu You'; + case 125: + return 'Ji Cha Zhou Xun Yue Hong Yu He Wan Ren Wen Wen Qiu Na Zi Tou Niu Fou Ji Shu Chun Pi Zhen Sha Hong Zhi Ji Fen Yun Ren Dan Jin Su Fang Suo Cui Jiu Za Ba Jin Fu Zhi Qi Zi Chou Hong Za Lei Xi Fu Xie Shen Bo Zhu Qu Ling Zhu Shao Gan Yang Fu Tuo Zhen Dai Chu Shi Zhong Xian Zu Jiong Ban Qu Mo Shu Zui Kuang Jing Ren Hang Xie Jie Zhu Chou Gua Bai Jue Kuang Hu Ci Huan Geng Tao Jie Ku Jiao Quan Gai Luo Xuan Beng Xian Fu Gei Dong Rong Tiao Yin Lei Xie Juan Xu Gai Die Tong Si Jiang Xiang Hui Jue Zhi Jian Juan Chi Mian Zhen Lu Cheng Qiu Shu Bang Tong Xiao Huan Qin Geng Xiu Ti Tou Xie Hong Xi Fu Ting Sui Dui Kun Fu Jing Hu Zhi Yan Jiong Feng Ji Xu Ren Zong Chen Duo Li Lu Liang Chou Quan Shao Qi Qi Zhun Qi Wan Qian Xian Shou Wei Qi Tao Wan Gang Wang Beng Zhui Cai Guo Cui Lun Liu Qi Zhan Bi Chuo Ling Mian Qi Qie Tian Zong Gun Zou Xi Zi Xing Liang Jin Fei Rui Min Yu Zong Fan Lu Xu Ying Shang Qi Xu Xiang Jian Ke Xian Ruan Mian Ji Duan Chong Di Min Miao Yuan Xie Bao Si Qiu Bian Huan Geng Cong Mian Wei Fu Wei Tou Gou Miao Xie Lian Zong Bian Yun Yin Ti Gua Zhi Yun Cheng Chan Dai'; + case 126: + return 'Xia Yuan Zong Xu Sheng Wei Geng Xuan Ying Jin Yi Zhui Ni Bang Gu Pan Zhou Jian Ci Quan Shuang Yun Xia Cui Xi Rong Tao Fu Yun Chen Gao Ru Hu Zai Teng Xian Su Zhen Zong Tao Huang Cai Bi Feng Cu Li Suo Yan Xi Zong Lei Juan Qian Man Zhi Lu Mu Piao Lian Mi Xuan Zong Ji Shan Sui Fan Lu Beng Yi Sao Mou Yao Qiang Hun Xian Ji Sha Xiu Ran Xuan Sui Qiao Zeng Zuo Zhi Shan San Lin Yu Fan Liao Chuo Zun Jian Rao Chan Rui Xiu Hui Hua Zuan Xi Qiang Yun Da Sheng Hui Xi Se Jian Jiang Huan Zao Cong Xie Jiao Bi Dan Yi Nong Sui Yi Shai Xu Ji Bin Qian Lan Pu Xun Zuan Qi Peng Yao Mo Lei Xie Zuan Kuang You Xu Lei Xian Chan Jiao Lu Chan Ying Cai Rang Xian Zui Zuan Luo Li Dao Lan Lei Lian Si Jiu Yu Hong Zhou Xian Ge Yue Ji Wan Kuang Ji Ren Wei Yun Hong Chun Pi Sha Gang Na Ren Zong Lun Fen Zhi Wen Fang Zhu Zhen Niu Shu Xian Gan Xie Fu Lian Zu Shen Xi Zhi Zhong Zhou Ban Fu Chu Shao Yi Jing Dai Bang Rong Jie Ku Rao Die Hang Hui Gei Xuan Jiang Luo Jue Jiao Tong Geng Xiao Juan Xiu Xi Sui Tao Ji Ti Ji Xu Ling Ying Xu Qi Fei Chuo Shang Gun Sheng Wei Mian Shou Beng Chou Tao Liu Quan Zong Zhan Wan Lu'; + case 127: + return 'Zhui Zi Ke Xiang Jian Mian Lan Ti Miao Ji Yun Hui Si Duo Duan Bian Xian Gou Zhui Huan Di Lu Bian Min Yuan Jin Fu Ru Zhen Feng Cui Gao Chan Li Yi Jian Bin Piao Man Lei Ying Suo Mou Sao Xie Liao Shan Zeng Jiang Qian Qiao Huan Jiao Zuan Fou Xie Gang Fou Que Fou Qi Bo Ping Xiang Zhao Gang Ying Ying Qing Xia Guan Zun Tan Cheng Qi Weng Ying Lei Tan Lu Guan Wang Wang Gang Wang Han Luo Luo Fu Shen Fa Gu Zhu Ju Mao Gu Min Gang Ba Gua Ti Juan Fu Shen Yan Zhao Zui Gua Zhuo Yu Zhi An Fa Lan Shu Si Pi Ma Liu Ba Fa Li Chao Wei Bi Ji Zeng Chong Liu Ji Juan Mi Zhao Luo Pi Ji Ji Luan Yang Mi Qiang Da Mei Yang You You Fen Ba Gao Yang Gu Qiang Zang Gao Ling Yi Zhu Di Xiu Qiang Yi Xian Rong Qun Qun Qiang Huan Suo Xian Yi Yang Qiang Qian Yu Geng Jie Tang Yuan Xi Fan Shan Fen Shan Lian Lei Geng Nou Qiang Chan Yu Gong Yi Chong Weng Fen Hong Chi Chi Cui Fu Xia Ben Yi La Yi Pi Ling Liu Zhi Qu Xi Xie Xiang Xi Xi Ke Qiao Hui Hui Xiao Sha Hong Jiang Di Cui Fei Dao Sha Chi Zhu Jian Xuan Chi Pian Zong Wan Hui Hou He He Han Ao Piao Yi Lian Hou Ao Lin Pen Qiao Ao Fan Yi Hui Xuan Dao'; + case 128: + return 'Yao Lao Lao Kao Mao Zhe Qi Gou Gou Gou Die Die Er Shua Ruan Nai Nai Duan Lei Ting Zi Geng Chao Hao Yun Ba Pi Yi Si Qu Jia Ju Huo Chu Lao Lun Ji Tang Ou Lou Nou Jiang Pang Zha Lou Ji Lao Huo You Mo Huai Er Yi Ding Ye Da Song Qin Yun Chi Dan Dan Hong Geng Zhi Pan Nie Dan Zhen Che Ling Zheng You Wa Liao Long Zhi Ning Tiao Er Ya Tie Gua Xu Lian Hao Sheng Lie Pin Jing Ju Bi Di Guo Wen Xu Ping Cong Ding Ni Ting Ju Cong Kui Lian Kui Cong Lian Weng Kui Lian Lian Cong Ao Sheng Song Ting Kui Nie Zhi Dan Ning Qie Ni Ting Ting Long Yu Yu Zhao Si Su Yi Su Si Zhao Zhao Rou Yi Le Ji Qiu Ken Cao Ge Bo Huan Huang Chi Ren Xiao Ru Zhou Yuan Du Gang Rong Gan Cha Wo Chang Gu Zhi Han Fu Fei Fen Pei Pang Jian Fang Zhun You Na Ang Ken Ran Gong Yu Wen Yao Qi Pi Qian Xi Xi Fei Ken Jing Tai Shen Zhong Zhang Xie Shen Wei Zhou Die Dan Fei Ba Bo Qu Tian Bei Gua Tai Zi Fei Zhi Ni Ping Zi Fu Pang Zhen Xian Zuo Pei Jia Sheng Zhi Bao Mu Qu Hu Ke Chi Yin Xu Yang Long Dong Ka Lu Jing Nu Yan Pang Kua Yi Guang Hai Ge Dong Chi Jiao Xiong Xiong Er An Heng Pian Neng Zi Gui'; + case 129: + return 'Cheng Tiao Zhi Cui Mei Xie Cui Xie Mai Mai Ji Xie Nin Kuai Sa Zang Qi Nao Mi Nong Luan Wan Bo Wen Wan Xiu Jiao Jing You Heng Cuo Lie Shan Ting Mei Chun Shen Qian De Juan Cu Xiu Xin Tuo Pao Cheng Nei Pu Dou Tuo Niao Nao Pi Gu Luo Li Lian Zhang Cui Jie Liang Shui Pi Biao Lun Pian Lei Kui Chui Dan Tian Nei Jing Nai La Ye Yan Ren Shen Chuo Fu Fu Ju Fei Qiang Wan Dong Pi Guo Zong Ding Wo Mei Ni Zhuan Chi Cou Luo Ou Di An Xing Nao Shu Shuan Nan Yun Zhong Rou E Sai Tu Yao Jian Wei Jiao Yu Jia Duan Bi Chang Fu Xian Ni Mian Wa Teng Tui Bang Qian Lu Wa Shou Tang Su Zhui Ge Yi Bo Liao Ji Pi Xie Gao Lu Bin Ou Chang Lu Guo Pang Chuai Biao Jiang Fu Tang Mo Xi Zhuan Lu Jiao Ying Lu Zhi Xue Cun Lin Tong Peng Ni Chuai Liao Cui Gui Xiao Teng Fan Zhi Jiao Shan Hu Cui Run Xiang Sui Fen Ying Shan Zhua Dan Kuai Nong Tun Lian Bi Yong Jue Chu Yi Juan La Lian Sao Tun Gu Qi Cui Bin Xun Nao Wo Zang Xian Biao Xing Kuan La Yan Lu Huo Za Luo Qu Zang Luan Ni Za Chen Qian Wo Guang Zang Lin Guang Zi Jiao Nie Chou Ji Gao Chou Mian Nie Zhi Zhi Ge Jian Die Zhi Xiu Tai Zhen Jiu Xian Yu Cha'; + case 130: + return 'Yao Yu Chong Xi Xi Jiu Yu Yu Xing Ju Jiu Xin She She She Jiu Shi Tan Shu Shi Tian Tan Pu Pu Guan Hua Tian Chuan Shun Xia Wu Zhou Dao Chuan Shan Yi Fan Pa Tai Fan Ban Chuan Hang Fang Ban Bi Lu Zhong Jian Cang Ling Zhu Ze Duo Bo Xian Ge Chuan Xia Lu Qiong Pang Xi Kua Fu Zao Feng Li Shao Yu Lang Ting Yu Wei Bo Meng Nian Ju Huang Shou Ke Bian Mu Die Dao Bang Cha Yi Sou Cang Cao Lou Dai Xue Yao Chong Deng Dang Qiang Lu Yi Ji Jian Huo Meng Qi Lu Lu Chan Shuang Gen Liang Jian Jian Se Yan Fu Ping Yan Yan Cao Cao Yi Le Ting Jiao Ai Nai Tiao Jiao Jie Peng Wan Yi Chai Mian Mi Gan Qian Yu Yu Shao Qiong Du Hu Qi Mang Zi Hui Sui Zhi Xiang Pi Fu Tun Wei Wu Zhi Qi Shan Wen Qian Ren Fu Kou Jie Lu Xu Ji Qin Qi Yan Fen Ba Rui Xin Ji Hua Hua Fang Wu Jue Gou Zhi Yun Qin Ao Chu Mao Ya Fei Reng Hang Cong Yin You Bian Yi Qie Wei Li Pi E Xian Chang Cang Zhu Su Ti Yuan Ran Ling Tai Shao Di Miao Qing Li Yong Ke Mu Bei Bao Gou Min Yi Yi Ju Pie Ruo Ku Ning Ni Bo Bing Shan Xiu Yao Xian Ben Hong Ying Zha Dong Ju Die Nie Gan Hu Ping Mei Fu Sheng Gu Bi Wei'; + case 131: + return 'Fu Zhuo Mao Fan Jia Mao Mao Ba Ci Mo Zi Zhi Chi Ji Jing Long Cong Niao Yuan Xue Ying Qiong Ge Ming Li Rong Yin Gen Qian Chai Chen Yu Hao Zi Lie Wu Ji Gui Ci Jian Ci Gou Guang Mang Cha Jiao Jiao Fu Yu Zhu Zi Jiang Hui Yin Cha Fa Rong Ru Chong Mang Tong Zhong Qian Zhu Xun Huan Fu Quan Gai Da Jing Xing Chuan Cao Jing Er An Qiao Chi Ren Jian Ti Huang Ping Li Jin Lao Shu Zhuang Da Jia Rao Bi Ce Qiao Hui Ji Dang Zi Rong Hun Xing Luo Ying Xun Jin Sun Yin Mai Hong Zhou Yao Du Wei Li Dou Fu Ren Yin He Bi Bu Yun Di Tu Sui Sui Cheng Chen Wu Bie Xi Geng Li Pu Zhu Mo Li Zhuang Zuo Tuo Qiu Sha Suo Chen Peng Ju Mei Meng Xing Jing Che Shen Jun Yan Ting You Cuo Guan Han You Cuo Jia Wang Su Niu Shao Xian Lang Fu E Mo Wen Jie Nan Mu Kan Lai Lian Shi Wo Tu Xian Huo You Ying Ying Gong Chun Mang Mang Ci Wan Jing Di Qu Dong Jian Zou Gu La Lu Ju Wei Jun Nie Kun He Pu Zai Gao Guo Fu Lun Chang Chou Song Chui Zhan Men Cai Ba Li Tu Bo Han Bao Qin Juan Xi Qin Di Jie Pu Dang Jin Qiao Tai Geng Hua Gu Ling Fei Qin An Wang Beng Zhou Yan Ju Jian Lin Tan Shu Tian Dao'; + case 132: + return 'Hu Qi He Cui Tao Chun Bi Chang Huan Fei Lai Qi Meng Ping Wei Dan Sha Huan Yan Yi Tiao Qi Wan Ce Nai Zhen Tuo Jiu Tie Luo Bi Yi Pan Bo Pao Ding Ying Ying Ying Xiao Sa Qiu Ke Xiang Wan Yu Yu Fu Lian Xuan Xuan Nan Ce Wo Chun Xiao Yu Bian Mao An E Luo Ying Kuo Kuo Jiang Mian Zuo Zuo Zu Bao Rou Xi Ye An Qu Jian Fu Lu Jing Pen Feng Hong Hong Hou Yan Tu Zhe Zi Xiang Ren Ge Qia Qing Mi Huang Shen Pu Gai Dong Zhou Jian Wei Bo Wei Pa Ji Hu Zang Jia Duan Yao Sui Cong Quan Wei Zhen Kui Ting Hun Xi Shi Qi Lan Zong Yao Yuan Mei Yun Shu Di Zhuan Guan Ran Xue Chan Kai Kui Hua Jiang Lou Wei Pai You Sou Yin Shi Chun Shi Yun Zhen Lang Ru Meng Li Que Suan Yuan Li Ju Xi Bang Chu Xu Tu Liu Huo Dian Qian Zu Po Cuo Yuan Chu Yu Kuai Pan Pu Pu Na Shuo Xi Fen Yun Zheng Jian Ji Ruo Cang En Mi Hao Sun Zhen Ming Sou Xu Liu Xi Gu Lang Rong Weng Gai Cuo Shi Tang Luo Ru Suo Xuan Bei Yao Gui Bi Zong Gun Zuo Tiao Ce Pei Lan Dan Ji Li Shen Lang Yu Ling Ying Mo Diao Tiao Mao Tong Chu Peng An Lian Cong Xi Ping Qiu Jin Chun Jie Wei Tui Cao Yu Yi Zi Liao Bi Lu Xu'; + case 133: + return 'Bu Zhang Lei Qiang Man Yan Ling Ji Biao Gun Han Di Su Lu She Shang Di Mie Xun Man Bo Di Cuo Zhe Shen Xuan Wei Hu Ao Mi Lou Cu Zhong Cai Po Jiang Mi Cong Niao Hui Juan Yin Jian Nian Shu Yin Guo Chen Hu Sha Kou Qian Ma Zang Ze Qiang Dou Lian Lin Kou Ai Bi Li Wei Ji Qian Sheng Fan Meng Ou Chan Dian Xun Jiao Rui Rui Lei Yu Qiao Chu Hua Jian Mai Yun Bao You Qu Lu Rao Hui E Ti Fei Jue Zui Fa Ru Fen Kui Shun Rui Ya Xu Fu Jue Dang Wu Dong Si Xiao Xi Long Wen Shao Qi Jian Yun Sun Ling Yu Xia Weng Ji Hong Si Nong Lei Xuan Yun Yu Xi Hao Bao Hao Ai Wei Hui Hui Ji Ci Xiang Wan Mie Yi Leng Jiang Can Shen Qiang Lian Ke Yuan Da Ti Tang Xue Bi Zhan Sun Xian Fan Ding Xie Gu Xie Shu Jian Hao Hong Sa Xin Xun Yao Bai Sou Shu Xun Dui Pin Wei Ning Chou Mai Ru Piao Tai Ji Zao Chen Zhen Er Ni Ying Gao Cong Xiao Qi Fa Jian Xu Kui Ji Bian Diao Mi Lan Jin Cang Miao Qiong Qie Xian Liao Ou Xian Su Lu Yi Xu Xie Li Yi La Lei Jiao Di Zhi Bei Teng Yao Mo Huan Biao Fan Sou Tan Tui Qiong Qiao Wei Liu Hui Ou Gao Yun Bao Li Shu Chu Ai Lin Zao Xuan Qin Lai Huo'; + case 134: + return 'Tuo Wu Rui Rui Qi Heng Lu Su Tui Meng Yun Ping Yu Xun Ji Jiong Xuan Mo Qiu Su Jiong Peng Nie Bo Rang Yi Xian Yu Ju Lian Lian Yin Qiang Ying Long Tou Hua Yue Ling Qu Yao Fan Mei Han Kui Lan Ji Dang Man Lei Lei Hui Feng Zhi Wei Kui Zhan Huai Li Ji Mi Lei Huai Luo Ji Kui Lu Jian Sa Teng Lei Quan Xiao Yi Luan Men Bie Hu Hu Lu Nue Lu Si Xiao Qian Chu Hu Xu Cuo Fu Xu Xu Lu Hu Yu Hao Jiao Ju Guo Bao Yan Zhan Zhan Kui Bin Xi Shu Chong Qiu Diao Ji Qiu Ding Shi Xia Jue Zhe She Yu Han Zi Hong Hui Meng Ge Sui Xia Chai Shi Yi Ma Xiang Fang E Ba Chi Qian Wen Wen Rui Bang Pi Yue Yue Jun Qi Tong Yin Qi Can Yuan Jue Hui Qin Qi Zhong Ya Hao Mu Wang Fen Fen Hang Gong Zao Fu Ran Jie Fu Chi Dou Bao Xian Ni Dai Qiu You Zha Ping Chi You He Han Ju Li Fu Ran Zha Gou Pi Pi Xian Zhu Diao Bie Bing Gu Zhan Qu She Tie Ling Gu Dan Gu Ying Li Cheng Qu Mou Ge Ci Hui Hui Mang Fu Yang Wa Lie Zhu Yi Xian Kuo Jiao Li Yi Ping Qi Ha She Yi Wang Mo Qiong Qie Gui Qiong Zhi Man Lao Zhe Jia Nao Si Qi Xing Jie Qiu Shao Yong Jia Tui Che Bei E Han'; + case 135: + return 'Shu Xuan Feng Shen Shen Fu Xian Zhe Wu Fu Li Lang Bi Chu Yuan You Jie Dan Yan Ting Dian Tui Hui Wo Zhi Song Fei Ju Mi Qi Qi Yu Jun La Meng Qiang Si Xi Lun Li Die Tiao Tao Kun Han Han Yu Bang Fei Pi Wei Dun Yi Yuan Suo Quan Qian Rui Ni Qing Wei Liang Guo Wan Dong E Ban Di Wang Can Yang Ying Guo Chan Ding La Ke Jie Xie Ting Mao Xu Mian Yu Jie Shi Xuan Huang Yan Bian Rou Wei Fu Yuan Mei Wei Fu Ru Xie You Qiu Mao Xia Ying Shi Chong Tang Zhu Zong Ti Fu Yuan Kui Meng La Du Hu Qiu Die Li Wo Yun Qu Nan Lou Chun Rong Ying Jiang Ban Lang Pang Si Xi Ci Xi Yuan Weng Lian Sou Ban Rong Rong Ji Wu Xiu Han Qin Yi Bi Hua Tang Yi Du Nai He Hu Gui Ma Ming Yi Wen Ying Te Zhong Cang Sao Qi Man Tiao Shang Shi Cao Chi Di Ao Lu Wei Zhi Tang Chen Piao Qu Pi Yu Jian Luo Lou Qin Zhong Yin Jiang Shuai Wen Xiao Wan Zhe Zhe Ma Ma Guo Liu Mao Xi Cong Li Man Xiao Chang Zhang Mang Xiang Mo Zui Si Qiu Te Zhi Peng Peng Jiao Qu Bie Liao Pan Gui Xi Ji Zhuan Huang Fei Lao Jue Jue Hui Yin Chan Jiao Shan Nao Xiao Wu Chong Xun Si Chu Cheng Dang Li Xie Shan Yi Jing Da Chan Qi'; + case 136: + return 'Ci Xiang She Luo Qin Ying Chai Li Zei Xuan Lian Zhu Ze Xie Mang Xie Qi Rong Jian Meng Hao Ru Huo Zhuo Jie Pin He Mie Fan Lei Jie La Min Li Chun Li Qiu Nie Lu Du Xiao Zhu Long Li Long Feng Ye Pi Nang Gu Juan Ying Shu Xi Can Qu Quan Du Can Man Qu Jie Zhu Zhuo Xue Huang Nu Pei Nu Xin Zhong Mai Er Ka Mie Xi Xing Yan Kan Yuan Qu Ling Xuan Shu Xian Tong Xiang Jie Xian Ya Hu Wei Dao Chong Wei Dao Zhun Heng Qu Yi Yi Bu Gan Yu Biao Cha Yi Shan Chen Fu Gun Fen Shuai Jie Na Zhong Dan Yi Zhong Zhong Jie Zhi Xie Ran Zhi Ren Qin Jin Jun Yuan Mei Chai Ao Niao Hui Ran Jia Tuo Ling Dai Bao Pao Yao Zuo Bi Shao Tan Ju He Xue Xiu Zhen Yi Pa Bo Di Wa Fu Gun Zhi Zhi Ran Pan Yi Mao Tuo Na Gou Xuan Zhe Qu Bei Yu Xi Mi Bo Bo Fu Chi Chi Ku Ren Jiang Qia Jian Bo Jie Er Ge Ru Zhu Gui Yin Cai Lie Ka Xing Zhuang Dang Xu Kun Ken Niao Shu Jia Kun Cheng Li Juan Shen Pou Ge Yi Yu Zhen Liu Qiu Qun Ji Yi Bu Zhuang Shui Sha Qun Li Lian Lian Ku Jian Fou Chan Bi Kun Tao Yuan Ling Chi Chang Chou Duo Biao Liang Shang Pei Pei Fei Yuan Luo Guo Yan Du Ti Zhi Ju Yi'; + case 137: + return 'Qi Guo Gua Ken Qi Ti Ti Fu Chong Xie Bian Die Kun Duan Xiu Xiu He Yuan Bao Bao Fu Yu Tuan Yan Hui Bei Chu Lu Pao Dan Yun Ta Gou Da Huai Rong Yuan Ru Nai Jiong Suo Ban Tui Chi Sang Niao Ying Jie Qian Huai Ku Lian Lan Li Zhe Shi Lu Yi Die Xie Xian Wei Biao Cao Ji Qiang Sen Bao Xiang Bi Fu Jian Zhuan Jian Cui Ji Dan Za Fan Bo Xiang Xin Bie Rao Man Lan Ao Ze Gui Cao Sui Nong Chan Lian Bi Jin Dang Shu Tan Bi Lan Fu Ru Zhi Dui Shu Wa Shi Bai Xie Bo Chen Lai Long Xi Xian Lan Zhe Dai Ju Zan Shi Jian Pan Yi Lan Ya Xi Xi Yao Feng Tan Fu Fiao Fu Ba He Ji Ji Jian Guan Bian Yan Gui Jue Pian Mao Mi Mi Mie Shi Si Chan Luo Jue Mi Tiao Lian Yao Zhi Jun Xi Shan Wei Xi Tian Yu Lan E Du Qin Pang Ji Ming Ying Gou Qu Zhan Jin Guan Deng Jian Luo Qu Jian Wei Jue Qu Luo Lan Shen Di Guan Jian Guan Yan Gui Mi Shi Chan Lan Jue Ji Xi Di Tian Yu Gou Jin Qu Jiao Qiu Jin Cu Jue Zhi Chao Ji Gu Dan Zi Di Shang Hua Quan Ge Shi Jie Gui Gong Chu Jie Hun Qiu Xing Su Ni Ji Lu Zhi Zha Bi Xing Hu Shang Gong Zhi Xue Chu Xi Yi Li Jue Xi Yan Xi'; + case 138: + return 'Yan Yan Ding Fu Qiu Qiu Jiao Hong Ji Fan Xun Diao Hong Chai Tao Xu Jie Yi Ren Xun Yin Shan Qi Tuo Ji Xun Yin E Fen Ya Yao Song Shen Yin Xin Jue Xiao Ne Chen You Zhi Xiong Fang Xin Chao She Yan Sa Zhun Xu Yi Yi Su Chi He Shen He Xu Zhen Zhu Zheng Gou Zi Zi Zhan Gu Fu Jian Die Ling Di Yang Li Nao Pan Zhou Gan Yi Ju Yao Zha Yi Yi Qu Zhao Ping Bi Xiong Qu Ba Da Zu Tao Zhu Ci Zhe Yong Xu Xun Yi Huang He Shi Cha Xiao Shi Hen Cha Gou Gui Quan Hui Jie Hua Gai Xiang Wei Shen Zhou Tong Mi Zhan Ming E Hui Yan Xiong Gua Er Bing Tiao Yi Lei Zhu Kuang Kua Wu Yu Teng Ji Zhi Ren Cu Lang E Kuang Ei Shi Ting Dan Bei Chan You Keng Qiao Qin Shua An Yu Xiao Cheng Jie Xian Wu Wu Gao Song Bu Hui Jing Shuo Zhen Shuo Du Hua Chang Shui Jie Ke Qu Cong Xiao Sui Wang Xian Fei Chi Ta Yi Ni Yin Diao Pi Zhuo Chan Chen Zhun Ji Qi Tan Zhui Wei Ju Qing Dong Zheng Ze Zou Qian Zhuo Liang Jian Chu Hao Lun Shen Biao Hua Pian Yu Die Xu Pian Shi Xuan Shi Hun Hua E Zhong Di Xie Fu Pu Ting Jian Qi Yu Zi Zhuan Xi Hui Yin An Xian Nan Chen Feng Zhu Yang Yan Huang Xuan Ge Nuo Qi'; + case 139: + return 'Mou Ye Wei Xing Teng Zhou Shan Jian Po Kui Huang Huo Ge Ying Mi Xiao Mi Xi Qiang Chen Xue Ti Su Bang Chi Qian Shi Jiang Yuan Xie He Tao Yao Yao Lu Yu Biao Cong Qing Li Mo Mo Shang Zhe Miu Jian Ze Jie Lian Lou Can Ou Gun Xi Zhuo Ao Ao Jin Zhe Yi Hu Jiang Man Chao Han Hua Chan Xu Zeng Se Xi Zha Dui Zheng Nao Lan E Ying Jue Ji Zun Jiao Bo Hui Zhuan Wu Zen Zha Shi Qiao Tan Zen Pu Sheng Xuan Zao Tan Dang Sui Xian Ji Jiao Jing Zhan Nang Yi Ai Zhan Pi Hui Hua Yi Yi Shan Rang Nou Qian Dui Ta Hu Zhou Hao Ai Ying Jian Yu Jian Hui Du Zhe Xuan Zan Lei Shen Wei Chan Li Yi Bian Zhe Yan E Chou Wei Chou Yao Chan Rang Yin Lan Chen Xie Nie Huan Zan Yi Dang Zhan Yan Du Yan Ji Ding Fu Ren Ji Jie Hong Tao Rang Shan Qi Tuo Xun Yi Xun Ji Ren Jiang Hui Ou Ju Ya Ne Xu E Lun Xiong Song Feng She Fang Jue Zheng Gu He Ping Zu Shi Xiong Zha Su Zhen Di Zhou Ci Qu Zhao Bi Yi Yi Kuang Lei Shi Gua Shi Ji Hui Cheng Zhu Shen Hua Dan Gou Quan Gui Xun Yi Zheng Gai Xiang Cha Hun Xu Zhou Jie Wu Yu Qiao Wu Gao You Hui Kuang Shuo Song Ei Qing Zhu Zou Nuo Du Zhuo Fei Ke Wei'; + case 140: + return 'Yu Shei Shen Diao Chan Liang Zhun Sui Tan Shen Yi Mou Chen Die Huang Jian Xie Xue Ye Wei E Yu Xuan Chan Zi An Yan Di Mi Pian Xu Mo Dang Su Xie Yao Bang Shi Qian Mi Jin Man Zhe Jian Miu Tan Zen Qiao Lan Pu Jue Yan Qian Zhan Chen Gu Qian Hong Xia Ji Hong Han Hong Xi Xi Huo Liao Han Du Long Dou Jiang Qi Shi Li Deng Wan Bi Shu Xian Feng Zhi Zhi Yan Yan Shi Chu Hui Tun Yi Tun Yi Jian Ba Hou E Chu Xiang Huan Jian Ken Gai Ju Fu Xi Bin Hao Yu Zhu Jia Fen Xi Bo Wen Huan Bin Di Zong Fen Yi Zhi Bao Chai An Pi Na Pi Gou Na You Diao Mo Si Xiu Huan Kun He Hao Mo An Mao Li Ni Bi Yu Jia Tuan Mao Pi Xi Yi Ju Mo Chu Tan Huan Jue Bei Zhen Yuan Fu Cai Gong Te Yi Hang Wan Pin Huo Fan Tan Guan Ze Zhi Er Zhu Shi Bi Zi Er Gui Pian Bian Mai Dai Sheng Kuang Fei Tie Yi Chi Mao He Bi Lu Lin Hui Gai Pian Zi Jia Xu Zei Jiao Gai Zang Jian Ying Xun Zhen She Bin Bin Qiu She Chuan Zang Zhou Lai Zan Ci Chen Shang Tian Pei Geng Xian Mai Jian Sui Fu Tan Cong Cong Zhi Ji Zhang Du Jin Xiong Chun Yun Bao Zai Lai Feng Cang Ji Sheng Yi Zhuan Fu Gou Sai Ze Liao'; + case 141: + return 'Yi Bai Chen Wan Zhi Zhui Biao Yun Zeng Dan Zan Yan Pu Shan Wan Ying Jin Gan Xian Zang Bi Du Shu Yan Shang Xuan Long Gan Zang Bei Zhen Fu Yuan Gong Cai Ze Xian Bai Zhang Huo Zhi Fan Tan Pin Bian Gou Zhu Guan Er Jian Ben Shi Tie Gui Kuang Dai Mao Fei He Yi Zei Zhi Jia Hui Zi Lin Lu Zang Zi Gai Jin Qiu Zhen Lai She Fu Du Ji Shu Shang Ci Bi Zhou Geng Pei Dan Lai Feng Zhui Fu Zhuan Sai Ze Yan Zan Yun Zeng Shan Ying Gan Chi Xi She Nan Tong Xi Cheng He Cheng Zhe Xia Tang Zou Zou Li Jiu Fu Zhao Gan Qi Shan Qiong Yin Xian Zi Jue Qin Chi Ci Chen Chen Die Ju Chao Di Xi Zhan Jue Yue Qu Ji Chi Chu Gua Xue Zi Tiao Duo Lie Gan Suo Cu Xi Zhao Su Yin Ju Jian Que Tang Chuo Cui Lu Qu Dang Qiu Zi Ti Qu Chi Huang Qiao Qiao Jiao Zao Ti Er Zan Zan Zu Pa Bao Ku Ke Dun Jue Fu Chen Jian Fang Zhi Ta Yue Ba Qi Yue Qiang Tuo Tai Yi Nian Ling Mei Ba Die Ku Tuo Jia Ci Pao Qia Zhu Ju Dian Zhi Fu Pan Ju Shan Bo Ni Ju Li Gen Yi Ji Duo Xian Jiao Duo Zhu Quan Kua Zhuai Gui Qiong Kui Xiang Chi Lu Pian Zhi Jia Tiao Cai Jian Da Qiao Bi Xian Duo Ji Ju Ji Shu Tu'; + case 142: + return 'Chu Jing Nie Xiao Bu Xue Cun Mu Shu Liang Yong Jiao Chou Qiao Mou Ta Jian Qi Wo Wei Chuo Jie Ji Nie Ju Nie Lun Lu Leng Huai Ju Chi Wan Quan Ti Bo Zu Qie Yi Cu Zong Cai Zong Peng Zhi Zheng Dian Zhi Yu Duo Dun Chuan Yong Zhong Di Zha Chen Chuai Jian Gua Tang Ju Fu Zu Die Pian Rou Nuo Ti Cha Tui Jian Dao Cuo Qi Ta Qiang Nian Dian Ti Ji Nie Man Liu Zan Bi Chong Lu Liao Cu Tang Dai Su Xi Kui Ji Zhi Qiang Di Pan Zong Lian Beng Zao Nian Bie Tui Ju Deng Ceng Xian Fan Chu Zhong Dun Bo Cu Cu Jue Jue Lin Ta Qiao Jue Pu Liao Dun Cuan Guan Zao Da Bi Bi Zhu Ju Chu Qiao Dun Chou Ji Wu Yue Nian Lin Lie Zhi Li Zhi Chan Chu Duan Wei Long Lin Xian Wei Zuan Lan Xie Rang Sa Nie Ta Qu Ji Cuan Cuo Xi Kui Jue Lin Shen Gong Dan Fen Qu Ti Duo Duo Gong Lang Ren Luo Ai Ji Ju Tang Kong Lao Yan Mei Kang Qu Lou Lao Duo Zhi Yan Ti Dao Ying Yu Che Ya Gui Jun Wei Yue Xin Dai Xuan Fan Ren Shan Kuang Shu Tun Chen Dai E Na Qi Mao Ruan Kuang Qian Zhuan Hong Hu Qu Kuang Di Ling Dai Ao Zhen Fan Kuang Yang Peng Bei Gu Gu Pao Zhu Rong E Ba Zhou Zhi Yao Ke Yi Zhi Shi Ping'; + case 143: + return 'Er Gong Ju Jiao Guang He Kai Quan Zhou Zai Zhi She Liang Yu Shao You Wan Yin Zhe Wan Fu Qing Zhou Ni Leng Zhe Zhan Liang Zi Hui Wang Chuo Guo Kan Yi Peng Qian Gun Nian Ping Guan Bei Lun Pai Liang Ruan Rou Ji Yang Xian Chuan Cou Chun Ge You Hong Shu Fu Zi Fu Wen Ben Zhan Yu Wen Tao Gu Zhen Xia Yuan Lu Jiao Chao Zhuan Wei Hun Xue Zhe Jiao Zhan Bu Lao Fen Fan Lin Ge Se Kan Huan Yi Ji Zhui Er Yu Jian Hong Lei Pei Li Li Lu Lin Che Ya Gui Xuan Dai Ren Zhuan E Lun Ruan Hong Gu Ke Lu Zhou Zhi Yi Hu Zhen Li Yao Qing Shi Zai Zhi Jiao Zhou Quan Lu Jiao Zhe Fu Liang Nian Bei Hui Gun Wang Liang Chuo Zi Cou Fu Ji Wen Shu Pei Yuan Xia Nian Lu Zhe Lin Xin Gu Ci Ci Pi Zui Bian La La Ci Xue Ban Bian Bian Bian Xue Bian Ban Ci Bian Bian Chen Ru Nong Nong Chan Chuo Chuo Yi Reng Bian Bian Shi Yu Liao Da Chan Gan Qian Yu Yu Qi Xun Yi Guo Mai Qi Za Wang Tu Zhun Ying Da Yun Jin Hang Ya Fan Wu Da E Hai Zhe Da Jin Yuan Wei Lian Chi Che Ni Tiao Zhi Yi Jiong Jia Chen Dai Er Di Po Zhu Die Ze Tao Shu Tuo Qu Jing Hui Dong You Mi Beng Ji Nai Yi Jie Zhui Lie Xun'; + case 144: + return 'Tui Song Shi Tao Pang Hou Ni Dun Jiong Xuan Xun Bu You Xiao Qiu Tou Zhu Qiu Di Di Tu Jing Ti Dou Yi Zhe Tong Guang Wu Shi Cheng Su Zao Qun Feng Lian Suo Hui Li Gu Lai Ben Cuo Jue Beng Huan Dai Lu You Zhou Jin Yu Chuo Kui Wei Ti Yi Da Yuan Luo Bi Nuo Yu Dang Sui Dun Sui Yan Chuan Chi Ti Yu Shi Zhen You Yun E Bian Guo E Xia Huang Qiu Dao Da Wei Nan Yi Gou Yao Chou Liu Xun Ta Di Chi Yuan Su Ta Qian Ma Yao Guan Zhang Ao Shi Ca Chi Su Zao Zhe Dun Di Lou Chi Cuo Lin Zun Rao Qian Xuan Yu Yi E Liao Ju Shi Bi Yao Mai Xie Sui Hai Zhan Teng Er Miao Bian Bian La Li Yuan Yao Luo Li Yi Ting Deng Qi Yong Shan Han Yu Mang Ru Qiong Xi Kuang Fu Kang Bin Fang Xing Na Xin Shen Bang Yuan Cun Huo Xie Bang Wu Ju You Han Tai Qiu Bi Pi Bing Shao Bei Wa Di Zou Ye Lin Kuang Gui Zhu Shi Ku Yu Gai He Qie Zhi Ji Huan Hou Xing Jiao Xi Gui Nuo Lang Jia Kuai Zheng Lang Yun Yan Cheng Dou Xi Lu Fu Wu Fu Gao Hao Lang Jia Geng Jun Ying Bo Xi Bei Li Yun Bu Xiao Qi Pi Qing Guo Zhou Tan Zou Ping Lai Ni Chen You Bu Xiang Dan Ju Yong Qiao Yi Dou Yan Mei'; + case 145: + return 'Ruo Bei E Shu Juan Yu Yun Hou Kui Xiang Xiang Sou Tang Ming Xi Ru Chu Zi Zou Ye Wu Xiang Yun Hao Yong Bi Mao Chao Fu Liao Yin Zhuan Hu Qiao Yan Zhang Man Qiao Xu Deng Bi Xun Bi Zeng Wei Zheng Mao Shan Lin Po Dan Meng Ye Cao Kuai Feng Meng Zou Kuang Lian Zan Chan You Ji Yan Chan Cuo Ling Huan Xi Feng Zan Li You Ding Qiu Zhuo Pei Zhou Yi Gan Yu Jiu Yan Zui Mao Zhen Xu Dou Zhen Fen Yuan Fu Yun Tai Tian Qia Tuo Cu Han Gu Su Po Chou Zai Ming Lao Chuo Chou You Tong Zhi Xian Jiang Cheng Yin Tu Jiao Mei Ku Suan Lei Pu Zui Hai Yan Shai Niang Wei Lu Lan Yan Tao Pei Zhan Chun Tan Zui Zhui Cu Kun Ti Xian Du Hu Xu Xing Tan Qiu Chun Yun Po Ke Sou Mi Quan Chou Cuo Yun Yong Ang Zha Hai Tang Jiang Piao Chen Yu Li Zao Lao Yi Jiang Bu Jiao Xi Tan Fa Nong Yi Li Ju Yan Yi Niang Ru Xun Chou Yan Ling Mi Mi Niang Xin Jiao Shai Mi Yan Bian Cai Shi You Shi Shi Li Zhong Ye Liang Xi Jin Jin Qiu Yi Liao Dao Zhao Ding Po Qiu Ba Fu Zhen Zhi Ba Luan Fu Nai Diao Shan Qiao Kou Chuan Zi Fan Hua Hua Han Gang Qi Mang Ri Di Si Xi Yi Chai Shi Tu Xi Nu Qian Qiu Jian Pi Ye Jin'; + case 146: + return 'Ba Fang Chen Xing Dou Yue Qian Fu Pi Na Xin E Jue Dun Gou Yin Qian Ban Sa Ren Chao Niu Fen Yun Yi Qin Pi Guo Hong Yin Jun Diao Yi Zhong Xi Gai Ri Huo Tai Kang Yuan Lu E Qin Duo Zi Ni Tu Shi Min Gu Ke Ling Bing Si Gu Bo Pi Yu Si Zuo Bu You Tian Jia Zhen Shi Shi Zhi Ju Chan Shi Shi Xuan Zhao Bao He Bi Sheng Chu Shi Bo Zhu Chi Za Po Tong Qian Fu Zhai Liu Qian Fu Li Yue Pi Yang Ban Bo Jie Gou Shu Zheng Mu Xi Xi Di Jia Mu Tan Huan Yi Si Kuang Ka Bei Jian Tong Xing Hong Jiao Chi Er Luo Bing Shi Mou Jia Yin Jun Zhou Chong Xiang Tong Mo Lei Ji Yu Xu Ren Zun Zhi Qiong Shan Chi Xian Xing Quan Pi Tie Zhu Xiang Ming Kua Yao Xian Xian Xiu Jun Cha Lao Ji Pi Ru Mi Yi Yin Guang An Diu You Se Kao Qian Luan Si Ai Diao Han Rui Shi Keng Qiu Xiao Zhe Xiu Zang Ti Cuo Gua Hong Zhong Tou Lu Mei Lang Wan Xin Yun Bei Wu Su Yu Chan Ding Bo Han Jia Hong Cuan Feng Chan Wan Zhi Si Xuan Hua Yu Tiao Kuang Zhuo Lue Xing Qin Shen Han Lue Ye Chu Zeng Ju Xian Tie Mang Pu Li Pan Rui Cheng Gao Li Te Bing Zhu Zhen Tu Liu Zui Ju Chang Yuan Jian Gang Diao Tao Chang'; + case 147: + return 'Lun Guo Ling Pi Lu Li Qiang Pou Juan Min Zui Peng An Pi Xian Ya Zhui Lei Ke Kong Ta Kun Du Nei Chui Zi Zheng Ben Nie Zong Chun Tan Ding Qi Qian Zhui Ji Yu Jin Guan Mao Chang Tian Xi Lian Tao Gu Cuo Shu Zhen Lu Meng Lu Hua Biao Ga Lai Ken Fang Wu Nai Wan Zan Hu De Xian Pian Huo Liang Fa Men Kai Ying Di Lian Guo Xian Du Tu Wei Zong Fu Rou Ji E Jun Chen Ti Zha Hu Yang Duan Xia Yu Keng Sheng Huang Wei Fu Zhao Cha Qie Shi Hong Kui Tian Mou Qiao Qiao Hou Tou Cong Huan Ye Min Jian Duan Jian Song Kui Hu Xuan Duo Jie Zhen Bian Zhong Zi Xiu Ye Mei Pai Ai Jie Qian Mei Suo Da Bang Xia Lian Suo Kai Liu Yao Ye Nou Weng Rong Tang Suo Qiang Li Shuo Chui Bo Pan Da Bi Sang Gang Zi Wu Ying Huang Tiao Liu Kai Sun Sha Sou Wan Hao Zhen Zhen Lang Yi Yuan Tang Nie Xi Jia Ge Ma Juan Song Zu Suo Xia Feng Wen Na Lu Suo Ou Zu Tuan Xiu Guan Xuan Lian Shou Ao Man Mo Luo Bi Wei Liu Di San Zong Yi Lu Ao Keng Qiang Cui Qi Chang Tang Man Yong Chan Feng Jing Biao Shu Lou Xiu Cong Long Zan Jian Cao Li Xia Xi Kang Shuang Beng Zhang Qian Cheng Lu Hua Ji Pu Hui Qiang Po Lin Se Xiu San Cheng'; + case 148: + return 'Kui Si Liu Nao Huang Pie Sui Fan Qiao Quan Yang Tang Xiang Jue Jiao Zun Liao Qie Lao Dui Xin Zan Ji Jian Zhong Deng Ya Ying Dui Jue Nou Zan Pu Tie Fan Cheng Ding Shan Kai Jian Fei Sui Lu Juan Hui Yu Lian Zhuo Qiao Jian Zhuo Lei Bi Tie Huan Ye Duo Guo Dang Ju Fen Da Bei Yi Ai Zong Xun Diao Zhu Heng Zhui Ji Nie He Huo Qing Bin Ying Kui Ning Xu Jian Jian Qian Cha Zhi Mie Li Lei Ji Zuan Kuang Shang Peng La Du Shuo Chuo Lu Biao Bao Lu Xian Kuan Long E Lu Xin Jian Lan Bo Jian Yao Chan Xiang Jian Xi Guan Cang Nie Lei Cuan Qu Pan Luo Zuan Luan Zao Nie Jue Tang Zhu Lan Jin Ga Yi Zhen Ding Zhao Po Liao Tu Qian Chuan Shan Sa Fan Diao Men Nu Yang Chai Xing Gai Bu Tai Ju Dun Chao Zhong Na Bei Gang Ban Qian Yao Qin Jun Wu Gou Kang Fang Huo Tou Niu Ba Yu Qian Zheng Qian Gu Bo Ke Po Bu Bo Yue Zuan Mu Tan Jia Dian You Tie Bo Ling Shuo Qian Mao Bao Shi Xuan Ta Bi Ni Pi Duo Xing Kao Lao Er Mang Ya You Cheng Jia Ye Nao Zhi Dang Tong Lu Diao Yin Kai Zha Zhu Xi Ding Diu Xian Hua Quan Sha Ha Diao Ge Ming Zheng Se Jiao Yi Chan Chong Tang An Yin Ru Zhu Lao Pu Wu Lai Te Lian Keng'; + case 149: + return 'Xiao Suo Li Zeng Chu Guo Gao E Xiu Cuo Lue Feng Xin Liu Kai Jian Rui Ti Lang Qin Ju A Qiang Zhe Nuo Cuo Mao Ben Qi De Ke Kun Chang Xi Gu Luo Chui Zhui Jin Zhi Xian Juan Huo Pei Tan Ding Jian Ju Meng Zi Qie Ying Kai Qiang Si E Cha Qiao Zhong Duan Sou Huang Huan Ai Du Mei Lou Zi Fei Mei Mo Zhen Bo Ge Nie Tang Juan Nie Na Liu Gao Bang Yi Jia Bin Rong Biao Tang Man Luo Beng Yong Jing Di Zu Xuan Liu Chan Jue Liao Pu Lu Dui Lan Pu Cuan Qiang Deng Huo Lei Huan Zhuo Lian Yi Cha Biao La Chan Xiang Zhang Chang Jiu Ao Die Qu Liao Mi Zhang Men Ma Shuan Shan Huo Men Yan Bi Han Bi Shan Kai Kang Beng Hong Run San Xian Xian Jian Min Xia Shui Dou Zha Nao Zhan Peng Xia Ling Bian Bi Run Ai Guan Ge Ge Fa Chu Hong Gui Min Se Kun Lang Lu Ting Sha Ju Yue Yue Chan Qu Lin Chang Shai Kun Yan Wen Yan E Hun Yu Wen Hong Bao Hong Qu Yao Wen Ban An Wei Yin Kuo Que Lan Du Quan Feng Tian Nie Ta Kai He Que Chuang Guan Dou Qi Kui Tang Guan Piao Kan Xi Hui Chan Pi Dang Huan Ta Wen Ta Men Shuan Shan Yan Han Bi Wen Chuang Run Wei Xian Hong Jian Min Kang Men Zha Nao Gui Wen Ta Min Lu Kai'; + case 150: + return 'Fa Ge He Kun Jiu Yue Lang Du Yu Yan Chang Xi Wen Hun Yan E Chan Lan Qu Hui Kuo Que He Tian Da Que Han Huan Fu Fu Le Dui Xin Qian Wu Gai Zhi Yin Yang Dou E Sheng Ban Pei Keng Yun Ruan Zhi Pi Jing Fang Yang Yin Zhen Jie Cheng E Qu Di Zu Zuo Dian Ling A Tuo Tuo Bei Bing Fu Ji Lu Long Chen Xing Duo Lou Mo Jiang Shu Duo Xian Er Gui Yu Gai Shan Jun Qiao Xing Chun Fu Bi Xia Shan Sheng Zhi Pu Dou Yuan Zhen Chu Xian Dao Nie Yun Xian Pei Fei Zou Yi Dui Lun Yin Ju Chui Chen Pi Ling Tao Xian Lu Sheng Xian Yin Zhu Yang Reng Xia Chong Yan Yin Shu Di Yu Long Wei Wei Nie Dui Sui An Huang Jie Sui Yin Gai Yan Hui Ge Yun Wu Kui Ai Xi Tang Ji Zhang Dao Ao Xi Yin Sa Rao Lin Tui Deng Jiao Sui Sui Ao Xian Fen Ni Er Ji Dao Xi Yin Zhi Hui Long Xi Li Li Li Zhui Hu Zhi Sun Juan Nan Yi Que Yan Qin Qian Xiong Ya Ji Gu Huan Zhi Gou Juan Ci Yong Ju Chu Hu Za Luo Yu Chou Diao Sui Han Wo Shuang Guan Chu Za Yong Ji Xi Chou Liu Li Nan Xue Za Ji Ji Yu Yu Xue Na Fou Se Mu Wen Fen Pang Yun Li Chi Yang Ling Lei An Bao Wu Dian Dang Hu Wu Diao'; + case 151: + return 'Xu Ji Mu Chen Xiao Zha Ting Zhen Pei Mei Ling Qi Zhou Huo Sha Fei Hong Zhan Yin Ni Zhu Tun Lin Ling Dong Ying Wu Ling Shuang Ling Xia Hong Yin Mai Mai Yun Liu Meng Bin Wu Wei Kuo Yin Xi Yi Ai Dan Teng Xian Yu Lu Long Dai Ji Pang Yang Ba Pi Wei Feng Xi Ji Mai Meng Meng Lei Li Huo Ai Fei Dai Long Ling Ai Feng Li Bao He He He Bing Qing Qing Jing Tian Zhen Jing Cheng Qing Jing Jing Dian Jing Tian Fei Fei Kao Mi Mian Mian Bao Ye Tian Hui Ye Ge Ding Cha Qian Ren Di Du Wu Ren Qin Jin Xue Niu Ba Yin Sa Na Mo Zu Da Ban Yi Yao Tao Bei Jie Hong Pao Yang Bing Yin Ge Tao Jie Xie An An Hen Gong Qia Da Qiao Ting Man Ying Sui Tiao Qiao Xuan Kong Beng Ta Shang Bing Kuo Ju La Xie Rou Bang Eng Qiu Qiu He Qiao Mu Ju Jian Bian Di Jian Wen Tao Gou Ta Bei Xie Pan Ge Bi Kuo Tang Lou Gui Qiao Xue Ji Jian Jiang Chan Da Hu Xian Qian Du Wa Jian Lan Wei Ren Fu Mei Quan Ge Wei Qiao Han Chang Kuo Rou Yun She Wei Ge Bai Tao Gou Yun Gao Bi Wei Sui Du Wa Du Wei Ren Fu Han Wei Yun Tao Jiu Jiu Xian Xie Xian Ji Yin Za Yun Shao Le Peng Huang Ying Yun Peng An Yin Xiang'; + case 152: + return 'Hu Ye Ding Qing Kui Xiang Shun Han Xu Yi Xu E Song Kui Qi Hang Yu Wan Ban Dun Di Dan Pan Po Ling Che Jing Lei He Qiao E E Wei Xie Kuo Shen Yi Yi Hai Dui Yu Ping Lei Fu Jia Tou Hui Kui Jia Luo Ting Cheng Ying Yun Hu Han Jing Tui Tui Pin Lai Tui Zi Zi Chui Ding Lai Tan Han Qian Ke Cui Xuan Qin Yi Sai Ti E E Yan Wen Kan Yong Zhuan Yan Xian Xin Yi Yuan Sang Dian Dian Jiang Kui Lei Lao Piao Wai Man Cu Yao Hao Qiao Gu Xun Yan Hui Chan Ru Meng Bin Xian Pin Lu Lan Nie Quan Ye Ding Qing Han Xiang Shun Xu Xu Wan Gu Dun Qi Ban Song Hang Yu Lu Ling Po Jing Jie Jia Ting He Ying Jiong Ke Yi Pin Hui Tui Han Ying Ying Ke Ti Yong E Zhuan Yan E Nie Man Dian Sang Hao Lei Chan Ru Pin Quan Feng Biao Gua Fu Xia Zhan Biao Sa Ba Tai Lie Gua Xuan Shao Ju Biao Si Wei Yang Yao Sou Kai Sou Fan Liu Xi Liu Piao Piao Liu Biao Biao Biao Liao Biao Se Feng Xiu Feng Yang Zhan Biao Sa Ju Si Sou Yao Liu Piao Biao Biao Fei Fan Fei Fei Shi Shi Can Ji Ding Si Tuo Zhan Sun Xiang Tun Ren Yu Juan Chi Yin Fan Fan Sun Yin Tou Yi Zuo Bi Jie Tao Bao Ci Tie Si Bao Shi Duo'; + case 153: + return 'Hai Ren Tian Jiao Jia Bing Yao Tong Ci Xiang Yang Juan Er Yan Le Xi Can Bo Nei E Bu Jun Dou Su Yu Shi Yao Hun Guo Shi Jian Zhui Bing Xian Bu Ye Tan Fei Zhang Wei Guan E Nuan Yun Hu Huang Tie Hui Jian Hou Ai Tang Fen Wei Gu Cha Song Tang Bo Gao Xi Kui Liu Sou Tao Ye Wen Mo Tang Man Bi Yu Xiu Jin San Kui Zhuan Shan Chi Dan Yi Ji Rao Cheng Yong Tao Wei Xiang Zhan Fen Hai Meng Yan Mo Chan Xiang Luo Zan Nang Shi Ding Ji Tuo Tang Tun Xi Ren Yu Chi Fan Yin Jian Shi Bao Si Duo Yi Er Rao Xiang He Le Jiao Xi Bing Bo Dou E Yu Nei Jun Guo Hun Xian Guan Cha Kui Gu Sou Chan Ye Mo Bo Liu Xiu Jin Man San Zhuan Nang Shou Kui Guo Xiang Fen Bo Ni Bi Bo Tu Han Fei Jian An Ai Fu Xian Yun Xin Fen Pin Xin Ma Yu Feng Han Di Tuo Zhe Chi Xun Zhu Zhi Pei Xin Ri Sa Yun Wen Zhi Dan Lu You Bo Bao Jue Tuo Yi Qu Wen Qu Jiong Po Zhao Yuan Pei Zhou Ju Zhu Nu Ju Pi Zang Jia Ling Zhen Tai Fu Yang Shi Bi Tuo Tuo Si Liu Ma Pian Tao Zhi Rong Teng Dong Xun Quan Shen Jiong Er Hai Bo Zhu Yin Luo Zhou Dan Hai Liu Ju Song Qin Mang Lang Han Tu Xuan Tui Jun'; + case 154: + return 'E Cheng Xing Ai Lu Zhui Zhou She Pian Kun Tao Lai Zong Ke Qi Qi Yan Fei Sao Yan Ge Yao Wu Pian Cong Pian Qian Fei Huang Qian Huo Yu Ti Quan Xia Zong Kui Rou Si Gua Tuo Gui Sou Qian Cheng Zhi Liu Peng Teng Xi Cao Du Yan Yuan Zou Sao Shan Qi Zhi Shuang Lu Xi Luo Zhang Mo Ao Can Biao Cong Qu Bi Zhi Yu Xu Hua Bo Su Xiao Lin Zhan Dun Liu Tuo Ceng Dian Jiao Tie Yan Luo Zhan Jing Yi Ye Tuo Pin Zhou Yan Long Lu Teng Xiang Ji Shuang Ju Xi Huan Li Biao Ma Yu Tuo Xun Chi Qu Ri Bo Lu Zang Shi Si Fu Ju Zou Zhu Tuo Nu Jia Yi Dai Xiao Ma Yin Jiao Hua Luo Hai Pian Biao Li Cheng Yan Xing Qin Jun Qi Qi Ke Zhui Zong Su Can Pian Zhi Kui Sao Wu Ao Liu Qian Shan Biao Luo Cong Chan Zhou Ji Shuang Xiang Gu Wei Wei Wei Yu Gan Yi Ang Tou Jie Bao Bei Ci Ti Di Ku Hai Qiao Hou Kua Ge Tui Geng Pian Bi Ke Qia Yu Sui Lou Bo Xiao Bang Bo Ci Kuan Bin Mo Liao Lou Xiao Du Zang Sui Ti Bin Kuan Lu Gao Gao Qiao Kao Qiao Lao Sao Biao Kun Kun Di Fang Xiu Ran Mao Dan Kun Bin Fa Tiao Pi Zi Fa Ran Ti Bao Bi Mao Fu Er Rong Qu Gong Xiu Kuo Ji Peng Zhua Shao Suo'; + case 155: + return 'Ti Li Bin Zong Di Peng Song Zheng Quan Zong Shun Jian Tuo Hu La Jiu Qi Lian Zhen Bin Peng Ma San Man Man Seng Xu Lie Qian Qian Nang Huan Kuo Ning Bin Lie Rang Dou Dou Nao Hong Xi Dou Han Dou Dou Jiu Chang Yu Yu Ge Yan Fu Qin Gui Zong Liu Gui Shang Yu Gui Mei Ji Qi Ga Kui Hun Ba Po Mei Xu Yan Xiao Liang Yu Tui Qi Wang Liang Wei Gan Chi Piao Bi Mo Ji Xu Chou Yan Zhan Yu Dao Ren Jie Ba Hong Tuo Diao Ji Xu E E Sha Hang Tun Mo Jie Shen Ban Yuan Pi Lu Wen Hu Lu Za Fang Fen Na You Pian Mo He Xia Qu Han Pi Ling Tuo Bo Qiu Ping Fu Bi Ci Wei Ju Diao Ba You Gun Pi Nian Xing Tai Bao Fu Zha Ju Gu Shi Dong Dai Ta Jie Shu Hou Xiang Er An Wei Zhao Zhu Yin Lie Luo Tong Ti Yi Bing Wei Jiao Ku Gui Xian Ge Hui Lao Fu Kao Xiu Duo Jun Ti Mian Shao Zha Suo Qin Yu Nei Zhe Gun Geng Su Wu Qiu Shan Pu Huan Tiao Li Sha Sha Kao Meng Cheng Li Zou Xi Yong Shen Zi Qi Zheng Xiang Nei Chun Ji Diao Qie Gu Zhou Dong Lai Fei Ni Yi Kun Lu Jiu Chang Jing Lun Ling Zou Li Meng Zong Zhi Nian Hu Yu Di Shi Shen Huan Ti Hou Xing Zhu La Zong Zei Bian Bian'; + case 156: + return 'Huan Quan Zei Wei Wei Yu Chun Rou Die Huang Lian Yan Qiu Qiu Jian Bi E Yang Fu Sai Gan Xia Tuo Hu Shi Ruo Xuan Wen Qian Hao Wu Fang Sao Liu Ma Shi Shi Guan Zi Teng Ta Yao E Yong Qian Qi Wen Ruo Shen Lian Ao Le Hui Min Ji Tiao Qu Jian Shen Man Xi Qiu Biao Ji Ji Zhu Jiang Xiu Zhuan Yong Zhang Kang Xue Bie Yu Qu Xiang Bo Jiao Xun Su Huang Zun Shan Shan Fan Gui Lin Xun Miao Xi Zeng Xiang Fen Guan Hou Kuai Zei Sao Zhan Gan Gui Ying Li Chang Lei Shu Ai Ru Ji Xu Hu Shu Li Lie Li Mie Zhen Xiang E Lu Guan Li Xian Yu Dao Ji You Tun Lu Fang Ba He Ba Ping Nian Lu You Zha Fu Ba Bao Hou Pi Tai Gui Jie Kao Wei Er Tong Zei Hou Kuai Ji Jiao Xian Zha Xiang Xun Geng Li Lian Jian Li Shi Tiao Gun Sha Huan Jun Ji Yong Qing Ling Qi Zou Fei Kun Chang Gu Ni Nian Diao Jing Shen Shi Zi Fen Die Bi Chang Ti Wen Wei Sai E Qiu Fu Huang Quan Jiang Bian Sao Ao Qi Ta Guan Yao Pang Jian Le Biao Xue Bie Man Min Yong Wei Xi Gui Shan Lin Zun Hu Gan Li Zhan Guan Niao Yi Fu Li Jiu Bu Yan Fu Diao Ji Feng Ru Gan Shi Feng Ming Bao Yuan Zhi Hu Qin Fu Ban Wen Jian Shi Yu'; + case 157: + return 'Fou Yao Jue Jue Pi Huan Zhen Bao Yan Ya Zheng Fang Feng Wen Ou Dai Ge Ru Ling Mie Fu Tuo Min Li Bian Zhi Ge Yuan Ci Qu Xiao Chi Dan Ju Yao Gu Zhong Yu Yang Yu Ya Tie Yu Tian Ying Dui Wu Er Gua Ai Zhi Yan Heng Xiao Jia Lie Zhu Yang Ti Hong Luo Ru Mou Ge Ren Jiao Xiu Zhou Chi Luo Heng Nian E Luan Jia Ji Tu Huan Tuo Bu Wu Juan Yu Bo Jun Jun Bi Xi Jun Ju Tu Jing Ti E E Kuang Hu Wu Shen Lai Jiao Pan Lu Pi Shu Fu An Zhuo Peng Qin Qian Bei Diao Lu Que Jian Ju Tu Ya Yuan Qi Li Ye Zhui Kong Duo Kun Sheng Qi Jing Yi Yi Jing Zi Lai Dong Qi Chun Geng Ju Jue Yi Zun Ji Shu Ying Chi Miao Rou An Qiu Ti Hu Ti E Jie Mao Fu Chun Tu Yan He Yuan Pian Kun Mei Hu Ying Chuan Wu Ju Dong Cang Fang He Ying Yuan Xian Weng Shi He Chu Tang Xia Ruo Liu Ji Gu Jian Sun Han Ci Ci Yi Yao Yan Ji Li Tian Kou Ti Ti Yi Tu Ma Xiao Gao Tian Chen Ji Tuan Zhe Ao Yao Yi Ou Chi Zhi Liu Yong Lu Bi Shuang Zhuo Yu Wu Jue Yin Ti Si Jiao Yi Hua Bi Ying Su Huang Fan Jiao Liao Yan Gao Jiu Xian Xian Tu Mai Zun Yu Ying Lu Tuan Xian Xue Yi Pi'; + case 158: + return 'Shu Luo Xi Yi Ji Ze Yu Zhan Ye Yang Pi Ning Hu Mi Ying Meng Di Yue Yu Lei Bu Lu He Long Shuang Yue Ying Guan Qu Li Luan Niao Jiu Ji Yuan Ming Shi Ou Ya Cang Bao Zhen Gu Dong Lu Ya Xiao Yang Ling Chi Qu Yuan Xue Tuo Si Zhi Er Gua Xiu Heng Zhou Ge Luan Hong Wu Bo Li Juan Gu E Yu Xian Ti Wu Que Miao An Kun Bei Peng Qian Chun Geng Yuan Su Hu He E Gu Qiu Ci Mei Wu Yi Yao Weng Liu Ji Yi Jian He Yi Ying Zhe Liu Liao Jiao Jiu Yu Lu Huan Zhan Ying Hu Meng Guan Shuang Lu Jin Ling Jian Xian Cuo Jian Jian Yan Cuo Lu You Cu Ji Pao Cu Pao Zhu Jun Zhu Jian Mi Mi Yu Liu Chen Jun Lin Ni Qi Lu Jiu Jun Jing Li Xiang Xian Jia Mi Li She Zhang Lin Jing Qi Ling Yan Cu Mai Mai He Chao Fu Mian Mian Fu Pao Qu Qu Mou Fu Xian Lai Qu Mian Chi Feng Fu Qu Mian Ma Me Mo Hui Mo Zou Nun Fen Huang Huang Jin Guang Tian Tou Hong Hua Kuang Hong Shu Li Nian Chi Hei Hei Yi Qian Dan Xi Tun Mo Mo Qian Dai Chu You Dian Yi Xia Yan Qu Mei Yan Qing Yue Li Dang Du Can Yan Yan Yan Dan An Zhen Dai Can Yi Mei Zhan Yan Du Lu Zhi Fen Fu Fu Mian Mian Yuan'; + case 159: + return 'Cu Qu Chao Wa Zhu Zhi Meng Ao Bie Tuo Bi Yuan Chao Tuo Ding Mi Nai Ding Zi Gu Gu Dong Fen Tao Yuan Pi Chang Gao Qi Yuan Tang Teng Shu Shu Fen Fei Wen Ba Diao Tuo Zhong Qu Sheng Shi You Shi Ting Wu Ju Jing Hun Ju Yan Tu Si Xi Xian Yan Lei Bi Yao Qiu Han Wu Wu Hou Xie E Zha Xiu Weng Zha Nong Nang Qi Zhai Ji Zi Ji Ji Qi Ji Chi Chen Chen He Ya Yin Xie Bao Ze Xie Chai Chi Yan Ju Tiao Ling Ling Chu Quan Xie Ken Nie Jiu Yao Chuo Yun Yu Chu Yi Ni Ze Zou Qu Yun Yan Ou E Wo Yi Ci Zou Dian Chu Jin Ya Chi Chen He Yin Ju Ling Bao Tiao Zi Ken Yu Chuo Qu Wo Long Pang Gong Pang Yan Long Long Gong Kan Da Ling Da Long Gong Kan Gui Qiu Bie Gui Yue Chui He Jue Xie Yu Soeng Syu Zeoi Gan Jan Gon Mong Ji Jik Mou Zi Fu Sau Lyun Hung Shan Loeng Zang Ce Wu Zi Hei Loeng Gang Ta Mai Zau Ge Dan Ao Tian Ni Hon Baa Lou To Dung Zi Loeng Jam To Mat Mak Bou Gaa'; + case 160: + return 'it ix i ip iet iex ie iep at ax a ap uox uo uop ot ox o op ex e w bit bix bi bip biet biex bie biep bat bax ba bap buox buo buop bot box bo bop bex be bep but bux bu bup burx bur byt byx by byp byrx byr pit pix pi pip piex pie piep pat pax pa pap puox puo puop pot pox po pop put pux pu pup purx pur pyt pyx py pyp pyrx pyr bbit bbix bbi bbip bbiet bbiex bbie bbiep bbat bbax bba bbap bbuox bbuo bbuop bbot bbox bbo bbop bbex bbe bbep bbut bbux bbu bbup bburx bbur bbyt bbyx bby bbyp nbit nbix nbi nbip nbiex nbie nbiep nbat nbax nba nbap nbot nbox nbo nbop nbut nbux nbu nbup nburx nbur nbyt nbyx nby nbyp nbyrx nbyr hmit hmix hmi hmip hmiex hmie hmiep hmat hmax hma hmap hmuox hmuo hmuop hmot hmox hmo hmop hmut hmux hmu hmup hmurx hmur hmyx hmy hmyp hmyrx hmyr mit mix mi mip miex mie miep mat max ma map muot muox muo muop mot mox mo mop mex me mut mux mu mup murx mur myt myx my myp fit fix fi fip fat fax fa fap fox fo fop fut fux fu fup furx fur fyt fyx fy fyp vit vix vi vip viet viex vie viep vat vax va vap vot vox vo vop vex vep vut vux vu vup vurx vur vyt vyx vy vyp vyrx vyr'; + case 161: + return 'dit dix di dip diex die diep dat dax da dap duox duo dot dox do dop dex de dep dut dux du dup durx dur tit tix ti tip tiex tie tiep tat tax ta tap tuot tuox tuo tuop tot tox to top tex te tep tut tux tu tup turx tur ddit ddix ddi ddip ddiex ddie ddiep ddat ddax dda ddap dduox dduo dduop ddot ddox ddo ddop ddex dde ddep ddut ddux ddu ddup ddurx ddur ndit ndix ndi ndip ndiex ndie ndat ndax nda ndap ndot ndox ndo ndop ndex nde ndep ndut ndux ndu ndup ndurx ndur hnit hnix hni hnip hniet hniex hnie hniep hnat hnax hna hnap hnuox hnuo hnot hnox hnop hnex hne hnep hnut nit nix ni nip niex nie niep nax na nap nuox nuo nuop not nox no nop nex ne nep nut nux nu nup nurx nur hlit hlix hli hlip hliex hlie hliep hlat hlax hla hlap hluox hluo hluop hlox hlo hlop hlex hle hlep hlut hlux hlu hlup hlurx hlur hlyt hlyx hly hlyp hlyrx hlyr lit lix li lip liet liex lie liep lat lax la lap luot luox luo luop lot lox lo lop lex le lep lut lux lu lup lurx lur lyt lyx ly lyp lyrx lyr git gix gi gip giet giex gie giep gat gax ga gap guot guox guo guop got gox go gop get gex ge gep gut gux gu gup gurx gur kit kix ki kip kiex kie kiep kat'; + case 162: + return 'kax ka kap kuox kuo kuop kot kox ko kop ket kex ke kep kut kux ku kup kurx kur ggit ggix ggi ggiex ggie ggiep ggat ggax gga ggap gguot gguox gguo gguop ggot ggox ggo ggop gget ggex gge ggep ggut ggux ggu ggup ggurx ggur mgiex mgie mgat mgax mga mgap mguox mguo mguop mgot mgox mgo mgop mgex mge mgep mgut mgux mgu mgup mgurx mgur hxit hxix hxi hxip hxiet hxiex hxie hxiep hxat hxax hxa hxap hxuot hxuox hxuo hxuop hxot hxox hxo hxop hxex hxe hxep ngiex ngie ngiep ngat ngax nga ngap nguot nguox nguo ngot ngox ngo ngop ngex nge ngep hit hiex hie hat hax ha hap huot huox huo huop hot hox ho hop hex he hep wat wax wa wap wuox wuo wuop wox wo wop wex we wep zit zix zi zip ziex zie ziep zat zax za zap zuox zuo zuop zot zox zo zop zex ze zep zut zux zu zup zurx zur zyt zyx zy zyp zyrx zyr cit cix ci cip ciet ciex cie ciep cat cax ca cap cuox cuo cuop cot cox co cop cex ce cep cut cux cu cup curx cur cyt cyx cy cyp cyrx cyr zzit zzix zzi zzip zziet zziex zzie zziep zzat zzax zza zzap zzox zzo zzop zzex zze zzep zzux zzu zzup zzurx zzur zzyt zzyx zzy zzyp zzyrx zzyr nzit nzix nzi nzip nziex nzie nziep nzat nzax nza nzap nzuox nzuo nzox nzop nzex nze nzux nzu'; + case 163: + return 'nzup nzurx nzur nzyt nzyx nzy nzyp nzyrx nzyr sit six si sip siex sie siep sat sax sa sap suox suo suop sot sox so sop sex se sep sut sux su sup surx sur syt syx sy syp syrx syr ssit ssix ssi ssip ssiex ssie ssiep ssat ssax ssa ssap ssot ssox sso ssop ssex sse ssep ssut ssux ssu ssup ssyt ssyx ssy ssyp ssyrx ssyr zhat zhax zha zhap zhuox zhuo zhuop zhot zhox zho zhop zhet zhex zhe zhep zhut zhux zhu zhup zhurx zhur zhyt zhyx zhy zhyp zhyrx zhyr chat chax cha chap chuot chuox chuo chuop chot chox cho chop chet chex che chep chux chu chup churx chur chyt chyx chy chyp chyrx chyr rrax rra rruox rruo rrot rrox rro rrop rret rrex rre rrep rrut rrux rru rrup rrurx rrur rryt rryx rry rryp rryrx rryr nrat nrax nra nrap nrox nro nrop nret nrex nre nrep nrut nrux nru nrup nrurx nrur nryt nryx nry nryp nryrx nryr shat shax sha shap shuox shuo shuop shot shox sho shop shet shex she shep shut shux shu shup shurx shur shyt shyx shy shyp shyrx shyr rat rax ra rap ruox ruo ruop rot rox ro rop rex re rep rut rux ru rup rurx rur ryt ryx ry ryp ryrx ryr jit jix ji jip jiet jiex jie jiep juot juox juo juop jot jox jo jop jut jux ju jup jurx jur jyt jyx jy jyp jyrx jyr qit qix qi qip'; + case 164: + return "qiet qiex qie qiep quot quox quo quop qot qox qo qop qut qux qu qup qurx qur qyt qyx qy qyp qyrx qyr jjit jjix jji jjip jjiet jjiex jjie jjiep jjuox jjuo jjuop jjot jjox jjo jjop jjut jjux jju jjup jjurx jjur jjyt jjyx jjy jjyp njit njix nji njip njiet njiex njie njiep njuox njuo njot njox njo njop njux nju njup njurx njur njyt njyx njy njyp njyrx njyr nyit nyix nyi nyip nyiet nyiex nyie nyiep nyuox nyuo nyuop nyot nyox nyo nyop nyut nyux nyu nyup xit xix xi xip xiet xiex xie xiep xuox xuo xot xox xo xop xyt xyx xy xyp xyrx xyr yit yix yi yip yiet yiex yie yiep yuot yuox yuo yuop yot yox yo yop yut yux yu yup yurx yur yyt yyx yy yyp yyrx yyr QOT LI KIT NYIP CYP SSI GGOP GEP MI HXIT LYR BBUT MOP YO PUT HXUO TAT GA ZUP CYT DDUR BUR GGUO NYOP TU OP JJUT ZOT PYT HMO YIT VUR SHY VEP ZA JO NZUP JJY GOT JJIE WO DU SHUR LIE CY CUOP CIP HXOP SHAT ZUR SHOP CHE ZZIET NBIE KE bb b p dd d t gg g k rr zh ch zz z c m n l s r ss ng h h h' f w sh y e a ai ei ei i o u u e e l q x r t , ."; + case 165: + return 'e e he we we pe be be mbe kpe mgbe gbe fe ve te the de dhe le re de nde se she ze zhe che je nje ye ke ngge ge me ne nye i i hi hi wi wi pi bi bi mbi kpi mgbi gbi fi vi ti thi di dhi li ri di ndi si shi zi zhi chi ji nji yi ki nggi gi mi ni nyi a a nga ha ha wa wa pa ba ba mba kpa kpa mgba gba fa va ta tha da dha la ra da nda sa sha za zha cha ja nja ya ka ka ngga ga ma na nya o o ho wo wo po bo bo mbo kpo mgbo gbo fo vo to tho do dho lo ro do ndo so sho zo zho cho jo njo yo ko nggo go mo no nyo u u hu hu wu wu pu bu bu mbu kpu mgbu gbu fu vu tu thu du dhu lu ru du ndu su shu zu zhu chu ju nju yu ku nggu gu mu nu nyu o o ngo ho ho wo wo po bo bo mbo kpo mgbo gbo gbo fo vo to tho do dho lo ro do ndo so sho zo zho cho jo njo yo ko nggo go mo no nyo e e nge he he we we pe be be mbe kpe kpe mgbe gbe gbe fe ve te the de dhe le re de nde se she ze zhe che'; + case 166: + return "je nje ye ke ngge ngge ge ge me ne nye ng h , . ? fa ka so Feng Keng Ting Nii Bang Faa Taa Dang Dong Kung Tong Doo Jong 0 1 2 3 4 5 6 7 8 9 ma do Z z Dz dz Dz dz I i Dj dj U u O o ' ' Y y Ie ie Oi oi Ia ia E e O o Ie ie In in Ts ts Dg dg Lg lg Mg mg O o Oo oo Oo oo O . 10000000 100000000 1000000000 * ie i i u ' y ' o ' ' ' ' Dw dw Dzw dzw Zhw zhw Cch cch Dz dz T t Tw tw Tsw tsw Ts ts Tch tch Hw hw Shw shw Oo oo O o ' ' f ie a ka u ku e re te o nyi i la pa rii rie lee mee taa ndaa njem m suu mu shii si shux sux kye ket nue nu njue yo' shu yu' ya nsha kux pux nje nte pu wu pe fe ru lu mi ni rux re ken ngkwen ngga nga sho pue fu fom wa na li pi lo' ko mben ren men ma ti ki 1 2 3 4 5 6 7 8 9 0 ' ` * . : , ; ?"; + case 167: + return "1 2 3 4 5 6 7 8 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1 1 2 3 4 ^ v ! ^ ^ - _ ' ' ` ` H h Tz tz 3 3 4 4 4, 4, f s Aa aa Ao ao Au au Av av Av av Ay ay C. c. K. k. K. k. K. k. L l L. l. O. o. O o Oo oo P. p. P. p. P. p. Q. q. Q. q. R r R. r. V. v. Vy vy Z z Th. th. Th. th. V v & & S. s. ' ' ' d. l. m. n. r. r. t. s. D d F f G Ng ng Ll ll R r S s T t ^ : = ' ' Y l - N n C c c h B b F f Ae ae Oe oe Ue ue G g K k N n R r S s H E G L I q K T J X B b O o U u A a I i U u O o W w C S Z D d S s G g thth ww S s S s C F Q H h I H oe w F P M I M'"; + case 168: + return "a i i u e o k kh g gh ng c ch j jh t th d dh t th d dh n p ph b bh m r l r s h a i u e o 1 2 3 4 1 2 3 1 2 3 / - Rs ' k kh g ng c ch j ny t th d n p ph b m ts tsh dz w zh z - y r l sh s h ' i u e o q x f gg ee w y tt tth dd nn y'' sh' h' f'' r r ^ @ @@ / // m h a a i i u u r r l l e e ai o o au k kh g gh n c ch j jh n t th d dh n t th d dh n p ph b bh m y r l v s s s h l h a i i u u r r l l e e ai o o au m , . 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 a u k n p r v ' m m mm m2 m3 m' - - ^ ~ * Om a a"; + case 169: + return "0 1 2 3 4 5 6 7 8 9 k hk g ng s hs z ny t ht n p hp m d b r y l w th h v j a oe i o ue ae u e aw ' , k g ng t d n p b m c j ny s r l y w h mb ngg nd nyj ' i u e ai o au eu ea ng n r h * dm db ds dj lg lkk ld ltt lm lb lpp lv ls lj lk mg md ms bst bk bh ssb l h jjh tt ph hs qq m ng r h a i i i u re le lo e ai o k q kh g gh ng c ch j jny jh ny t th d dh n t th d dh n p ph b bh m y r r l w s s s h ' a o i i u u e ai e re y r < > @ @@ @@@ * : , . | || { } - 0 1 2 3 4 5 6 7 8 9 ^ ~ gh ch jh n bh - n f g gh j jh d dh n 0 1 2 3 4 5 6 7 8 9 l d dh b bh"; + case 170: + return "a i u e ai o k kh g gh ng ng c ch j jh ny ny nj t th d dh n n nd p pp ph b bh m m mb y r l w x s h a i i ei u e o ai au u y r l w k g ng ng c t n p y r l x m h 0 1 2 3 4 5 6 7 8 9 * , ; . g c ch j jh n t th d dh dh n s h l f - x z r oay 'n hm ! 1 2 r ch sh k k kh kh x x g g ng ng ch ch chh chh s s ny ny d d t t th th n n b b p p ph ph f f m m y y r r l l v v h h a aa i ue u ae o oa ia uea ua aue ai an am Kon Nueng - < > e o ch n t th d dh n s s i u ai au au , ? * - - h"; + case 171: + return " thu thi tha thie th tho dhu dhi dha dhie dh dho dzu dzi dza dzie dz dzo ch'e ch'u ch'i ch'a ch'ie ch' ch'o be bu bi ba bie b bo a ae e e e f g l l l m n ng o o o oe oe oe oo oo r r r rr r rr r r sh u u ui ui u x x x x x x x y * h l l u ia ie oe uo a o dz ts r w < > a e i o u v ga ka ge gi go gu gv ha he hi ho hu hv la le li lo lu lv ma me mi mo mu na hna nah ne ni no nu nv qua que qui quo quu quv sa s se si so su sv da ta de te di ti do du dv dla tla tle tli tlo tlu tlv tsa tse tsi tso tsu tsv wa we wi wo wu wv ya k s l m p n c t kh n th w y h u i ph a g jh r b j d gh dh bh k l m p n t n i o i a e ou u ei m . 0 1 2 3 4 5 6 7 8 9"; + case 172: + return 'Ga Gag Gakk Gags Gan Ganj Ganh Gad Gal Galg Galm Galb Gals Galt Galp Galh Gam Gab Gabs Gas Gass Gang Gaj Gach Gak Gat Gap Gah Gae Gaeg Gaekk Gaegs Gaen Gaenj Gaenh Gaed Gael Gaelg Gaelm Gaelb Gaels Gaelt Gaelp Gaelh Gaem Gaeb Gaebs Gaes Gaess Gaeng Gaej Gaech Gaek Gaet Gaep Gaeh Gya Gyag Gyakk Gyags Gyan Gyanj Gyanh Gyad Gyal Gyalg Gyalm Gyalb Gyals Gyalt Gyalp Gyalh Gyam Gyab Gyabs Gyas Gyass Gyang Gyaj Gyach Gyak Gyat Gyap Gyah Gyae Gyaeg Gyaekk Gyaegs Gyaen Gyaenj Gyaenh Gyaed Gyael Gyaelg Gyaelm Gyaelb Gyaels Gyaelt Gyaelp Gyaelh Gyaem Gyaeb Gyaebs Gyaes Gyaess Gyaeng Gyaej Gyaech Gyaek Gyaet Gyaep Gyaeh Geo Geog Geokk Geogs Geon Geonj Geonh Geod Geol Geolg Geolm Geolb Geols Geolt Geolp Geolh Geom Geob Geobs Geos Geoss Geong Geoj Geoch Geok Geot Geop Geoh Ge Geg Gekk Gegs Gen Genj Genh Ged Gel Gelg Gelm Gelb Gels Gelt Gelp Gelh Gem Geb Gebs Ges Gess Geng Gej Gech Gek Get Gep Geh Gyeo Gyeog Gyeokk Gyeogs Gyeon Gyeonj Gyeonh Gyeod Gyeol Gyeolg Gyeolm Gyeolb Gyeols Gyeolt Gyeolp Gyeolh Gyeom Gyeob Gyeobs Gyeos Gyeoss Gyeong Gyeoj Gyeoch Gyeok Gyeot Gyeop Gyeoh Gye Gyeg Gyekk Gyegs Gyen Gyenj Gyenh Gyed Gyel Gyelg Gyelm Gyelb Gyels Gyelt Gyelp Gyelh Gyem Gyeb Gyebs Gyes Gyess Gyeng Gyej Gyech Gyek Gyet Gyep Gyeh Go Gog Gokk Gogs Gon Gonj Gonh God Gol Golg Golm Golb Gols Golt Golp Golh Gom Gob Gobs Gos Goss Gong Goj Goch Gok Got Gop Goh Gwa Gwag Gwakk Gwags'; + case 173: + return 'Gwan Gwanj Gwanh Gwad Gwal Gwalg Gwalm Gwalb Gwals Gwalt Gwalp Gwalh Gwam Gwab Gwabs Gwas Gwass Gwang Gwaj Gwach Gwak Gwat Gwap Gwah Gwae Gwaeg Gwaekk Gwaegs Gwaen Gwaenj Gwaenh Gwaed Gwael Gwaelg Gwaelm Gwaelb Gwaels Gwaelt Gwaelp Gwaelh Gwaem Gwaeb Gwaebs Gwaes Gwaess Gwaeng Gwaej Gwaech Gwaek Gwaet Gwaep Gwaeh Goe Goeg Goekk Goegs Goen Goenj Goenh Goed Goel Goelg Goelm Goelb Goels Goelt Goelp Goelh Goem Goeb Goebs Goes Goess Goeng Goej Goech Goek Goet Goep Goeh Gyo Gyog Gyokk Gyogs Gyon Gyonj Gyonh Gyod Gyol Gyolg Gyolm Gyolb Gyols Gyolt Gyolp Gyolh Gyom Gyob Gyobs Gyos Gyoss Gyong Gyoj Gyoch Gyok Gyot Gyop Gyoh Gu Gug Gukk Gugs Gun Gunj Gunh Gud Gul Gulg Gulm Gulb Guls Gult Gulp Gulh Gum Gub Gubs Gus Guss Gung Guj Guch Guk Gut Gup Guh Gwo Gwog Gwokk Gwogs Gwon Gwonj Gwonh Gwod Gwol Gwolg Gwolm Gwolb Gwols Gwolt Gwolp Gwolh Gwom Gwob Gwobs Gwos Gwoss Gwong Gwoj Gwoch Gwok Gwot Gwop Gwoh Gwe Gweg Gwekk Gwegs Gwen Gwenj Gwenh Gwed Gwel Gwelg Gwelm Gwelb Gwels Gwelt Gwelp Gwelh Gwem Gweb Gwebs Gwes Gwess Gweng Gwej Gwech Gwek Gwet Gwep Gweh Gwi Gwig Gwikk Gwigs Gwin Gwinj Gwinh Gwid Gwil Gwilg Gwilm Gwilb Gwils Gwilt Gwilp Gwilh Gwim Gwib Gwibs Gwis Gwiss Gwing Gwij Gwich Gwik Gwit Gwip Gwih Gyu Gyug Gyukk Gyugs Gyun Gyunj Gyunh Gyud Gyul Gyulg Gyulm Gyulb Gyuls Gyult Gyulp Gyulh Gyum Gyub Gyubs Gyus Gyuss Gyung Gyuj Gyuch Gyuk Gyut Gyup Gyuh Geu Geug Geukk Geugs Geun Geunj Geunh Geud'; + case 174: + return 'Geul Geulg Geulm Geulb Geuls Geult Geulp Geulh Geum Geub Geubs Geus Geuss Geung Geuj Geuch Geuk Geut Geup Geuh Gui Guig Guikk Guigs Guin Guinj Guinh Guid Guil Guilg Guilm Guilb Guils Guilt Guilp Guilh Guim Guib Guibs Guis Guiss Guing Guij Guich Guik Guit Guip Guih Gi Gig Gikk Gigs Gin Ginj Ginh Gid Gil Gilg Gilm Gilb Gils Gilt Gilp Gilh Gim Gib Gibs Gis Giss Ging Gij Gich Gik Git Gip Gih Kka Kkag Kkakk Kkags Kkan Kkanj Kkanh Kkad Kkal Kkalg Kkalm Kkalb Kkals Kkalt Kkalp Kkalh Kkam Kkab Kkabs Kkas Kkass Kkang Kkaj Kkach Kkak Kkat Kkap Kkah Kkae Kkaeg Kkaekk Kkaegs Kkaen Kkaenj Kkaenh Kkaed Kkael Kkaelg Kkaelm Kkaelb Kkaels Kkaelt Kkaelp Kkaelh Kkaem Kkaeb Kkaebs Kkaes Kkaess Kkaeng Kkaej Kkaech Kkaek Kkaet Kkaep Kkaeh Kkya Kkyag Kkyakk Kkyags Kkyan Kkyanj Kkyanh Kkyad Kkyal Kkyalg Kkyalm Kkyalb Kkyals Kkyalt Kkyalp Kkyalh Kkyam Kkyab Kkyabs Kkyas Kkyass Kkyang Kkyaj Kkyach Kkyak Kkyat Kkyap Kkyah Kkyae Kkyaeg Kkyaekk Kkyaegs Kkyaen Kkyaenj Kkyaenh Kkyaed Kkyael Kkyaelg Kkyaelm Kkyaelb Kkyaels Kkyaelt Kkyaelp Kkyaelh Kkyaem Kkyaeb Kkyaebs Kkyaes Kkyaess Kkyaeng Kkyaej Kkyaech Kkyaek Kkyaet Kkyaep Kkyaeh Kkeo Kkeog Kkeokk Kkeogs Kkeon Kkeonj Kkeonh Kkeod Kkeol Kkeolg Kkeolm Kkeolb Kkeols Kkeolt Kkeolp Kkeolh Kkeom Kkeob Kkeobs Kkeos Kkeoss Kkeong Kkeoj Kkeoch Kkeok Kkeot Kkeop Kkeoh Kke Kkeg Kkekk Kkegs Kken Kkenj Kkenh Kked Kkel Kkelg Kkelm Kkelb Kkels Kkelt Kkelp Kkelh Kkem Kkeb Kkebs Kkes Kkess Kkeng Kkej Kkech Kkek Kket Kkep Kkeh Kkyeo Kkyeog Kkyeokk Kkyeogs Kkyeon Kkyeonj Kkyeonh Kkyeod Kkyeol Kkyeolg Kkyeolm Kkyeolb'; + case 175: + return 'Kkyeols Kkyeolt Kkyeolp Kkyeolh Kkyeom Kkyeob Kkyeobs Kkyeos Kkyeoss Kkyeong Kkyeoj Kkyeoch Kkyeok Kkyeot Kkyeop Kkyeoh Kkye Kkyeg Kkyekk Kkyegs Kkyen Kkyenj Kkyenh Kkyed Kkyel Kkyelg Kkyelm Kkyelb Kkyels Kkyelt Kkyelp Kkyelh Kkyem Kkyeb Kkyebs Kkyes Kkyess Kkyeng Kkyej Kkyech Kkyek Kkyet Kkyep Kkyeh Kko Kkog Kkokk Kkogs Kkon Kkonj Kkonh Kkod Kkol Kkolg Kkolm Kkolb Kkols Kkolt Kkolp Kkolh Kkom Kkob Kkobs Kkos Kkoss Kkong Kkoj Kkoch Kkok Kkot Kkop Kkoh Kkwa Kkwag Kkwakk Kkwags Kkwan Kkwanj Kkwanh Kkwad Kkwal Kkwalg Kkwalm Kkwalb Kkwals Kkwalt Kkwalp Kkwalh Kkwam Kkwab Kkwabs Kkwas Kkwass Kkwang Kkwaj Kkwach Kkwak Kkwat Kkwap Kkwah Kkwae Kkwaeg Kkwaekk Kkwaegs Kkwaen Kkwaenj Kkwaenh Kkwaed Kkwael Kkwaelg Kkwaelm Kkwaelb Kkwaels Kkwaelt Kkwaelp Kkwaelh Kkwaem Kkwaeb Kkwaebs Kkwaes Kkwaess Kkwaeng Kkwaej Kkwaech Kkwaek Kkwaet Kkwaep Kkwaeh Kkoe Kkoeg Kkoekk Kkoegs Kkoen Kkoenj Kkoenh Kkoed Kkoel Kkoelg Kkoelm Kkoelb Kkoels Kkoelt Kkoelp Kkoelh Kkoem Kkoeb Kkoebs Kkoes Kkoess Kkoeng Kkoej Kkoech Kkoek Kkoet Kkoep Kkoeh Kkyo Kkyog Kkyokk Kkyogs Kkyon Kkyonj Kkyonh Kkyod Kkyol Kkyolg Kkyolm Kkyolb Kkyols Kkyolt Kkyolp Kkyolh Kkyom Kkyob Kkyobs Kkyos Kkyoss Kkyong Kkyoj Kkyoch Kkyok Kkyot Kkyop Kkyoh Kku Kkug Kkukk Kkugs Kkun Kkunj Kkunh Kkud Kkul Kkulg Kkulm Kkulb Kkuls Kkult Kkulp Kkulh Kkum Kkub Kkubs Kkus Kkuss Kkung Kkuj Kkuch Kkuk Kkut Kkup Kkuh Kkwo Kkwog Kkwokk Kkwogs Kkwon Kkwonj Kkwonh Kkwod Kkwol Kkwolg Kkwolm Kkwolb Kkwols Kkwolt Kkwolp Kkwolh Kkwom Kkwob Kkwobs Kkwos Kkwoss Kkwong Kkwoj Kkwoch Kkwok Kkwot Kkwop Kkwoh Kkwe Kkweg Kkwekk Kkwegs Kkwen Kkwenj Kkwenh Kkwed Kkwel Kkwelg Kkwelm Kkwelb Kkwels Kkwelt Kkwelp Kkwelh'; + case 176: + return 'Kkwem Kkweb Kkwebs Kkwes Kkwess Kkweng Kkwej Kkwech Kkwek Kkwet Kkwep Kkweh Kkwi Kkwig Kkwikk Kkwigs Kkwin Kkwinj Kkwinh Kkwid Kkwil Kkwilg Kkwilm Kkwilb Kkwils Kkwilt Kkwilp Kkwilh Kkwim Kkwib Kkwibs Kkwis Kkwiss Kkwing Kkwij Kkwich Kkwik Kkwit Kkwip Kkwih Kkyu Kkyug Kkyukk Kkyugs Kkyun Kkyunj Kkyunh Kkyud Kkyul Kkyulg Kkyulm Kkyulb Kkyuls Kkyult Kkyulp Kkyulh Kkyum Kkyub Kkyubs Kkyus Kkyuss Kkyung Kkyuj Kkyuch Kkyuk Kkyut Kkyup Kkyuh Kkeu Kkeug Kkeukk Kkeugs Kkeun Kkeunj Kkeunh Kkeud Kkeul Kkeulg Kkeulm Kkeulb Kkeuls Kkeult Kkeulp Kkeulh Kkeum Kkeub Kkeubs Kkeus Kkeuss Kkeung Kkeuj Kkeuch Kkeuk Kkeut Kkeup Kkeuh Kkui Kkuig Kkuikk Kkuigs Kkuin Kkuinj Kkuinh Kkuid Kkuil Kkuilg Kkuilm Kkuilb Kkuils Kkuilt Kkuilp Kkuilh Kkuim Kkuib Kkuibs Kkuis Kkuiss Kkuing Kkuij Kkuich Kkuik Kkuit Kkuip Kkuih Kki Kkig Kkikk Kkigs Kkin Kkinj Kkinh Kkid Kkil Kkilg Kkilm Kkilb Kkils Kkilt Kkilp Kkilh Kkim Kkib Kkibs Kkis Kkiss Kking Kkij Kkich Kkik Kkit Kkip Kkih Na Nag Nakk Nags Nan Nanj Nanh Nad Nal Nalg Nalm Nalb Nals Nalt Nalp Nalh Nam Nab Nabs Nas Nass Nang Naj Nach Nak Nat Nap Nah Nae Naeg Naekk Naegs Naen Naenj Naenh Naed Nael Naelg Naelm Naelb Naels Naelt Naelp Naelh Naem Naeb Naebs Naes Naess Naeng Naej Naech Naek Naet Naep Naeh Nya Nyag Nyakk Nyags Nyan Nyanj Nyanh Nyad Nyal Nyalg Nyalm Nyalb Nyals Nyalt Nyalp Nyalh Nyam Nyab Nyabs Nyas Nyass Nyang Nyaj Nyach Nyak Nyat Nyap Nyah Nyae Nyaeg Nyaekk Nyaegs Nyaen Nyaenj Nyaenh Nyaed Nyael Nyaelg Nyaelm Nyaelb Nyaels Nyaelt Nyaelp Nyaelh Nyaem Nyaeb Nyaebs Nyaes'; + case 177: + return 'Nyaess Nyaeng Nyaej Nyaech Nyaek Nyaet Nyaep Nyaeh Neo Neog Neokk Neogs Neon Neonj Neonh Neod Neol Neolg Neolm Neolb Neols Neolt Neolp Neolh Neom Neob Neobs Neos Neoss Neong Neoj Neoch Neok Neot Neop Neoh Ne Neg Nekk Negs Nen Nenj Nenh Ned Nel Nelg Nelm Nelb Nels Nelt Nelp Nelh Nem Neb Nebs Nes Ness Neng Nej Nech Nek Net Nep Neh Nyeo Nyeog Nyeokk Nyeogs Nyeon Nyeonj Nyeonh Nyeod Nyeol Nyeolg Nyeolm Nyeolb Nyeols Nyeolt Nyeolp Nyeolh Nyeom Nyeob Nyeobs Nyeos Nyeoss Nyeong Nyeoj Nyeoch Nyeok Nyeot Nyeop Nyeoh Nye Nyeg Nyekk Nyegs Nyen Nyenj Nyenh Nyed Nyel Nyelg Nyelm Nyelb Nyels Nyelt Nyelp Nyelh Nyem Nyeb Nyebs Nyes Nyess Nyeng Nyej Nyech Nyek Nyet Nyep Nyeh No Nog Nokk Nogs Non Nonj Nonh Nod Nol Nolg Nolm Nolb Nols Nolt Nolp Nolh Nom Nob Nobs Nos Noss Nong Noj Noch Nok Not Nop Noh Nwa Nwag Nwakk Nwags Nwan Nwanj Nwanh Nwad Nwal Nwalg Nwalm Nwalb Nwals Nwalt Nwalp Nwalh Nwam Nwab Nwabs Nwas Nwass Nwang Nwaj Nwach Nwak Nwat Nwap Nwah Nwae Nwaeg Nwaekk Nwaegs Nwaen Nwaenj Nwaenh Nwaed Nwael Nwaelg Nwaelm Nwaelb Nwaels Nwaelt Nwaelp Nwaelh Nwaem Nwaeb Nwaebs Nwaes Nwaess Nwaeng Nwaej Nwaech Nwaek Nwaet Nwaep Nwaeh Noe Noeg Noekk Noegs Noen Noenj Noenh Noed Noel Noelg Noelm Noelb Noels Noelt Noelp Noelh Noem Noeb Noebs Noes Noess Noeng Noej Noech Noek Noet Noep Noeh Nyo Nyog Nyokk Nyogs Nyon Nyonj Nyonh Nyod Nyol Nyolg Nyolm Nyolb Nyols Nyolt Nyolp Nyolh Nyom Nyob Nyobs Nyos Nyoss Nyong Nyoj Nyoch'; + case 178: + return 'Nyok Nyot Nyop Nyoh Nu Nug Nukk Nugs Nun Nunj Nunh Nud Nul Nulg Nulm Nulb Nuls Nult Nulp Nulh Num Nub Nubs Nus Nuss Nung Nuj Nuch Nuk Nut Nup Nuh Nwo Nwog Nwokk Nwogs Nwon Nwonj Nwonh Nwod Nwol Nwolg Nwolm Nwolb Nwols Nwolt Nwolp Nwolh Nwom Nwob Nwobs Nwos Nwoss Nwong Nwoj Nwoch Nwok Nwot Nwop Nwoh Nwe Nweg Nwekk Nwegs Nwen Nwenj Nwenh Nwed Nwel Nwelg Nwelm Nwelb Nwels Nwelt Nwelp Nwelh Nwem Nweb Nwebs Nwes Nwess Nweng Nwej Nwech Nwek Nwet Nwep Nweh Nwi Nwig Nwikk Nwigs Nwin Nwinj Nwinh Nwid Nwil Nwilg Nwilm Nwilb Nwils Nwilt Nwilp Nwilh Nwim Nwib Nwibs Nwis Nwiss Nwing Nwij Nwich Nwik Nwit Nwip Nwih Nyu Nyug Nyukk Nyugs Nyun Nyunj Nyunh Nyud Nyul Nyulg Nyulm Nyulb Nyuls Nyult Nyulp Nyulh Nyum Nyub Nyubs Nyus Nyuss Nyung Nyuj Nyuch Nyuk Nyut Nyup Nyuh Neu Neug Neukk Neugs Neun Neunj Neunh Neud Neul Neulg Neulm Neulb Neuls Neult Neulp Neulh Neum Neub Neubs Neus Neuss Neung Neuj Neuch Neuk Neut Neup Neuh Nui Nuig Nuikk Nuigs Nuin Nuinj Nuinh Nuid Nuil Nuilg Nuilm Nuilb Nuils Nuilt Nuilp Nuilh Nuim Nuib Nuibs Nuis Nuiss Nuing Nuij Nuich Nuik Nuit Nuip Nuih Ni Nig Nikk Nigs Nin Ninj Ninh Nid Nil Nilg Nilm Nilb Nils Nilt Nilp Nilh Nim Nib Nibs Nis Niss Ning Nij Nich Nik Nit Nip Nih Da Dag Dakk Dags Dan Danj Danh Dad Dal Dalg Dalm Dalb Dals Dalt Dalp Dalh Dam Dab Dabs Das Dass Dang Daj Dach Dak Dat Dap Dah'; + case 179: + return 'Dae Daeg Daekk Daegs Daen Daenj Daenh Daed Dael Daelg Daelm Daelb Daels Daelt Daelp Daelh Daem Daeb Daebs Daes Daess Daeng Daej Daech Daek Daet Daep Daeh Dya Dyag Dyakk Dyags Dyan Dyanj Dyanh Dyad Dyal Dyalg Dyalm Dyalb Dyals Dyalt Dyalp Dyalh Dyam Dyab Dyabs Dyas Dyass Dyang Dyaj Dyach Dyak Dyat Dyap Dyah Dyae Dyaeg Dyaekk Dyaegs Dyaen Dyaenj Dyaenh Dyaed Dyael Dyaelg Dyaelm Dyaelb Dyaels Dyaelt Dyaelp Dyaelh Dyaem Dyaeb Dyaebs Dyaes Dyaess Dyaeng Dyaej Dyaech Dyaek Dyaet Dyaep Dyaeh Deo Deog Deokk Deogs Deon Deonj Deonh Deod Deol Deolg Deolm Deolb Deols Deolt Deolp Deolh Deom Deob Deobs Deos Deoss Deong Deoj Deoch Deok Deot Deop Deoh De Deg Dekk Degs Den Denj Denh Ded Del Delg Delm Delb Dels Delt Delp Delh Dem Deb Debs Des Dess Deng Dej Dech Dek Det Dep Deh Dyeo Dyeog Dyeokk Dyeogs Dyeon Dyeonj Dyeonh Dyeod Dyeol Dyeolg Dyeolm Dyeolb Dyeols Dyeolt Dyeolp Dyeolh Dyeom Dyeob Dyeobs Dyeos Dyeoss Dyeong Dyeoj Dyeoch Dyeok Dyeot Dyeop Dyeoh Dye Dyeg Dyekk Dyegs Dyen Dyenj Dyenh Dyed Dyel Dyelg Dyelm Dyelb Dyels Dyelt Dyelp Dyelh Dyem Dyeb Dyebs Dyes Dyess Dyeng Dyej Dyech Dyek Dyet Dyep Dyeh Do Dog Dokk Dogs Don Donj Donh Dod Dol Dolg Dolm Dolb Dols Dolt Dolp Dolh Dom Dob Dobs Dos Doss Dong Doj Doch Dok Dot Dop Doh Dwa Dwag Dwakk Dwags Dwan Dwanj Dwanh Dwad Dwal Dwalg Dwalm Dwalb Dwals Dwalt Dwalp Dwalh Dwam Dwab Dwabs Dwas Dwass Dwang Dwaj Dwach Dwak Dwat Dwap Dwah Dwae Dwaeg Dwaekk Dwaegs'; + case 180: + return 'Dwaen Dwaenj Dwaenh Dwaed Dwael Dwaelg Dwaelm Dwaelb Dwaels Dwaelt Dwaelp Dwaelh Dwaem Dwaeb Dwaebs Dwaes Dwaess Dwaeng Dwaej Dwaech Dwaek Dwaet Dwaep Dwaeh Doe Doeg Doekk Doegs Doen Doenj Doenh Doed Doel Doelg Doelm Doelb Doels Doelt Doelp Doelh Doem Doeb Doebs Does Doess Doeng Doej Doech Doek Doet Doep Doeh Dyo Dyog Dyokk Dyogs Dyon Dyonj Dyonh Dyod Dyol Dyolg Dyolm Dyolb Dyols Dyolt Dyolp Dyolh Dyom Dyob Dyobs Dyos Dyoss Dyong Dyoj Dyoch Dyok Dyot Dyop Dyoh Du Dug Dukk Dugs Dun Dunj Dunh Dud Dul Dulg Dulm Dulb Duls Dult Dulp Dulh Dum Dub Dubs Dus Duss Dung Duj Duch Duk Dut Dup Duh Dwo Dwog Dwokk Dwogs Dwon Dwonj Dwonh Dwod Dwol Dwolg Dwolm Dwolb Dwols Dwolt Dwolp Dwolh Dwom Dwob Dwobs Dwos Dwoss Dwong Dwoj Dwoch Dwok Dwot Dwop Dwoh Dwe Dweg Dwekk Dwegs Dwen Dwenj Dwenh Dwed Dwel Dwelg Dwelm Dwelb Dwels Dwelt Dwelp Dwelh Dwem Dweb Dwebs Dwes Dwess Dweng Dwej Dwech Dwek Dwet Dwep Dweh Dwi Dwig Dwikk Dwigs Dwin Dwinj Dwinh Dwid Dwil Dwilg Dwilm Dwilb Dwils Dwilt Dwilp Dwilh Dwim Dwib Dwibs Dwis Dwiss Dwing Dwij Dwich Dwik Dwit Dwip Dwih Dyu Dyug Dyukk Dyugs Dyun Dyunj Dyunh Dyud Dyul Dyulg Dyulm Dyulb Dyuls Dyult Dyulp Dyulh Dyum Dyub Dyubs Dyus Dyuss Dyung Dyuj Dyuch Dyuk Dyut Dyup Dyuh Deu Deug Deukk Deugs Deun Deunj Deunh Deud Deul Deulg Deulm Deulb Deuls Deult Deulp Deulh Deum Deub Deubs Deus Deuss Deung Deuj Deuch Deuk Deut Deup Deuh Dui Duig Duikk Duigs Duin Duinj Duinh Duid'; + case 181: + return 'Duil Duilg Duilm Duilb Duils Duilt Duilp Duilh Duim Duib Duibs Duis Duiss Duing Duij Duich Duik Duit Duip Duih Di Dig Dikk Digs Din Dinj Dinh Did Dil Dilg Dilm Dilb Dils Dilt Dilp Dilh Dim Dib Dibs Dis Diss Ding Dij Dich Dik Dit Dip Dih Tta Ttag Ttakk Ttags Ttan Ttanj Ttanh Ttad Ttal Ttalg Ttalm Ttalb Ttals Ttalt Ttalp Ttalh Ttam Ttab Ttabs Ttas Ttass Ttang Ttaj Ttach Ttak Ttat Ttap Ttah Ttae Ttaeg Ttaekk Ttaegs Ttaen Ttaenj Ttaenh Ttaed Ttael Ttaelg Ttaelm Ttaelb Ttaels Ttaelt Ttaelp Ttaelh Ttaem Ttaeb Ttaebs Ttaes Ttaess Ttaeng Ttaej Ttaech Ttaek Ttaet Ttaep Ttaeh Ttya Ttyag Ttyakk Ttyags Ttyan Ttyanj Ttyanh Ttyad Ttyal Ttyalg Ttyalm Ttyalb Ttyals Ttyalt Ttyalp Ttyalh Ttyam Ttyab Ttyabs Ttyas Ttyass Ttyang Ttyaj Ttyach Ttyak Ttyat Ttyap Ttyah Ttyae Ttyaeg Ttyaekk Ttyaegs Ttyaen Ttyaenj Ttyaenh Ttyaed Ttyael Ttyaelg Ttyaelm Ttyaelb Ttyaels Ttyaelt Ttyaelp Ttyaelh Ttyaem Ttyaeb Ttyaebs Ttyaes Ttyaess Ttyaeng Ttyaej Ttyaech Ttyaek Ttyaet Ttyaep Ttyaeh Tteo Tteog Tteokk Tteogs Tteon Tteonj Tteonh Tteod Tteol Tteolg Tteolm Tteolb Tteols Tteolt Tteolp Tteolh Tteom Tteob Tteobs Tteos Tteoss Tteong Tteoj Tteoch Tteok Tteot Tteop Tteoh Tte Tteg Ttekk Ttegs Tten Ttenj Ttenh Tted Ttel Ttelg Ttelm Ttelb Ttels Ttelt Ttelp Ttelh Ttem Tteb Ttebs Ttes Ttess Tteng Ttej Ttech Ttek Ttet Ttep Tteh Ttyeo Ttyeog Ttyeokk Ttyeogs Ttyeon Ttyeonj Ttyeonh Ttyeod Ttyeol Ttyeolg Ttyeolm Ttyeolb Ttyeols Ttyeolt Ttyeolp Ttyeolh Ttyeom Ttyeob Ttyeobs Ttyeos Ttyeoss Ttyeong Ttyeoj Ttyeoch Ttyeok Ttyeot Ttyeop Ttyeoh Ttye Ttyeg Ttyekk Ttyegs Ttyen Ttyenj Ttyenh Ttyed Ttyel Ttyelg Ttyelm Ttyelb'; + case 182: + return 'Ttyels Ttyelt Ttyelp Ttyelh Ttyem Ttyeb Ttyebs Ttyes Ttyess Ttyeng Ttyej Ttyech Ttyek Ttyet Ttyep Ttyeh Tto Ttog Ttokk Ttogs Tton Ttonj Ttonh Ttod Ttol Ttolg Ttolm Ttolb Ttols Ttolt Ttolp Ttolh Ttom Ttob Ttobs Ttos Ttoss Ttong Ttoj Ttoch Ttok Ttot Ttop Ttoh Ttwa Ttwag Ttwakk Ttwags Ttwan Ttwanj Ttwanh Ttwad Ttwal Ttwalg Ttwalm Ttwalb Ttwals Ttwalt Ttwalp Ttwalh Ttwam Ttwab Ttwabs Ttwas Ttwass Ttwang Ttwaj Ttwach Ttwak Ttwat Ttwap Ttwah Ttwae Ttwaeg Ttwaekk Ttwaegs Ttwaen Ttwaenj Ttwaenh Ttwaed Ttwael Ttwaelg Ttwaelm Ttwaelb Ttwaels Ttwaelt Ttwaelp Ttwaelh Ttwaem Ttwaeb Ttwaebs Ttwaes Ttwaess Ttwaeng Ttwaej Ttwaech Ttwaek Ttwaet Ttwaep Ttwaeh Ttoe Ttoeg Ttoekk Ttoegs Ttoen Ttoenj Ttoenh Ttoed Ttoel Ttoelg Ttoelm Ttoelb Ttoels Ttoelt Ttoelp Ttoelh Ttoem Ttoeb Ttoebs Ttoes Ttoess Ttoeng Ttoej Ttoech Ttoek Ttoet Ttoep Ttoeh Ttyo Ttyog Ttyokk Ttyogs Ttyon Ttyonj Ttyonh Ttyod Ttyol Ttyolg Ttyolm Ttyolb Ttyols Ttyolt Ttyolp Ttyolh Ttyom Ttyob Ttyobs Ttyos Ttyoss Ttyong Ttyoj Ttyoch Ttyok Ttyot Ttyop Ttyoh Ttu Ttug Ttukk Ttugs Ttun Ttunj Ttunh Ttud Ttul Ttulg Ttulm Ttulb Ttuls Ttult Ttulp Ttulh Ttum Ttub Ttubs Ttus Ttuss Ttung Ttuj Ttuch Ttuk Ttut Ttup Ttuh Ttwo Ttwog Ttwokk Ttwogs Ttwon Ttwonj Ttwonh Ttwod Ttwol Ttwolg Ttwolm Ttwolb Ttwols Ttwolt Ttwolp Ttwolh Ttwom Ttwob Ttwobs Ttwos Ttwoss Ttwong Ttwoj Ttwoch Ttwok Ttwot Ttwop Ttwoh Ttwe Ttweg Ttwekk Ttwegs Ttwen Ttwenj Ttwenh Ttwed Ttwel Ttwelg Ttwelm Ttwelb Ttwels Ttwelt Ttwelp Ttwelh Ttwem Ttweb Ttwebs Ttwes Ttwess Ttweng Ttwej Ttwech Ttwek Ttwet Ttwep Ttweh Ttwi Ttwig Ttwikk Ttwigs Ttwin Ttwinj Ttwinh Ttwid Ttwil Ttwilg Ttwilm Ttwilb Ttwils Ttwilt Ttwilp Ttwilh'; + case 183: + return 'Ttwim Ttwib Ttwibs Ttwis Ttwiss Ttwing Ttwij Ttwich Ttwik Ttwit Ttwip Ttwih Ttyu Ttyug Ttyukk Ttyugs Ttyun Ttyunj Ttyunh Ttyud Ttyul Ttyulg Ttyulm Ttyulb Ttyuls Ttyult Ttyulp Ttyulh Ttyum Ttyub Ttyubs Ttyus Ttyuss Ttyung Ttyuj Ttyuch Ttyuk Ttyut Ttyup Ttyuh Tteu Tteug Tteukk Tteugs Tteun Tteunj Tteunh Tteud Tteul Tteulg Tteulm Tteulb Tteuls Tteult Tteulp Tteulh Tteum Tteub Tteubs Tteus Tteuss Tteung Tteuj Tteuch Tteuk Tteut Tteup Tteuh Ttui Ttuig Ttuikk Ttuigs Ttuin Ttuinj Ttuinh Ttuid Ttuil Ttuilg Ttuilm Ttuilb Ttuils Ttuilt Ttuilp Ttuilh Ttuim Ttuib Ttuibs Ttuis Ttuiss Ttuing Ttuij Ttuich Ttuik Ttuit Ttuip Ttuih Tti Ttig Ttikk Ttigs Ttin Ttinj Ttinh Ttid Ttil Ttilg Ttilm Ttilb Ttils Ttilt Ttilp Ttilh Ttim Ttib Ttibs Ttis Ttiss Tting Ttij Ttich Ttik Ttit Ttip Ttih La Lag Lakk Lags Lan Lanj Lanh Lad Lal Lalg Lalm Lalb Lals Lalt Lalp Lalh Lam Lab Labs Las Lass Lang Laj Lach Lak Lat Lap Lah Lae Laeg Laekk Laegs Laen Laenj Laenh Laed Lael Laelg Laelm Laelb Laels Laelt Laelp Laelh Laem Laeb Laebs Laes Laess Laeng Laej Laech Laek Laet Laep Laeh Lya Lyag Lyakk Lyags Lyan Lyanj Lyanh Lyad Lyal Lyalg Lyalm Lyalb Lyals Lyalt Lyalp Lyalh Lyam Lyab Lyabs Lyas Lyass Lyang Lyaj Lyach Lyak Lyat Lyap Lyah Lyae Lyaeg Lyaekk Lyaegs Lyaen Lyaenj Lyaenh Lyaed Lyael Lyaelg Lyaelm Lyaelb Lyaels Lyaelt Lyaelp Lyaelh Lyaem Lyaeb Lyaebs Lyaes Lyaess Lyaeng Lyaej Lyaech Lyaek Lyaet Lyaep Lyaeh Leo Leog Leokk Leogs Leon Leonj Leonh Leod Leol Leolg Leolm Leolb Leols Leolt Leolp Leolh Leom Leob Leobs Leos'; + case 184: + return 'Leoss Leong Leoj Leoch Leok Leot Leop Leoh Le Leg Lekk Legs Len Lenj Lenh Led Lel Lelg Lelm Lelb Lels Lelt Lelp Lelh Lem Leb Lebs Les Less Leng Lej Lech Lek Let Lep Leh Lyeo Lyeog Lyeokk Lyeogs Lyeon Lyeonj Lyeonh Lyeod Lyeol Lyeolg Lyeolm Lyeolb Lyeols Lyeolt Lyeolp Lyeolh Lyeom Lyeob Lyeobs Lyeos Lyeoss Lyeong Lyeoj Lyeoch Lyeok Lyeot Lyeop Lyeoh Lye Lyeg Lyekk Lyegs Lyen Lyenj Lyenh Lyed Lyel Lyelg Lyelm Lyelb Lyels Lyelt Lyelp Lyelh Lyem Lyeb Lyebs Lyes Lyess Lyeng Lyej Lyech Lyek Lyet Lyep Lyeh Lo Log Lokk Logs Lon Lonj Lonh Lod Lol Lolg Lolm Lolb Lols Lolt Lolp Lolh Lom Lob Lobs Los Loss Long Loj Loch Lok Lot Lop Loh Lwa Lwag Lwakk Lwags Lwan Lwanj Lwanh Lwad Lwal Lwalg Lwalm Lwalb Lwals Lwalt Lwalp Lwalh Lwam Lwab Lwabs Lwas Lwass Lwang Lwaj Lwach Lwak Lwat Lwap Lwah Lwae Lwaeg Lwaekk Lwaegs Lwaen Lwaenj Lwaenh Lwaed Lwael Lwaelg Lwaelm Lwaelb Lwaels Lwaelt Lwaelp Lwaelh Lwaem Lwaeb Lwaebs Lwaes Lwaess Lwaeng Lwaej Lwaech Lwaek Lwaet Lwaep Lwaeh Loe Loeg Loekk Loegs Loen Loenj Loenh Loed Loel Loelg Loelm Loelb Loels Loelt Loelp Loelh Loem Loeb Loebs Loes Loess Loeng Loej Loech Loek Loet Loep Loeh Lyo Lyog Lyokk Lyogs Lyon Lyonj Lyonh Lyod Lyol Lyolg Lyolm Lyolb Lyols Lyolt Lyolp Lyolh Lyom Lyob Lyobs Lyos Lyoss Lyong Lyoj Lyoch Lyok Lyot Lyop Lyoh Lu Lug Lukk Lugs Lun Lunj Lunh Lud Lul Lulg Lulm Lulb Luls Lult Lulp Lulh Lum Lub Lubs Lus Luss Lung Luj Luch'; + case 185: + return 'Luk Lut Lup Luh Lwo Lwog Lwokk Lwogs Lwon Lwonj Lwonh Lwod Lwol Lwolg Lwolm Lwolb Lwols Lwolt Lwolp Lwolh Lwom Lwob Lwobs Lwos Lwoss Lwong Lwoj Lwoch Lwok Lwot Lwop Lwoh Lwe Lweg Lwekk Lwegs Lwen Lwenj Lwenh Lwed Lwel Lwelg Lwelm Lwelb Lwels Lwelt Lwelp Lwelh Lwem Lweb Lwebs Lwes Lwess Lweng Lwej Lwech Lwek Lwet Lwep Lweh Lwi Lwig Lwikk Lwigs Lwin Lwinj Lwinh Lwid Lwil Lwilg Lwilm Lwilb Lwils Lwilt Lwilp Lwilh Lwim Lwib Lwibs Lwis Lwiss Lwing Lwij Lwich Lwik Lwit Lwip Lwih Lyu Lyug Lyukk Lyugs Lyun Lyunj Lyunh Lyud Lyul Lyulg Lyulm Lyulb Lyuls Lyult Lyulp Lyulh Lyum Lyub Lyubs Lyus Lyuss Lyung Lyuj Lyuch Lyuk Lyut Lyup Lyuh Leu Leug Leukk Leugs Leun Leunj Leunh Leud Leul Leulg Leulm Leulb Leuls Leult Leulp Leulh Leum Leub Leubs Leus Leuss Leung Leuj Leuch Leuk Leut Leup Leuh Lui Luig Luikk Luigs Luin Luinj Luinh Luid Luil Luilg Luilm Luilb Luils Luilt Luilp Luilh Luim Luib Luibs Luis Luiss Luing Luij Luich Luik Luit Luip Luih Li Lig Likk Ligs Lin Linj Linh Lid Lil Lilg Lilm Lilb Lils Lilt Lilp Lilh Lim Lib Libs Lis Liss Ling Lij Lich Lik Lit Lip Lih Ma Mag Makk Mags Man Manj Manh Mad Mal Malg Malm Malb Mals Malt Malp Malh Mam Mab Mabs Mas Mass Mang Maj Mach Mak Mat Map Mah Mae Maeg Maekk Maegs Maen Maenj Maenh Maed Mael Maelg Maelm Maelb Maels Maelt Maelp Maelh Maem Maeb Maebs Maes Maess Maeng Maej Maech Maek Maet Maep Maeh'; + case 186: + return 'Mya Myag Myakk Myags Myan Myanj Myanh Myad Myal Myalg Myalm Myalb Myals Myalt Myalp Myalh Myam Myab Myabs Myas Myass Myang Myaj Myach Myak Myat Myap Myah Myae Myaeg Myaekk Myaegs Myaen Myaenj Myaenh Myaed Myael Myaelg Myaelm Myaelb Myaels Myaelt Myaelp Myaelh Myaem Myaeb Myaebs Myaes Myaess Myaeng Myaej Myaech Myaek Myaet Myaep Myaeh Meo Meog Meokk Meogs Meon Meonj Meonh Meod Meol Meolg Meolm Meolb Meols Meolt Meolp Meolh Meom Meob Meobs Meos Meoss Meong Meoj Meoch Meok Meot Meop Meoh Me Meg Mekk Megs Men Menj Menh Med Mel Melg Melm Melb Mels Melt Melp Melh Mem Meb Mebs Mes Mess Meng Mej Mech Mek Met Mep Meh Myeo Myeog Myeokk Myeogs Myeon Myeonj Myeonh Myeod Myeol Myeolg Myeolm Myeolb Myeols Myeolt Myeolp Myeolh Myeom Myeob Myeobs Myeos Myeoss Myeong Myeoj Myeoch Myeok Myeot Myeop Myeoh Mye Myeg Myekk Myegs Myen Myenj Myenh Myed Myel Myelg Myelm Myelb Myels Myelt Myelp Myelh Myem Myeb Myebs Myes Myess Myeng Myej Myech Myek Myet Myep Myeh Mo Mog Mokk Mogs Mon Monj Monh Mod Mol Molg Molm Molb Mols Molt Molp Molh Mom Mob Mobs Mos Moss Mong Moj Moch Mok Mot Mop Moh Mwa Mwag Mwakk Mwags Mwan Mwanj Mwanh Mwad Mwal Mwalg Mwalm Mwalb Mwals Mwalt Mwalp Mwalh Mwam Mwab Mwabs Mwas Mwass Mwang Mwaj Mwach Mwak Mwat Mwap Mwah Mwae Mwaeg Mwaekk Mwaegs Mwaen Mwaenj Mwaenh Mwaed Mwael Mwaelg Mwaelm Mwaelb Mwaels Mwaelt Mwaelp Mwaelh Mwaem Mwaeb Mwaebs Mwaes Mwaess Mwaeng Mwaej Mwaech Mwaek Mwaet Mwaep Mwaeh Moe Moeg Moekk Moegs'; + case 187: + return 'Moen Moenj Moenh Moed Moel Moelg Moelm Moelb Moels Moelt Moelp Moelh Moem Moeb Moebs Moes Moess Moeng Moej Moech Moek Moet Moep Moeh Myo Myog Myokk Myogs Myon Myonj Myonh Myod Myol Myolg Myolm Myolb Myols Myolt Myolp Myolh Myom Myob Myobs Myos Myoss Myong Myoj Myoch Myok Myot Myop Myoh Mu Mug Mukk Mugs Mun Munj Munh Mud Mul Mulg Mulm Mulb Muls Mult Mulp Mulh Mum Mub Mubs Mus Muss Mung Muj Much Muk Mut Mup Muh Mwo Mwog Mwokk Mwogs Mwon Mwonj Mwonh Mwod Mwol Mwolg Mwolm Mwolb Mwols Mwolt Mwolp Mwolh Mwom Mwob Mwobs Mwos Mwoss Mwong Mwoj Mwoch Mwok Mwot Mwop Mwoh Mwe Mweg Mwekk Mwegs Mwen Mwenj Mwenh Mwed Mwel Mwelg Mwelm Mwelb Mwels Mwelt Mwelp Mwelh Mwem Mweb Mwebs Mwes Mwess Mweng Mwej Mwech Mwek Mwet Mwep Mweh Mwi Mwig Mwikk Mwigs Mwin Mwinj Mwinh Mwid Mwil Mwilg Mwilm Mwilb Mwils Mwilt Mwilp Mwilh Mwim Mwib Mwibs Mwis Mwiss Mwing Mwij Mwich Mwik Mwit Mwip Mwih Myu Myug Myukk Myugs Myun Myunj Myunh Myud Myul Myulg Myulm Myulb Myuls Myult Myulp Myulh Myum Myub Myubs Myus Myuss Myung Myuj Myuch Myuk Myut Myup Myuh Meu Meug Meukk Meugs Meun Meunj Meunh Meud Meul Meulg Meulm Meulb Meuls Meult Meulp Meulh Meum Meub Meubs Meus Meuss Meung Meuj Meuch Meuk Meut Meup Meuh Mui Muig Muikk Muigs Muin Muinj Muinh Muid Muil Muilg Muilm Muilb Muils Muilt Muilp Muilh Muim Muib Muibs Muis Muiss Muing Muij Muich Muik Muit Muip Muih Mi Mig Mikk Migs Min Minj Minh Mid'; + case 188: + return 'Mil Milg Milm Milb Mils Milt Milp Milh Mim Mib Mibs Mis Miss Ming Mij Mich Mik Mit Mip Mih Ba Bag Bakk Bags Ban Banj Banh Bad Bal Balg Balm Balb Bals Balt Balp Balh Bam Bab Babs Bas Bass Bang Baj Bach Bak Bat Bap Bah Bae Baeg Baekk Baegs Baen Baenj Baenh Baed Bael Baelg Baelm Baelb Baels Baelt Baelp Baelh Baem Baeb Baebs Baes Baess Baeng Baej Baech Baek Baet Baep Baeh Bya Byag Byakk Byags Byan Byanj Byanh Byad Byal Byalg Byalm Byalb Byals Byalt Byalp Byalh Byam Byab Byabs Byas Byass Byang Byaj Byach Byak Byat Byap Byah Byae Byaeg Byaekk Byaegs Byaen Byaenj Byaenh Byaed Byael Byaelg Byaelm Byaelb Byaels Byaelt Byaelp Byaelh Byaem Byaeb Byaebs Byaes Byaess Byaeng Byaej Byaech Byaek Byaet Byaep Byaeh Beo Beog Beokk Beogs Beon Beonj Beonh Beod Beol Beolg Beolm Beolb Beols Beolt Beolp Beolh Beom Beob Beobs Beos Beoss Beong Beoj Beoch Beok Beot Beop Beoh Be Beg Bekk Begs Ben Benj Benh Bed Bel Belg Belm Belb Bels Belt Belp Belh Bem Beb Bebs Bes Bess Beng Bej Bech Bek Bet Bep Beh Byeo Byeog Byeokk Byeogs Byeon Byeonj Byeonh Byeod Byeol Byeolg Byeolm Byeolb Byeols Byeolt Byeolp Byeolh Byeom Byeob Byeobs Byeos Byeoss Byeong Byeoj Byeoch Byeok Byeot Byeop Byeoh Bye Byeg Byekk Byegs Byen Byenj Byenh Byed Byel Byelg Byelm Byelb Byels Byelt Byelp Byelh Byem Byeb Byebs Byes Byess Byeng Byej Byech Byek Byet Byep Byeh Bo Bog Bokk Bogs Bon Bonj Bonh Bod Bol Bolg Bolm Bolb'; + case 189: + return 'Bols Bolt Bolp Bolh Bom Bob Bobs Bos Boss Bong Boj Boch Bok Bot Bop Boh Bwa Bwag Bwakk Bwags Bwan Bwanj Bwanh Bwad Bwal Bwalg Bwalm Bwalb Bwals Bwalt Bwalp Bwalh Bwam Bwab Bwabs Bwas Bwass Bwang Bwaj Bwach Bwak Bwat Bwap Bwah Bwae Bwaeg Bwaekk Bwaegs Bwaen Bwaenj Bwaenh Bwaed Bwael Bwaelg Bwaelm Bwaelb Bwaels Bwaelt Bwaelp Bwaelh Bwaem Bwaeb Bwaebs Bwaes Bwaess Bwaeng Bwaej Bwaech Bwaek Bwaet Bwaep Bwaeh Boe Boeg Boekk Boegs Boen Boenj Boenh Boed Boel Boelg Boelm Boelb Boels Boelt Boelp Boelh Boem Boeb Boebs Boes Boess Boeng Boej Boech Boek Boet Boep Boeh Byo Byog Byokk Byogs Byon Byonj Byonh Byod Byol Byolg Byolm Byolb Byols Byolt Byolp Byolh Byom Byob Byobs Byos Byoss Byong Byoj Byoch Byok Byot Byop Byoh Bu Bug Bukk Bugs Bun Bunj Bunh Bud Bul Bulg Bulm Bulb Buls Bult Bulp Bulh Bum Bub Bubs Bus Buss Bung Buj Buch Buk But Bup Buh Bwo Bwog Bwokk Bwogs Bwon Bwonj Bwonh Bwod Bwol Bwolg Bwolm Bwolb Bwols Bwolt Bwolp Bwolh Bwom Bwob Bwobs Bwos Bwoss Bwong Bwoj Bwoch Bwok Bwot Bwop Bwoh Bwe Bweg Bwekk Bwegs Bwen Bwenj Bwenh Bwed Bwel Bwelg Bwelm Bwelb Bwels Bwelt Bwelp Bwelh Bwem Bweb Bwebs Bwes Bwess Bweng Bwej Bwech Bwek Bwet Bwep Bweh Bwi Bwig Bwikk Bwigs Bwin Bwinj Bwinh Bwid Bwil Bwilg Bwilm Bwilb Bwils Bwilt Bwilp Bwilh Bwim Bwib Bwibs Bwis Bwiss Bwing Bwij Bwich Bwik Bwit Bwip Bwih Byu Byug Byukk Byugs Byun Byunj Byunh Byud Byul Byulg Byulm Byulb Byuls Byult Byulp Byulh'; + case 190: + return 'Byum Byub Byubs Byus Byuss Byung Byuj Byuch Byuk Byut Byup Byuh Beu Beug Beukk Beugs Beun Beunj Beunh Beud Beul Beulg Beulm Beulb Beuls Beult Beulp Beulh Beum Beub Beubs Beus Beuss Beung Beuj Beuch Beuk Beut Beup Beuh Bui Buig Buikk Buigs Buin Buinj Buinh Buid Buil Builg Builm Builb Buils Built Builp Builh Buim Buib Buibs Buis Buiss Buing Buij Buich Buik Buit Buip Buih Bi Big Bikk Bigs Bin Binj Binh Bid Bil Bilg Bilm Bilb Bils Bilt Bilp Bilh Bim Bib Bibs Bis Biss Bing Bij Bich Bik Bit Bip Bih Ppa Ppag Ppakk Ppags Ppan Ppanj Ppanh Ppad Ppal Ppalg Ppalm Ppalb Ppals Ppalt Ppalp Ppalh Ppam Ppab Ppabs Ppas Ppass Ppang Ppaj Ppach Ppak Ppat Ppap Ppah Ppae Ppaeg Ppaekk Ppaegs Ppaen Ppaenj Ppaenh Ppaed Ppael Ppaelg Ppaelm Ppaelb Ppaels Ppaelt Ppaelp Ppaelh Ppaem Ppaeb Ppaebs Ppaes Ppaess Ppaeng Ppaej Ppaech Ppaek Ppaet Ppaep Ppaeh Ppya Ppyag Ppyakk Ppyags Ppyan Ppyanj Ppyanh Ppyad Ppyal Ppyalg Ppyalm Ppyalb Ppyals Ppyalt Ppyalp Ppyalh Ppyam Ppyab Ppyabs Ppyas Ppyass Ppyang Ppyaj Ppyach Ppyak Ppyat Ppyap Ppyah Ppyae Ppyaeg Ppyaekk Ppyaegs Ppyaen Ppyaenj Ppyaenh Ppyaed Ppyael Ppyaelg Ppyaelm Ppyaelb Ppyaels Ppyaelt Ppyaelp Ppyaelh Ppyaem Ppyaeb Ppyaebs Ppyaes Ppyaess Ppyaeng Ppyaej Ppyaech Ppyaek Ppyaet Ppyaep Ppyaeh Ppeo Ppeog Ppeokk Ppeogs Ppeon Ppeonj Ppeonh Ppeod Ppeol Ppeolg Ppeolm Ppeolb Ppeols Ppeolt Ppeolp Ppeolh Ppeom Ppeob Ppeobs Ppeos Ppeoss Ppeong Ppeoj Ppeoch Ppeok Ppeot Ppeop Ppeoh Ppe Ppeg Ppekk Ppegs Ppen Ppenj Ppenh Pped Ppel Ppelg Ppelm Ppelb Ppels Ppelt Ppelp Ppelh Ppem Ppeb Ppebs Ppes'; + case 191: + return 'Ppess Ppeng Ppej Ppech Ppek Ppet Ppep Ppeh Ppyeo Ppyeog Ppyeokk Ppyeogs Ppyeon Ppyeonj Ppyeonh Ppyeod Ppyeol Ppyeolg Ppyeolm Ppyeolb Ppyeols Ppyeolt Ppyeolp Ppyeolh Ppyeom Ppyeob Ppyeobs Ppyeos Ppyeoss Ppyeong Ppyeoj Ppyeoch Ppyeok Ppyeot Ppyeop Ppyeoh Ppye Ppyeg Ppyekk Ppyegs Ppyen Ppyenj Ppyenh Ppyed Ppyel Ppyelg Ppyelm Ppyelb Ppyels Ppyelt Ppyelp Ppyelh Ppyem Ppyeb Ppyebs Ppyes Ppyess Ppyeng Ppyej Ppyech Ppyek Ppyet Ppyep Ppyeh Ppo Ppog Ppokk Ppogs Ppon Pponj Pponh Ppod Ppol Ppolg Ppolm Ppolb Ppols Ppolt Ppolp Ppolh Ppom Ppob Ppobs Ppos Pposs Ppong Ppoj Ppoch Ppok Ppot Ppop Ppoh Ppwa Ppwag Ppwakk Ppwags Ppwan Ppwanj Ppwanh Ppwad Ppwal Ppwalg Ppwalm Ppwalb Ppwals Ppwalt Ppwalp Ppwalh Ppwam Ppwab Ppwabs Ppwas Ppwass Ppwang Ppwaj Ppwach Ppwak Ppwat Ppwap Ppwah Ppwae Ppwaeg Ppwaekk Ppwaegs Ppwaen Ppwaenj Ppwaenh Ppwaed Ppwael Ppwaelg Ppwaelm Ppwaelb Ppwaels Ppwaelt Ppwaelp Ppwaelh Ppwaem Ppwaeb Ppwaebs Ppwaes Ppwaess Ppwaeng Ppwaej Ppwaech Ppwaek Ppwaet Ppwaep Ppwaeh Ppoe Ppoeg Ppoekk Ppoegs Ppoen Ppoenj Ppoenh Ppoed Ppoel Ppoelg Ppoelm Ppoelb Ppoels Ppoelt Ppoelp Ppoelh Ppoem Ppoeb Ppoebs Ppoes Ppoess Ppoeng Ppoej Ppoech Ppoek Ppoet Ppoep Ppoeh Ppyo Ppyog Ppyokk Ppyogs Ppyon Ppyonj Ppyonh Ppyod Ppyol Ppyolg Ppyolm Ppyolb Ppyols Ppyolt Ppyolp Ppyolh Ppyom Ppyob Ppyobs Ppyos Ppyoss Ppyong Ppyoj Ppyoch Ppyok Ppyot Ppyop Ppyoh Ppu Ppug Ppukk Ppugs Ppun Ppunj Ppunh Ppud Ppul Ppulg Ppulm Ppulb Ppuls Ppult Ppulp Ppulh Ppum Ppub Ppubs Ppus Ppuss Ppung Ppuj Ppuch Ppuk Pput Ppup Ppuh Ppwo Ppwog Ppwokk Ppwogs Ppwon Ppwonj Ppwonh Ppwod Ppwol Ppwolg Ppwolm Ppwolb Ppwols Ppwolt Ppwolp Ppwolh Ppwom Ppwob Ppwobs Ppwos Ppwoss Ppwong Ppwoj Ppwoch'; + case 192: + return 'Ppwok Ppwot Ppwop Ppwoh Ppwe Ppweg Ppwekk Ppwegs Ppwen Ppwenj Ppwenh Ppwed Ppwel Ppwelg Ppwelm Ppwelb Ppwels Ppwelt Ppwelp Ppwelh Ppwem Ppweb Ppwebs Ppwes Ppwess Ppweng Ppwej Ppwech Ppwek Ppwet Ppwep Ppweh Ppwi Ppwig Ppwikk Ppwigs Ppwin Ppwinj Ppwinh Ppwid Ppwil Ppwilg Ppwilm Ppwilb Ppwils Ppwilt Ppwilp Ppwilh Ppwim Ppwib Ppwibs Ppwis Ppwiss Ppwing Ppwij Ppwich Ppwik Ppwit Ppwip Ppwih Ppyu Ppyug Ppyukk Ppyugs Ppyun Ppyunj Ppyunh Ppyud Ppyul Ppyulg Ppyulm Ppyulb Ppyuls Ppyult Ppyulp Ppyulh Ppyum Ppyub Ppyubs Ppyus Ppyuss Ppyung Ppyuj Ppyuch Ppyuk Ppyut Ppyup Ppyuh Ppeu Ppeug Ppeukk Ppeugs Ppeun Ppeunj Ppeunh Ppeud Ppeul Ppeulg Ppeulm Ppeulb Ppeuls Ppeult Ppeulp Ppeulh Ppeum Ppeub Ppeubs Ppeus Ppeuss Ppeung Ppeuj Ppeuch Ppeuk Ppeut Ppeup Ppeuh Ppui Ppuig Ppuikk Ppuigs Ppuin Ppuinj Ppuinh Ppuid Ppuil Ppuilg Ppuilm Ppuilb Ppuils Ppuilt Ppuilp Ppuilh Ppuim Ppuib Ppuibs Ppuis Ppuiss Ppuing Ppuij Ppuich Ppuik Ppuit Ppuip Ppuih Ppi Ppig Ppikk Ppigs Ppin Ppinj Ppinh Ppid Ppil Ppilg Ppilm Ppilb Ppils Ppilt Ppilp Ppilh Ppim Ppib Ppibs Ppis Ppiss Pping Ppij Ppich Ppik Ppit Ppip Ppih Sa Sag Sakk Sags San Sanj Sanh Sad Sal Salg Salm Salb Sals Salt Salp Salh Sam Sab Sabs Sas Sass Sang Saj Sach Sak Sat Sap Sah Sae Saeg Saekk Saegs Saen Saenj Saenh Saed Sael Saelg Saelm Saelb Saels Saelt Saelp Saelh Saem Saeb Saebs Saes Saess Saeng Saej Saech Saek Saet Saep Saeh Sya Syag Syakk Syags Syan Syanj Syanh Syad Syal Syalg Syalm Syalb Syals Syalt Syalp Syalh Syam Syab Syabs Syas Syass Syang Syaj Syach Syak Syat Syap Syah'; + case 193: + return 'Syae Syaeg Syaekk Syaegs Syaen Syaenj Syaenh Syaed Syael Syaelg Syaelm Syaelb Syaels Syaelt Syaelp Syaelh Syaem Syaeb Syaebs Syaes Syaess Syaeng Syaej Syaech Syaek Syaet Syaep Syaeh Seo Seog Seokk Seogs Seon Seonj Seonh Seod Seol Seolg Seolm Seolb Seols Seolt Seolp Seolh Seom Seob Seobs Seos Seoss Seong Seoj Seoch Seok Seot Seop Seoh Se Seg Sekk Segs Sen Senj Senh Sed Sel Selg Selm Selb Sels Selt Selp Selh Sem Seb Sebs Ses Sess Seng Sej Sech Sek Set Sep Seh Syeo Syeog Syeokk Syeogs Syeon Syeonj Syeonh Syeod Syeol Syeolg Syeolm Syeolb Syeols Syeolt Syeolp Syeolh Syeom Syeob Syeobs Syeos Syeoss Syeong Syeoj Syeoch Syeok Syeot Syeop Syeoh Sye Syeg Syekk Syegs Syen Syenj Syenh Syed Syel Syelg Syelm Syelb Syels Syelt Syelp Syelh Syem Syeb Syebs Syes Syess Syeng Syej Syech Syek Syet Syep Syeh So Sog Sokk Sogs Son Sonj Sonh Sod Sol Solg Solm Solb Sols Solt Solp Solh Som Sob Sobs Sos Soss Song Soj Soch Sok Sot Sop Soh Swa Swag Swakk Swags Swan Swanj Swanh Swad Swal Swalg Swalm Swalb Swals Swalt Swalp Swalh Swam Swab Swabs Swas Swass Swang Swaj Swach Swak Swat Swap Swah Swae Swaeg Swaekk Swaegs Swaen Swaenj Swaenh Swaed Swael Swaelg Swaelm Swaelb Swaels Swaelt Swaelp Swaelh Swaem Swaeb Swaebs Swaes Swaess Swaeng Swaej Swaech Swaek Swaet Swaep Swaeh Soe Soeg Soekk Soegs Soen Soenj Soenh Soed Soel Soelg Soelm Soelb Soels Soelt Soelp Soelh Soem Soeb Soebs Soes Soess Soeng Soej Soech Soek Soet Soep Soeh Syo Syog Syokk Syogs'; + case 194: + return 'Syon Syonj Syonh Syod Syol Syolg Syolm Syolb Syols Syolt Syolp Syolh Syom Syob Syobs Syos Syoss Syong Syoj Syoch Syok Syot Syop Syoh Su Sug Sukk Sugs Sun Sunj Sunh Sud Sul Sulg Sulm Sulb Suls Sult Sulp Sulh Sum Sub Subs Sus Suss Sung Suj Such Suk Sut Sup Suh Swo Swog Swokk Swogs Swon Swonj Swonh Swod Swol Swolg Swolm Swolb Swols Swolt Swolp Swolh Swom Swob Swobs Swos Swoss Swong Swoj Swoch Swok Swot Swop Swoh Swe Sweg Swekk Swegs Swen Swenj Swenh Swed Swel Swelg Swelm Swelb Swels Swelt Swelp Swelh Swem Sweb Swebs Swes Swess Sweng Swej Swech Swek Swet Swep Sweh Swi Swig Swikk Swigs Swin Swinj Swinh Swid Swil Swilg Swilm Swilb Swils Swilt Swilp Swilh Swim Swib Swibs Swis Swiss Swing Swij Swich Swik Swit Swip Swih Syu Syug Syukk Syugs Syun Syunj Syunh Syud Syul Syulg Syulm Syulb Syuls Syult Syulp Syulh Syum Syub Syubs Syus Syuss Syung Syuj Syuch Syuk Syut Syup Syuh Seu Seug Seukk Seugs Seun Seunj Seunh Seud Seul Seulg Seulm Seulb Seuls Seult Seulp Seulh Seum Seub Seubs Seus Seuss Seung Seuj Seuch Seuk Seut Seup Seuh Sui Suig Suikk Suigs Suin Suinj Suinh Suid Suil Suilg Suilm Suilb Suils Suilt Suilp Suilh Suim Suib Suibs Suis Suiss Suing Suij Suich Suik Suit Suip Suih Si Sig Sikk Sigs Sin Sinj Sinh Sid Sil Silg Silm Silb Sils Silt Silp Silh Sim Sib Sibs Sis Siss Sing Sij Sich Sik Sit Sip Sih Ssa Ssag Ssakk Ssags Ssan Ssanj Ssanh Ssad'; + case 195: + return 'Ssal Ssalg Ssalm Ssalb Ssals Ssalt Ssalp Ssalh Ssam Ssab Ssabs Ssas Ssass Ssang Ssaj Ssach Ssak Ssat Ssap Ssah Ssae Ssaeg Ssaekk Ssaegs Ssaen Ssaenj Ssaenh Ssaed Ssael Ssaelg Ssaelm Ssaelb Ssaels Ssaelt Ssaelp Ssaelh Ssaem Ssaeb Ssaebs Ssaes Ssaess Ssaeng Ssaej Ssaech Ssaek Ssaet Ssaep Ssaeh Ssya Ssyag Ssyakk Ssyags Ssyan Ssyanj Ssyanh Ssyad Ssyal Ssyalg Ssyalm Ssyalb Ssyals Ssyalt Ssyalp Ssyalh Ssyam Ssyab Ssyabs Ssyas Ssyass Ssyang Ssyaj Ssyach Ssyak Ssyat Ssyap Ssyah Ssyae Ssyaeg Ssyaekk Ssyaegs Ssyaen Ssyaenj Ssyaenh Ssyaed Ssyael Ssyaelg Ssyaelm Ssyaelb Ssyaels Ssyaelt Ssyaelp Ssyaelh Ssyaem Ssyaeb Ssyaebs Ssyaes Ssyaess Ssyaeng Ssyaej Ssyaech Ssyaek Ssyaet Ssyaep Ssyaeh Sseo Sseog Sseokk Sseogs Sseon Sseonj Sseonh Sseod Sseol Sseolg Sseolm Sseolb Sseols Sseolt Sseolp Sseolh Sseom Sseob Sseobs Sseos Sseoss Sseong Sseoj Sseoch Sseok Sseot Sseop Sseoh Sse Sseg Ssekk Ssegs Ssen Ssenj Ssenh Ssed Ssel Sselg Sselm Sselb Ssels Sselt Sselp Sselh Ssem Sseb Ssebs Sses Ssess Sseng Ssej Ssech Ssek Sset Ssep Sseh Ssyeo Ssyeog Ssyeokk Ssyeogs Ssyeon Ssyeonj Ssyeonh Ssyeod Ssyeol Ssyeolg Ssyeolm Ssyeolb Ssyeols Ssyeolt Ssyeolp Ssyeolh Ssyeom Ssyeob Ssyeobs Ssyeos Ssyeoss Ssyeong Ssyeoj Ssyeoch Ssyeok Ssyeot Ssyeop Ssyeoh Ssye Ssyeg Ssyekk Ssyegs Ssyen Ssyenj Ssyenh Ssyed Ssyel Ssyelg Ssyelm Ssyelb Ssyels Ssyelt Ssyelp Ssyelh Ssyem Ssyeb Ssyebs Ssyes Ssyess Ssyeng Ssyej Ssyech Ssyek Ssyet Ssyep Ssyeh Sso Ssog Ssokk Ssogs Sson Ssonj Ssonh Ssod Ssol Ssolg Ssolm Ssolb Ssols Ssolt Ssolp Ssolh Ssom Ssob Ssobs Ssos Ssoss Ssong Ssoj Ssoch Ssok Ssot Ssop Ssoh Sswa Sswag Sswakk Sswags Sswan Sswanj Sswanh Sswad Sswal Sswalg Sswalm Sswalb'; + case 196: + return 'Sswals Sswalt Sswalp Sswalh Sswam Sswab Sswabs Sswas Sswass Sswang Sswaj Sswach Sswak Sswat Sswap Sswah Sswae Sswaeg Sswaekk Sswaegs Sswaen Sswaenj Sswaenh Sswaed Sswael Sswaelg Sswaelm Sswaelb Sswaels Sswaelt Sswaelp Sswaelh Sswaem Sswaeb Sswaebs Sswaes Sswaess Sswaeng Sswaej Sswaech Sswaek Sswaet Sswaep Sswaeh Ssoe Ssoeg Ssoekk Ssoegs Ssoen Ssoenj Ssoenh Ssoed Ssoel Ssoelg Ssoelm Ssoelb Ssoels Ssoelt Ssoelp Ssoelh Ssoem Ssoeb Ssoebs Ssoes Ssoess Ssoeng Ssoej Ssoech Ssoek Ssoet Ssoep Ssoeh Ssyo Ssyog Ssyokk Ssyogs Ssyon Ssyonj Ssyonh Ssyod Ssyol Ssyolg Ssyolm Ssyolb Ssyols Ssyolt Ssyolp Ssyolh Ssyom Ssyob Ssyobs Ssyos Ssyoss Ssyong Ssyoj Ssyoch Ssyok Ssyot Ssyop Ssyoh Ssu Ssug Ssukk Ssugs Ssun Ssunj Ssunh Ssud Ssul Ssulg Ssulm Ssulb Ssuls Ssult Ssulp Ssulh Ssum Ssub Ssubs Ssus Ssuss Ssung Ssuj Ssuch Ssuk Ssut Ssup Ssuh Sswo Sswog Sswokk Sswogs Sswon Sswonj Sswonh Sswod Sswol Sswolg Sswolm Sswolb Sswols Sswolt Sswolp Sswolh Sswom Sswob Sswobs Sswos Sswoss Sswong Sswoj Sswoch Sswok Sswot Sswop Sswoh Sswe Ssweg Sswekk Sswegs Sswen Sswenj Sswenh Sswed Sswel Sswelg Sswelm Sswelb Sswels Sswelt Sswelp Sswelh Sswem Ssweb Sswebs Sswes Sswess Ssweng Sswej Sswech Sswek Sswet Sswep Ssweh Sswi Sswig Sswikk Sswigs Sswin Sswinj Sswinh Sswid Sswil Sswilg Sswilm Sswilb Sswils Sswilt Sswilp Sswilh Sswim Sswib Sswibs Sswis Sswiss Sswing Sswij Sswich Sswik Sswit Sswip Sswih Ssyu Ssyug Ssyukk Ssyugs Ssyun Ssyunj Ssyunh Ssyud Ssyul Ssyulg Ssyulm Ssyulb Ssyuls Ssyult Ssyulp Ssyulh Ssyum Ssyub Ssyubs Ssyus Ssyuss Ssyung Ssyuj Ssyuch Ssyuk Ssyut Ssyup Ssyuh Sseu Sseug Sseukk Sseugs Sseun Sseunj Sseunh Sseud Sseul Sseulg Sseulm Sseulb Sseuls Sseult Sseulp Sseulh'; + case 197: + return 'Sseum Sseub Sseubs Sseus Sseuss Sseung Sseuj Sseuch Sseuk Sseut Sseup Sseuh Ssui Ssuig Ssuikk Ssuigs Ssuin Ssuinj Ssuinh Ssuid Ssuil Ssuilg Ssuilm Ssuilb Ssuils Ssuilt Ssuilp Ssuilh Ssuim Ssuib Ssuibs Ssuis Ssuiss Ssuing Ssuij Ssuich Ssuik Ssuit Ssuip Ssuih Ssi Ssig Ssikk Ssigs Ssin Ssinj Ssinh Ssid Ssil Ssilg Ssilm Ssilb Ssils Ssilt Ssilp Ssilh Ssim Ssib Ssibs Ssis Ssiss Ssing Ssij Ssich Ssik Ssit Ssip Ssih A Ag Akk Ags An Anj Anh Ad Al Alg Alm Alb Als Alt Alp Alh Am Ab Abs As Ass Ang Aj Ach Ak At Ap Ah Ae Aeg Aekk Aegs Aen Aenj Aenh Aed Ael Aelg Aelm Aelb Aels Aelt Aelp Aelh Aem Aeb Aebs Aes Aess Aeng Aej Aech Aek Aet Aep Aeh Ya Yag Yakk Yags Yan Yanj Yanh Yad Yal Yalg Yalm Yalb Yals Yalt Yalp Yalh Yam Yab Yabs Yas Yass Yang Yaj Yach Yak Yat Yap Yah Yae Yaeg Yaekk Yaegs Yaen Yaenj Yaenh Yaed Yael Yaelg Yaelm Yaelb Yaels Yaelt Yaelp Yaelh Yaem Yaeb Yaebs Yaes Yaess Yaeng Yaej Yaech Yaek Yaet Yaep Yaeh Eo Eog Eokk Eogs Eon Eonj Eonh Eod Eol Eolg Eolm Eolb Eols Eolt Eolp Eolh Eom Eob Eobs Eos Eoss Eong Eoj Eoch Eok Eot Eop Eoh E Eg Ekk Egs En Enj Enh Ed El Elg Elm Elb Els Elt Elp Elh Em Eb Ebs Es Ess Eng Ej Ech Ek Et Ep Eh Yeo Yeog Yeokk Yeogs Yeon Yeonj Yeonh Yeod Yeol Yeolg Yeolm Yeolb Yeols Yeolt Yeolp Yeolh Yeom Yeob Yeobs Yeos'; + case 198: + return 'Yeoss Yeong Yeoj Yeoch Yeok Yeot Yeop Yeoh Ye Yeg Yekk Yegs Yen Yenj Yenh Yed Yel Yelg Yelm Yelb Yels Yelt Yelp Yelh Yem Yeb Yebs Yes Yess Yeng Yej Yech Yek Yet Yep Yeh O Og Okk Ogs On Onj Onh Od Ol Olg Olm Olb Ols Olt Olp Olh Om Ob Obs Os Oss Ong Oj Och Ok Ot Op Oh Wa Wag Wakk Wags Wan Wanj Wanh Wad Wal Walg Walm Walb Wals Walt Walp Walh Wam Wab Wabs Was Wass Wang Waj Wach Wak Wat Wap Wah Wae Waeg Waekk Waegs Waen Waenj Waenh Waed Wael Waelg Waelm Waelb Waels Waelt Waelp Waelh Waem Waeb Waebs Waes Waess Waeng Waej Waech Waek Waet Waep Waeh Oe Oeg Oekk Oegs Oen Oenj Oenh Oed Oel Oelg Oelm Oelb Oels Oelt Oelp Oelh Oem Oeb Oebs Oes Oess Oeng Oej Oech Oek Oet Oep Oeh Yo Yog Yokk Yogs Yon Yonj Yonh Yod Yol Yolg Yolm Yolb Yols Yolt Yolp Yolh Yom Yob Yobs Yos Yoss Yong Yoj Yoch Yok Yot Yop Yoh U Ug Ukk Ugs Un Unj Unh Ud Ul Ulg Ulm Ulb Uls Ult Ulp Ulh Um Ub Ubs Us Uss Ung Uj Uch Uk Ut Up Uh Wo Wog Wokk Wogs Won Wonj Wonh Wod Wol Wolg Wolm Wolb Wols Wolt Wolp Wolh Wom Wob Wobs Wos Woss Wong Woj Woch Wok Wot Wop Woh We Weg Wekk Wegs Wen Wenj Wenh Wed Wel Welg Welm Welb Wels Welt Welp Welh Wem Web Webs Wes Wess Weng Wej Wech'; + case 199: + return 'Wek Wet Wep Weh Wi Wig Wikk Wigs Win Winj Winh Wid Wil Wilg Wilm Wilb Wils Wilt Wilp Wilh Wim Wib Wibs Wis Wiss Wing Wij Wich Wik Wit Wip Wih Yu Yug Yukk Yugs Yun Yunj Yunh Yud Yul Yulg Yulm Yulb Yuls Yult Yulp Yulh Yum Yub Yubs Yus Yuss Yung Yuj Yuch Yuk Yut Yup Yuh Eu Eug Eukk Eugs Eun Eunj Eunh Eud Eul Eulg Eulm Eulb Euls Eult Eulp Eulh Eum Eub Eubs Eus Euss Eung Euj Euch Euk Eut Eup Euh Ui Uig Uikk Uigs Uin Uinj Uinh Uid Uil Uilg Uilm Uilb Uils Uilt Uilp Uilh Uim Uib Uibs Uis Uiss Uing Uij Uich Uik Uit Uip Uih I Ig Ikk Igs In Inj Inh Id Il Ilg Ilm Ilb Ils Ilt Ilp Ilh Im Ib Ibs Is Iss Ing Ij Ich Ik It Ip Ih Ja Jag Jakk Jags Jan Janj Janh Jad Jal Jalg Jalm Jalb Jals Jalt Jalp Jalh Jam Jab Jabs Jas Jass Jang Jaj Jach Jak Jat Jap Jah Jae Jaeg Jaekk Jaegs Jaen Jaenj Jaenh Jaed Jael Jaelg Jaelm Jaelb Jaels Jaelt Jaelp Jaelh Jaem Jaeb Jaebs Jaes Jaess Jaeng Jaej Jaech Jaek Jaet Jaep Jaeh Jya Jyag Jyakk Jyags Jyan Jyanj Jyanh Jyad Jyal Jyalg Jyalm Jyalb Jyals Jyalt Jyalp Jyalh Jyam Jyab Jyabs Jyas Jyass Jyang Jyaj Jyach Jyak Jyat Jyap Jyah Jyae Jyaeg Jyaekk Jyaegs Jyaen Jyaenj Jyaenh Jyaed Jyael Jyaelg Jyaelm Jyaelb Jyaels Jyaelt Jyaelp Jyaelh Jyaem Jyaeb Jyaebs Jyaes Jyaess Jyaeng Jyaej Jyaech Jyaek Jyaet Jyaep Jyaeh'; + case 200: + return 'Jeo Jeog Jeokk Jeogs Jeon Jeonj Jeonh Jeod Jeol Jeolg Jeolm Jeolb Jeols Jeolt Jeolp Jeolh Jeom Jeob Jeobs Jeos Jeoss Jeong Jeoj Jeoch Jeok Jeot Jeop Jeoh Je Jeg Jekk Jegs Jen Jenj Jenh Jed Jel Jelg Jelm Jelb Jels Jelt Jelp Jelh Jem Jeb Jebs Jes Jess Jeng Jej Jech Jek Jet Jep Jeh Jyeo Jyeog Jyeokk Jyeogs Jyeon Jyeonj Jyeonh Jyeod Jyeol Jyeolg Jyeolm Jyeolb Jyeols Jyeolt Jyeolp Jyeolh Jyeom Jyeob Jyeobs Jyeos Jyeoss Jyeong Jyeoj Jyeoch Jyeok Jyeot Jyeop Jyeoh Jye Jyeg Jyekk Jyegs Jyen Jyenj Jyenh Jyed Jyel Jyelg Jyelm Jyelb Jyels Jyelt Jyelp Jyelh Jyem Jyeb Jyebs Jyes Jyess Jyeng Jyej Jyech Jyek Jyet Jyep Jyeh Jo Jog Jokk Jogs Jon Jonj Jonh Jod Jol Jolg Jolm Jolb Jols Jolt Jolp Jolh Jom Job Jobs Jos Joss Jong Joj Joch Jok Jot Jop Joh Jwa Jwag Jwakk Jwags Jwan Jwanj Jwanh Jwad Jwal Jwalg Jwalm Jwalb Jwals Jwalt Jwalp Jwalh Jwam Jwab Jwabs Jwas Jwass Jwang Jwaj Jwach Jwak Jwat Jwap Jwah Jwae Jwaeg Jwaekk Jwaegs Jwaen Jwaenj Jwaenh Jwaed Jwael Jwaelg Jwaelm Jwaelb Jwaels Jwaelt Jwaelp Jwaelh Jwaem Jwaeb Jwaebs Jwaes Jwaess Jwaeng Jwaej Jwaech Jwaek Jwaet Jwaep Jwaeh Joe Joeg Joekk Joegs Joen Joenj Joenh Joed Joel Joelg Joelm Joelb Joels Joelt Joelp Joelh Joem Joeb Joebs Joes Joess Joeng Joej Joech Joek Joet Joep Joeh Jyo Jyog Jyokk Jyogs Jyon Jyonj Jyonh Jyod Jyol Jyolg Jyolm Jyolb Jyols Jyolt Jyolp Jyolh Jyom Jyob Jyobs Jyos Jyoss Jyong Jyoj Jyoch Jyok Jyot Jyop Jyoh Ju Jug Jukk Jugs'; + case 201: + return 'Jun Junj Junh Jud Jul Julg Julm Julb Juls Jult Julp Julh Jum Jub Jubs Jus Juss Jung Juj Juch Juk Jut Jup Juh Jwo Jwog Jwokk Jwogs Jwon Jwonj Jwonh Jwod Jwol Jwolg Jwolm Jwolb Jwols Jwolt Jwolp Jwolh Jwom Jwob Jwobs Jwos Jwoss Jwong Jwoj Jwoch Jwok Jwot Jwop Jwoh Jwe Jweg Jwekk Jwegs Jwen Jwenj Jwenh Jwed Jwel Jwelg Jwelm Jwelb Jwels Jwelt Jwelp Jwelh Jwem Jweb Jwebs Jwes Jwess Jweng Jwej Jwech Jwek Jwet Jwep Jweh Jwi Jwig Jwikk Jwigs Jwin Jwinj Jwinh Jwid Jwil Jwilg Jwilm Jwilb Jwils Jwilt Jwilp Jwilh Jwim Jwib Jwibs Jwis Jwiss Jwing Jwij Jwich Jwik Jwit Jwip Jwih Jyu Jyug Jyukk Jyugs Jyun Jyunj Jyunh Jyud Jyul Jyulg Jyulm Jyulb Jyuls Jyult Jyulp Jyulh Jyum Jyub Jyubs Jyus Jyuss Jyung Jyuj Jyuch Jyuk Jyut Jyup Jyuh Jeu Jeug Jeukk Jeugs Jeun Jeunj Jeunh Jeud Jeul Jeulg Jeulm Jeulb Jeuls Jeult Jeulp Jeulh Jeum Jeub Jeubs Jeus Jeuss Jeung Jeuj Jeuch Jeuk Jeut Jeup Jeuh Jui Juig Juikk Juigs Juin Juinj Juinh Juid Juil Juilg Juilm Juilb Juils Juilt Juilp Juilh Juim Juib Juibs Juis Juiss Juing Juij Juich Juik Juit Juip Juih Ji Jig Jikk Jigs Jin Jinj Jinh Jid Jil Jilg Jilm Jilb Jils Jilt Jilp Jilh Jim Jib Jibs Jis Jiss Jing Jij Jich Jik Jit Jip Jih Jja Jjag Jjakk Jjags Jjan Jjanj Jjanh Jjad Jjal Jjalg Jjalm Jjalb Jjals Jjalt Jjalp Jjalh Jjam Jjab Jjabs Jjas Jjass Jjang Jjaj Jjach Jjak Jjat Jjap Jjah Jjae Jjaeg Jjaekk Jjaegs Jjaen Jjaenj Jjaenh Jjaed'; + case 202: + return 'Jjael Jjaelg Jjaelm Jjaelb Jjaels Jjaelt Jjaelp Jjaelh Jjaem Jjaeb Jjaebs Jjaes Jjaess Jjaeng Jjaej Jjaech Jjaek Jjaet Jjaep Jjaeh Jjya Jjyag Jjyakk Jjyags Jjyan Jjyanj Jjyanh Jjyad Jjyal Jjyalg Jjyalm Jjyalb Jjyals Jjyalt Jjyalp Jjyalh Jjyam Jjyab Jjyabs Jjyas Jjyass Jjyang Jjyaj Jjyach Jjyak Jjyat Jjyap Jjyah Jjyae Jjyaeg Jjyaekk Jjyaegs Jjyaen Jjyaenj Jjyaenh Jjyaed Jjyael Jjyaelg Jjyaelm Jjyaelb Jjyaels Jjyaelt Jjyaelp Jjyaelh Jjyaem Jjyaeb Jjyaebs Jjyaes Jjyaess Jjyaeng Jjyaej Jjyaech Jjyaek Jjyaet Jjyaep Jjyaeh Jjeo Jjeog Jjeokk Jjeogs Jjeon Jjeonj Jjeonh Jjeod Jjeol Jjeolg Jjeolm Jjeolb Jjeols Jjeolt Jjeolp Jjeolh Jjeom Jjeob Jjeobs Jjeos Jjeoss Jjeong Jjeoj Jjeoch Jjeok Jjeot Jjeop Jjeoh Jje Jjeg Jjekk Jjegs Jjen Jjenj Jjenh Jjed Jjel Jjelg Jjelm Jjelb Jjels Jjelt Jjelp Jjelh Jjem Jjeb Jjebs Jjes Jjess Jjeng Jjej Jjech Jjek Jjet Jjep Jjeh Jjyeo Jjyeog Jjyeokk Jjyeogs Jjyeon Jjyeonj Jjyeonh Jjyeod Jjyeol Jjyeolg Jjyeolm Jjyeolb Jjyeols Jjyeolt Jjyeolp Jjyeolh Jjyeom Jjyeob Jjyeobs Jjyeos Jjyeoss Jjyeong Jjyeoj Jjyeoch Jjyeok Jjyeot Jjyeop Jjyeoh Jjye Jjyeg Jjyekk Jjyegs Jjyen Jjyenj Jjyenh Jjyed Jjyel Jjyelg Jjyelm Jjyelb Jjyels Jjyelt Jjyelp Jjyelh Jjyem Jjyeb Jjyebs Jjyes Jjyess Jjyeng Jjyej Jjyech Jjyek Jjyet Jjyep Jjyeh Jjo Jjog Jjokk Jjogs Jjon Jjonj Jjonh Jjod Jjol Jjolg Jjolm Jjolb Jjols Jjolt Jjolp Jjolh Jjom Jjob Jjobs Jjos Jjoss Jjong Jjoj Jjoch Jjok Jjot Jjop Jjoh Jjwa Jjwag Jjwakk Jjwags Jjwan Jjwanj Jjwanh Jjwad Jjwal Jjwalg Jjwalm Jjwalb Jjwals Jjwalt Jjwalp Jjwalh Jjwam Jjwab Jjwabs Jjwas Jjwass Jjwang Jjwaj Jjwach Jjwak Jjwat Jjwap Jjwah Jjwae Jjwaeg Jjwaekk Jjwaegs Jjwaen Jjwaenj Jjwaenh Jjwaed Jjwael Jjwaelg Jjwaelm Jjwaelb'; + case 203: + return 'Jjwaels Jjwaelt Jjwaelp Jjwaelh Jjwaem Jjwaeb Jjwaebs Jjwaes Jjwaess Jjwaeng Jjwaej Jjwaech Jjwaek Jjwaet Jjwaep Jjwaeh Jjoe Jjoeg Jjoekk Jjoegs Jjoen Jjoenj Jjoenh Jjoed Jjoel Jjoelg Jjoelm Jjoelb Jjoels Jjoelt Jjoelp Jjoelh Jjoem Jjoeb Jjoebs Jjoes Jjoess Jjoeng Jjoej Jjoech Jjoek Jjoet Jjoep Jjoeh Jjyo Jjyog Jjyokk Jjyogs Jjyon Jjyonj Jjyonh Jjyod Jjyol Jjyolg Jjyolm Jjyolb Jjyols Jjyolt Jjyolp Jjyolh Jjyom Jjyob Jjyobs Jjyos Jjyoss Jjyong Jjyoj Jjyoch Jjyok Jjyot Jjyop Jjyoh Jju Jjug Jjukk Jjugs Jjun Jjunj Jjunh Jjud Jjul Jjulg Jjulm Jjulb Jjuls Jjult Jjulp Jjulh Jjum Jjub Jjubs Jjus Jjuss Jjung Jjuj Jjuch Jjuk Jjut Jjup Jjuh Jjwo Jjwog Jjwokk Jjwogs Jjwon Jjwonj Jjwonh Jjwod Jjwol Jjwolg Jjwolm Jjwolb Jjwols Jjwolt Jjwolp Jjwolh Jjwom Jjwob Jjwobs Jjwos Jjwoss Jjwong Jjwoj Jjwoch Jjwok Jjwot Jjwop Jjwoh Jjwe Jjweg Jjwekk Jjwegs Jjwen Jjwenj Jjwenh Jjwed Jjwel Jjwelg Jjwelm Jjwelb Jjwels Jjwelt Jjwelp Jjwelh Jjwem Jjweb Jjwebs Jjwes Jjwess Jjweng Jjwej Jjwech Jjwek Jjwet Jjwep Jjweh Jjwi Jjwig Jjwikk Jjwigs Jjwin Jjwinj Jjwinh Jjwid Jjwil Jjwilg Jjwilm Jjwilb Jjwils Jjwilt Jjwilp Jjwilh Jjwim Jjwib Jjwibs Jjwis Jjwiss Jjwing Jjwij Jjwich Jjwik Jjwit Jjwip Jjwih Jjyu Jjyug Jjyukk Jjyugs Jjyun Jjyunj Jjyunh Jjyud Jjyul Jjyulg Jjyulm Jjyulb Jjyuls Jjyult Jjyulp Jjyulh Jjyum Jjyub Jjyubs Jjyus Jjyuss Jjyung Jjyuj Jjyuch Jjyuk Jjyut Jjyup Jjyuh Jjeu Jjeug Jjeukk Jjeugs Jjeun Jjeunj Jjeunh Jjeud Jjeul Jjeulg Jjeulm Jjeulb Jjeuls Jjeult Jjeulp Jjeulh Jjeum Jjeub Jjeubs Jjeus Jjeuss Jjeung Jjeuj Jjeuch Jjeuk Jjeut Jjeup Jjeuh Jjui Jjuig Jjuikk Jjuigs Jjuin Jjuinj Jjuinh Jjuid Jjuil Jjuilg Jjuilm Jjuilb Jjuils Jjuilt Jjuilp Jjuilh'; + case 204: + return 'Jjuim Jjuib Jjuibs Jjuis Jjuiss Jjuing Jjuij Jjuich Jjuik Jjuit Jjuip Jjuih Jji Jjig Jjikk Jjigs Jjin Jjinj Jjinh Jjid Jjil Jjilg Jjilm Jjilb Jjils Jjilt Jjilp Jjilh Jjim Jjib Jjibs Jjis Jjiss Jjing Jjij Jjich Jjik Jjit Jjip Jjih Cha Chag Chakk Chags Chan Chanj Chanh Chad Chal Chalg Chalm Chalb Chals Chalt Chalp Chalh Cham Chab Chabs Chas Chass Chang Chaj Chach Chak Chat Chap Chah Chae Chaeg Chaekk Chaegs Chaen Chaenj Chaenh Chaed Chael Chaelg Chaelm Chaelb Chaels Chaelt Chaelp Chaelh Chaem Chaeb Chaebs Chaes Chaess Chaeng Chaej Chaech Chaek Chaet Chaep Chaeh Chya Chyag Chyakk Chyags Chyan Chyanj Chyanh Chyad Chyal Chyalg Chyalm Chyalb Chyals Chyalt Chyalp Chyalh Chyam Chyab Chyabs Chyas Chyass Chyang Chyaj Chyach Chyak Chyat Chyap Chyah Chyae Chyaeg Chyaekk Chyaegs Chyaen Chyaenj Chyaenh Chyaed Chyael Chyaelg Chyaelm Chyaelb Chyaels Chyaelt Chyaelp Chyaelh Chyaem Chyaeb Chyaebs Chyaes Chyaess Chyaeng Chyaej Chyaech Chyaek Chyaet Chyaep Chyaeh Cheo Cheog Cheokk Cheogs Cheon Cheonj Cheonh Cheod Cheol Cheolg Cheolm Cheolb Cheols Cheolt Cheolp Cheolh Cheom Cheob Cheobs Cheos Cheoss Cheong Cheoj Cheoch Cheok Cheot Cheop Cheoh Che Cheg Chekk Chegs Chen Chenj Chenh Ched Chel Chelg Chelm Chelb Chels Chelt Chelp Chelh Chem Cheb Chebs Ches Chess Cheng Chej Chech Chek Chet Chep Cheh Chyeo Chyeog Chyeokk Chyeogs Chyeon Chyeonj Chyeonh Chyeod Chyeol Chyeolg Chyeolm Chyeolb Chyeols Chyeolt Chyeolp Chyeolh Chyeom Chyeob Chyeobs Chyeos Chyeoss Chyeong Chyeoj Chyeoch Chyeok Chyeot Chyeop Chyeoh Chye Chyeg Chyekk Chyegs Chyen Chyenj Chyenh Chyed Chyel Chyelg Chyelm Chyelb Chyels Chyelt Chyelp Chyelh Chyem Chyeb Chyebs Chyes'; + case 205: + return 'Chyess Chyeng Chyej Chyech Chyek Chyet Chyep Chyeh Cho Chog Chokk Chogs Chon Chonj Chonh Chod Chol Cholg Cholm Cholb Chols Cholt Cholp Cholh Chom Chob Chobs Chos Choss Chong Choj Choch Chok Chot Chop Choh Chwa Chwag Chwakk Chwags Chwan Chwanj Chwanh Chwad Chwal Chwalg Chwalm Chwalb Chwals Chwalt Chwalp Chwalh Chwam Chwab Chwabs Chwas Chwass Chwang Chwaj Chwach Chwak Chwat Chwap Chwah Chwae Chwaeg Chwaekk Chwaegs Chwaen Chwaenj Chwaenh Chwaed Chwael Chwaelg Chwaelm Chwaelb Chwaels Chwaelt Chwaelp Chwaelh Chwaem Chwaeb Chwaebs Chwaes Chwaess Chwaeng Chwaej Chwaech Chwaek Chwaet Chwaep Chwaeh Choe Choeg Choekk Choegs Choen Choenj Choenh Choed Choel Choelg Choelm Choelb Choels Choelt Choelp Choelh Choem Choeb Choebs Choes Choess Choeng Choej Choech Choek Choet Choep Choeh Chyo Chyog Chyokk Chyogs Chyon Chyonj Chyonh Chyod Chyol Chyolg Chyolm Chyolb Chyols Chyolt Chyolp Chyolh Chyom Chyob Chyobs Chyos Chyoss Chyong Chyoj Chyoch Chyok Chyot Chyop Chyoh Chu Chug Chukk Chugs Chun Chunj Chunh Chud Chul Chulg Chulm Chulb Chuls Chult Chulp Chulh Chum Chub Chubs Chus Chuss Chung Chuj Chuch Chuk Chut Chup Chuh Chwo Chwog Chwokk Chwogs Chwon Chwonj Chwonh Chwod Chwol Chwolg Chwolm Chwolb Chwols Chwolt Chwolp Chwolh Chwom Chwob Chwobs Chwos Chwoss Chwong Chwoj Chwoch Chwok Chwot Chwop Chwoh Chwe Chweg Chwekk Chwegs Chwen Chwenj Chwenh Chwed Chwel Chwelg Chwelm Chwelb Chwels Chwelt Chwelp Chwelh Chwem Chweb Chwebs Chwes Chwess Chweng Chwej Chwech Chwek Chwet Chwep Chweh Chwi Chwig Chwikk Chwigs Chwin Chwinj Chwinh Chwid Chwil Chwilg Chwilm Chwilb Chwils Chwilt Chwilp Chwilh Chwim Chwib Chwibs Chwis Chwiss Chwing Chwij Chwich'; + case 206: + return 'Chwik Chwit Chwip Chwih Chyu Chyug Chyukk Chyugs Chyun Chyunj Chyunh Chyud Chyul Chyulg Chyulm Chyulb Chyuls Chyult Chyulp Chyulh Chyum Chyub Chyubs Chyus Chyuss Chyung Chyuj Chyuch Chyuk Chyut Chyup Chyuh Cheu Cheug Cheukk Cheugs Cheun Cheunj Cheunh Cheud Cheul Cheulg Cheulm Cheulb Cheuls Cheult Cheulp Cheulh Cheum Cheub Cheubs Cheus Cheuss Cheung Cheuj Cheuch Cheuk Cheut Cheup Cheuh Chui Chuig Chuikk Chuigs Chuin Chuinj Chuinh Chuid Chuil Chuilg Chuilm Chuilb Chuils Chuilt Chuilp Chuilh Chuim Chuib Chuibs Chuis Chuiss Chuing Chuij Chuich Chuik Chuit Chuip Chuih Chi Chig Chikk Chigs Chin Chinj Chinh Chid Chil Chilg Chilm Chilb Chils Chilt Chilp Chilh Chim Chib Chibs Chis Chiss Ching Chij Chich Chik Chit Chip Chih Ka Kag Kakk Kags Kan Kanj Kanh Kad Kal Kalg Kalm Kalb Kals Kalt Kalp Kalh Kam Kab Kabs Kas Kass Kang Kaj Kach Kak Kat Kap Kah Kae Kaeg Kaekk Kaegs Kaen Kaenj Kaenh Kaed Kael Kaelg Kaelm Kaelb Kaels Kaelt Kaelp Kaelh Kaem Kaeb Kaebs Kaes Kaess Kaeng Kaej Kaech Kaek Kaet Kaep Kaeh Kya Kyag Kyakk Kyags Kyan Kyanj Kyanh Kyad Kyal Kyalg Kyalm Kyalb Kyals Kyalt Kyalp Kyalh Kyam Kyab Kyabs Kyas Kyass Kyang Kyaj Kyach Kyak Kyat Kyap Kyah Kyae Kyaeg Kyaekk Kyaegs Kyaen Kyaenj Kyaenh Kyaed Kyael Kyaelg Kyaelm Kyaelb Kyaels Kyaelt Kyaelp Kyaelh Kyaem Kyaeb Kyaebs Kyaes Kyaess Kyaeng Kyaej Kyaech Kyaek Kyaet Kyaep Kyaeh Keo Keog Keokk Keogs Keon Keonj Keonh Keod Keol Keolg Keolm Keolb Keols Keolt Keolp Keolh Keom Keob Keobs Keos Keoss Keong Keoj Keoch Keok Keot Keop Keoh'; + case 207: + return 'Ke Keg Kekk Kegs Ken Kenj Kenh Ked Kel Kelg Kelm Kelb Kels Kelt Kelp Kelh Kem Keb Kebs Kes Kess Keng Kej Kech Kek Ket Kep Keh Kyeo Kyeog Kyeokk Kyeogs Kyeon Kyeonj Kyeonh Kyeod Kyeol Kyeolg Kyeolm Kyeolb Kyeols Kyeolt Kyeolp Kyeolh Kyeom Kyeob Kyeobs Kyeos Kyeoss Kyeong Kyeoj Kyeoch Kyeok Kyeot Kyeop Kyeoh Kye Kyeg Kyekk Kyegs Kyen Kyenj Kyenh Kyed Kyel Kyelg Kyelm Kyelb Kyels Kyelt Kyelp Kyelh Kyem Kyeb Kyebs Kyes Kyess Kyeng Kyej Kyech Kyek Kyet Kyep Kyeh Ko Kog Kokk Kogs Kon Konj Konh Kod Kol Kolg Kolm Kolb Kols Kolt Kolp Kolh Kom Kob Kobs Kos Koss Kong Koj Koch Kok Kot Kop Koh Kwa Kwag Kwakk Kwags Kwan Kwanj Kwanh Kwad Kwal Kwalg Kwalm Kwalb Kwals Kwalt Kwalp Kwalh Kwam Kwab Kwabs Kwas Kwass Kwang Kwaj Kwach Kwak Kwat Kwap Kwah Kwae Kwaeg Kwaekk Kwaegs Kwaen Kwaenj Kwaenh Kwaed Kwael Kwaelg Kwaelm Kwaelb Kwaels Kwaelt Kwaelp Kwaelh Kwaem Kwaeb Kwaebs Kwaes Kwaess Kwaeng Kwaej Kwaech Kwaek Kwaet Kwaep Kwaeh Koe Koeg Koekk Koegs Koen Koenj Koenh Koed Koel Koelg Koelm Koelb Koels Koelt Koelp Koelh Koem Koeb Koebs Koes Koess Koeng Koej Koech Koek Koet Koep Koeh Kyo Kyog Kyokk Kyogs Kyon Kyonj Kyonh Kyod Kyol Kyolg Kyolm Kyolb Kyols Kyolt Kyolp Kyolh Kyom Kyob Kyobs Kyos Kyoss Kyong Kyoj Kyoch Kyok Kyot Kyop Kyoh Ku Kug Kukk Kugs Kun Kunj Kunh Kud Kul Kulg Kulm Kulb Kuls Kult Kulp Kulh Kum Kub Kubs Kus Kuss Kung Kuj Kuch Kuk Kut Kup Kuh Kwo Kwog Kwokk Kwogs'; + case 208: + return 'Kwon Kwonj Kwonh Kwod Kwol Kwolg Kwolm Kwolb Kwols Kwolt Kwolp Kwolh Kwom Kwob Kwobs Kwos Kwoss Kwong Kwoj Kwoch Kwok Kwot Kwop Kwoh Kwe Kweg Kwekk Kwegs Kwen Kwenj Kwenh Kwed Kwel Kwelg Kwelm Kwelb Kwels Kwelt Kwelp Kwelh Kwem Kweb Kwebs Kwes Kwess Kweng Kwej Kwech Kwek Kwet Kwep Kweh Kwi Kwig Kwikk Kwigs Kwin Kwinj Kwinh Kwid Kwil Kwilg Kwilm Kwilb Kwils Kwilt Kwilp Kwilh Kwim Kwib Kwibs Kwis Kwiss Kwing Kwij Kwich Kwik Kwit Kwip Kwih Kyu Kyug Kyukk Kyugs Kyun Kyunj Kyunh Kyud Kyul Kyulg Kyulm Kyulb Kyuls Kyult Kyulp Kyulh Kyum Kyub Kyubs Kyus Kyuss Kyung Kyuj Kyuch Kyuk Kyut Kyup Kyuh Keu Keug Keukk Keugs Keun Keunj Keunh Keud Keul Keulg Keulm Keulb Keuls Keult Keulp Keulh Keum Keub Keubs Keus Keuss Keung Keuj Keuch Keuk Keut Keup Keuh Kui Kuig Kuikk Kuigs Kuin Kuinj Kuinh Kuid Kuil Kuilg Kuilm Kuilb Kuils Kuilt Kuilp Kuilh Kuim Kuib Kuibs Kuis Kuiss Kuing Kuij Kuich Kuik Kuit Kuip Kuih Ki Kig Kikk Kigs Kin Kinj Kinh Kid Kil Kilg Kilm Kilb Kils Kilt Kilp Kilh Kim Kib Kibs Kis Kiss King Kij Kich Kik Kit Kip Kih Ta Tag Takk Tags Tan Tanj Tanh Tad Tal Talg Talm Talb Tals Talt Talp Talh Tam Tab Tabs Tas Tass Tang Taj Tach Tak Tat Tap Tah Tae Taeg Taekk Taegs Taen Taenj Taenh Taed Tael Taelg Taelm Taelb Taels Taelt Taelp Taelh Taem Taeb Taebs Taes Taess Taeng Taej Taech Taek Taet Taep Taeh Tya Tyag Tyakk Tyags Tyan Tyanj Tyanh Tyad'; + case 209: + return 'Tyal Tyalg Tyalm Tyalb Tyals Tyalt Tyalp Tyalh Tyam Tyab Tyabs Tyas Tyass Tyang Tyaj Tyach Tyak Tyat Tyap Tyah Tyae Tyaeg Tyaekk Tyaegs Tyaen Tyaenj Tyaenh Tyaed Tyael Tyaelg Tyaelm Tyaelb Tyaels Tyaelt Tyaelp Tyaelh Tyaem Tyaeb Tyaebs Tyaes Tyaess Tyaeng Tyaej Tyaech Tyaek Tyaet Tyaep Tyaeh Teo Teog Teokk Teogs Teon Teonj Teonh Teod Teol Teolg Teolm Teolb Teols Teolt Teolp Teolh Teom Teob Teobs Teos Teoss Teong Teoj Teoch Teok Teot Teop Teoh Te Teg Tekk Tegs Ten Tenj Tenh Ted Tel Telg Telm Telb Tels Telt Telp Telh Tem Teb Tebs Tes Tess Teng Tej Tech Tek Tet Tep Teh Tyeo Tyeog Tyeokk Tyeogs Tyeon Tyeonj Tyeonh Tyeod Tyeol Tyeolg Tyeolm Tyeolb Tyeols Tyeolt Tyeolp Tyeolh Tyeom Tyeob Tyeobs Tyeos Tyeoss Tyeong Tyeoj Tyeoch Tyeok Tyeot Tyeop Tyeoh Tye Tyeg Tyekk Tyegs Tyen Tyenj Tyenh Tyed Tyel Tyelg Tyelm Tyelb Tyels Tyelt Tyelp Tyelh Tyem Tyeb Tyebs Tyes Tyess Tyeng Tyej Tyech Tyek Tyet Tyep Tyeh To Tog Tokk Togs Ton Tonj Tonh Tod Tol Tolg Tolm Tolb Tols Tolt Tolp Tolh Tom Tob Tobs Tos Toss Tong Toj Toch Tok Tot Top Toh Twa Twag Twakk Twags Twan Twanj Twanh Twad Twal Twalg Twalm Twalb Twals Twalt Twalp Twalh Twam Twab Twabs Twas Twass Twang Twaj Twach Twak Twat Twap Twah Twae Twaeg Twaekk Twaegs Twaen Twaenj Twaenh Twaed Twael Twaelg Twaelm Twaelb Twaels Twaelt Twaelp Twaelh Twaem Twaeb Twaebs Twaes Twaess Twaeng Twaej Twaech Twaek Twaet Twaep Twaeh Toe Toeg Toekk Toegs Toen Toenj Toenh Toed Toel Toelg Toelm Toelb'; + case 210: + return 'Toels Toelt Toelp Toelh Toem Toeb Toebs Toes Toess Toeng Toej Toech Toek Toet Toep Toeh Tyo Tyog Tyokk Tyogs Tyon Tyonj Tyonh Tyod Tyol Tyolg Tyolm Tyolb Tyols Tyolt Tyolp Tyolh Tyom Tyob Tyobs Tyos Tyoss Tyong Tyoj Tyoch Tyok Tyot Tyop Tyoh Tu Tug Tukk Tugs Tun Tunj Tunh Tud Tul Tulg Tulm Tulb Tuls Tult Tulp Tulh Tum Tub Tubs Tus Tuss Tung Tuj Tuch Tuk Tut Tup Tuh Two Twog Twokk Twogs Twon Twonj Twonh Twod Twol Twolg Twolm Twolb Twols Twolt Twolp Twolh Twom Twob Twobs Twos Twoss Twong Twoj Twoch Twok Twot Twop Twoh Twe Tweg Twekk Twegs Twen Twenj Twenh Twed Twel Twelg Twelm Twelb Twels Twelt Twelp Twelh Twem Tweb Twebs Twes Twess Tweng Twej Twech Twek Twet Twep Tweh Twi Twig Twikk Twigs Twin Twinj Twinh Twid Twil Twilg Twilm Twilb Twils Twilt Twilp Twilh Twim Twib Twibs Twis Twiss Twing Twij Twich Twik Twit Twip Twih Tyu Tyug Tyukk Tyugs Tyun Tyunj Tyunh Tyud Tyul Tyulg Tyulm Tyulb Tyuls Tyult Tyulp Tyulh Tyum Tyub Tyubs Tyus Tyuss Tyung Tyuj Tyuch Tyuk Tyut Tyup Tyuh Teu Teug Teukk Teugs Teun Teunj Teunh Teud Teul Teulg Teulm Teulb Teuls Teult Teulp Teulh Teum Teub Teubs Teus Teuss Teung Teuj Teuch Teuk Teut Teup Teuh Tui Tuig Tuikk Tuigs Tuin Tuinj Tuinh Tuid Tuil Tuilg Tuilm Tuilb Tuils Tuilt Tuilp Tuilh Tuim Tuib Tuibs Tuis Tuiss Tuing Tuij Tuich Tuik Tuit Tuip Tuih Ti Tig Tikk Tigs Tin Tinj Tinh Tid Til Tilg Tilm Tilb Tils Tilt Tilp Tilh'; + case 211: + return 'Tim Tib Tibs Tis Tiss Ting Tij Tich Tik Tit Tip Tih Pa Pag Pakk Pags Pan Panj Panh Pad Pal Palg Palm Palb Pals Palt Palp Palh Pam Pab Pabs Pas Pass Pang Paj Pach Pak Pat Pap Pah Pae Paeg Paekk Paegs Paen Paenj Paenh Paed Pael Paelg Paelm Paelb Paels Paelt Paelp Paelh Paem Paeb Paebs Paes Paess Paeng Paej Paech Paek Paet Paep Paeh Pya Pyag Pyakk Pyags Pyan Pyanj Pyanh Pyad Pyal Pyalg Pyalm Pyalb Pyals Pyalt Pyalp Pyalh Pyam Pyab Pyabs Pyas Pyass Pyang Pyaj Pyach Pyak Pyat Pyap Pyah Pyae Pyaeg Pyaekk Pyaegs Pyaen Pyaenj Pyaenh Pyaed Pyael Pyaelg Pyaelm Pyaelb Pyaels Pyaelt Pyaelp Pyaelh Pyaem Pyaeb Pyaebs Pyaes Pyaess Pyaeng Pyaej Pyaech Pyaek Pyaet Pyaep Pyaeh Peo Peog Peokk Peogs Peon Peonj Peonh Peod Peol Peolg Peolm Peolb Peols Peolt Peolp Peolh Peom Peob Peobs Peos Peoss Peong Peoj Peoch Peok Peot Peop Peoh Pe Peg Pekk Pegs Pen Penj Penh Ped Pel Pelg Pelm Pelb Pels Pelt Pelp Pelh Pem Peb Pebs Pes Pess Peng Pej Pech Pek Pet Pep Peh Pyeo Pyeog Pyeokk Pyeogs Pyeon Pyeonj Pyeonh Pyeod Pyeol Pyeolg Pyeolm Pyeolb Pyeols Pyeolt Pyeolp Pyeolh Pyeom Pyeob Pyeobs Pyeos Pyeoss Pyeong Pyeoj Pyeoch Pyeok Pyeot Pyeop Pyeoh Pye Pyeg Pyekk Pyegs Pyen Pyenj Pyenh Pyed Pyel Pyelg Pyelm Pyelb Pyels Pyelt Pyelp Pyelh Pyem Pyeb Pyebs Pyes Pyess Pyeng Pyej Pyech Pyek Pyet Pyep Pyeh Po Pog Pokk Pogs Pon Ponj Ponh Pod Pol Polg Polm Polb Pols Polt Polp Polh Pom Pob Pobs Pos'; + case 212: + return 'Poss Pong Poj Poch Pok Pot Pop Poh Pwa Pwag Pwakk Pwags Pwan Pwanj Pwanh Pwad Pwal Pwalg Pwalm Pwalb Pwals Pwalt Pwalp Pwalh Pwam Pwab Pwabs Pwas Pwass Pwang Pwaj Pwach Pwak Pwat Pwap Pwah Pwae Pwaeg Pwaekk Pwaegs Pwaen Pwaenj Pwaenh Pwaed Pwael Pwaelg Pwaelm Pwaelb Pwaels Pwaelt Pwaelp Pwaelh Pwaem Pwaeb Pwaebs Pwaes Pwaess Pwaeng Pwaej Pwaech Pwaek Pwaet Pwaep Pwaeh Poe Poeg Poekk Poegs Poen Poenj Poenh Poed Poel Poelg Poelm Poelb Poels Poelt Poelp Poelh Poem Poeb Poebs Poes Poess Poeng Poej Poech Poek Poet Poep Poeh Pyo Pyog Pyokk Pyogs Pyon Pyonj Pyonh Pyod Pyol Pyolg Pyolm Pyolb Pyols Pyolt Pyolp Pyolh Pyom Pyob Pyobs Pyos Pyoss Pyong Pyoj Pyoch Pyok Pyot Pyop Pyoh Pu Pug Pukk Pugs Pun Punj Punh Pud Pul Pulg Pulm Pulb Puls Pult Pulp Pulh Pum Pub Pubs Pus Puss Pung Puj Puch Puk Put Pup Puh Pwo Pwog Pwokk Pwogs Pwon Pwonj Pwonh Pwod Pwol Pwolg Pwolm Pwolb Pwols Pwolt Pwolp Pwolh Pwom Pwob Pwobs Pwos Pwoss Pwong Pwoj Pwoch Pwok Pwot Pwop Pwoh Pwe Pweg Pwekk Pwegs Pwen Pwenj Pwenh Pwed Pwel Pwelg Pwelm Pwelb Pwels Pwelt Pwelp Pwelh Pwem Pweb Pwebs Pwes Pwess Pweng Pwej Pwech Pwek Pwet Pwep Pweh Pwi Pwig Pwikk Pwigs Pwin Pwinj Pwinh Pwid Pwil Pwilg Pwilm Pwilb Pwils Pwilt Pwilp Pwilh Pwim Pwib Pwibs Pwis Pwiss Pwing Pwij Pwich Pwik Pwit Pwip Pwih Pyu Pyug Pyukk Pyugs Pyun Pyunj Pyunh Pyud Pyul Pyulg Pyulm Pyulb Pyuls Pyult Pyulp Pyulh Pyum Pyub Pyubs Pyus Pyuss Pyung Pyuj Pyuch'; + case 213: + return 'Pyuk Pyut Pyup Pyuh Peu Peug Peukk Peugs Peun Peunj Peunh Peud Peul Peulg Peulm Peulb Peuls Peult Peulp Peulh Peum Peub Peubs Peus Peuss Peung Peuj Peuch Peuk Peut Peup Peuh Pui Puig Puikk Puigs Puin Puinj Puinh Puid Puil Puilg Puilm Puilb Puils Puilt Puilp Puilh Puim Puib Puibs Puis Puiss Puing Puij Puich Puik Puit Puip Puih Pi Pig Pikk Pigs Pin Pinj Pinh Pid Pil Pilg Pilm Pilb Pils Pilt Pilp Pilh Pim Pib Pibs Pis Piss Ping Pij Pich Pik Pit Pip Pih Ha Hag Hakk Hags Han Hanj Hanh Had Hal Halg Halm Halb Hals Halt Halp Halh Ham Hab Habs Has Hass Hang Haj Hach Hak Hat Hap Hah Hae Haeg Haekk Haegs Haen Haenj Haenh Haed Hael Haelg Haelm Haelb Haels Haelt Haelp Haelh Haem Haeb Haebs Haes Haess Haeng Haej Haech Haek Haet Haep Haeh Hya Hyag Hyakk Hyags Hyan Hyanj Hyanh Hyad Hyal Hyalg Hyalm Hyalb Hyals Hyalt Hyalp Hyalh Hyam Hyab Hyabs Hyas Hyass Hyang Hyaj Hyach Hyak Hyat Hyap Hyah Hyae Hyaeg Hyaekk Hyaegs Hyaen Hyaenj Hyaenh Hyaed Hyael Hyaelg Hyaelm Hyaelb Hyaels Hyaelt Hyaelp Hyaelh Hyaem Hyaeb Hyaebs Hyaes Hyaess Hyaeng Hyaej Hyaech Hyaek Hyaet Hyaep Hyaeh Heo Heog Heokk Heogs Heon Heonj Heonh Heod Heol Heolg Heolm Heolb Heols Heolt Heolp Heolh Heom Heob Heobs Heos Heoss Heong Heoj Heoch Heok Heot Heop Heoh He Heg Hekk Hegs Hen Henj Henh Hed Hel Helg Helm Helb Hels Helt Help Helh Hem Heb Hebs Hes Hess Heng Hej Hech Hek Het Hep Heh'; + case 214: + return 'Hyeo Hyeog Hyeokk Hyeogs Hyeon Hyeonj Hyeonh Hyeod Hyeol Hyeolg Hyeolm Hyeolb Hyeols Hyeolt Hyeolp Hyeolh Hyeom Hyeob Hyeobs Hyeos Hyeoss Hyeong Hyeoj Hyeoch Hyeok Hyeot Hyeop Hyeoh Hye Hyeg Hyekk Hyegs Hyen Hyenj Hyenh Hyed Hyel Hyelg Hyelm Hyelb Hyels Hyelt Hyelp Hyelh Hyem Hyeb Hyebs Hyes Hyess Hyeng Hyej Hyech Hyek Hyet Hyep Hyeh Ho Hog Hokk Hogs Hon Honj Honh Hod Hol Holg Holm Holb Hols Holt Holp Holh Hom Hob Hobs Hos Hoss Hong Hoj Hoch Hok Hot Hop Hoh Hwa Hwag Hwakk Hwags Hwan Hwanj Hwanh Hwad Hwal Hwalg Hwalm Hwalb Hwals Hwalt Hwalp Hwalh Hwam Hwab Hwabs Hwas Hwass Hwang Hwaj Hwach Hwak Hwat Hwap Hwah Hwae Hwaeg Hwaekk Hwaegs Hwaen Hwaenj Hwaenh Hwaed Hwael Hwaelg Hwaelm Hwaelb Hwaels Hwaelt Hwaelp Hwaelh Hwaem Hwaeb Hwaebs Hwaes Hwaess Hwaeng Hwaej Hwaech Hwaek Hwaet Hwaep Hwaeh Hoe Hoeg Hoekk Hoegs Hoen Hoenj Hoenh Hoed Hoel Hoelg Hoelm Hoelb Hoels Hoelt Hoelp Hoelh Hoem Hoeb Hoebs Hoes Hoess Hoeng Hoej Hoech Hoek Hoet Hoep Hoeh Hyo Hyog Hyokk Hyogs Hyon Hyonj Hyonh Hyod Hyol Hyolg Hyolm Hyolb Hyols Hyolt Hyolp Hyolh Hyom Hyob Hyobs Hyos Hyoss Hyong Hyoj Hyoch Hyok Hyot Hyop Hyoh Hu Hug Hukk Hugs Hun Hunj Hunh Hud Hul Hulg Hulm Hulb Huls Hult Hulp Hulh Hum Hub Hubs Hus Huss Hung Huj Huch Huk Hut Hup Huh Hwo Hwog Hwokk Hwogs Hwon Hwonj Hwonh Hwod Hwol Hwolg Hwolm Hwolb Hwols Hwolt Hwolp Hwolh Hwom Hwob Hwobs Hwos Hwoss Hwong Hwoj Hwoch Hwok Hwot Hwop Hwoh Hwe Hweg Hwekk Hwegs'; + case 215: + return 'Hwen Hwenj Hwenh Hwed Hwel Hwelg Hwelm Hwelb Hwels Hwelt Hwelp Hwelh Hwem Hweb Hwebs Hwes Hwess Hweng Hwej Hwech Hwek Hwet Hwep Hweh Hwi Hwig Hwikk Hwigs Hwin Hwinj Hwinh Hwid Hwil Hwilg Hwilm Hwilb Hwils Hwilt Hwilp Hwilh Hwim Hwib Hwibs Hwis Hwiss Hwing Hwij Hwich Hwik Hwit Hwip Hwih Hyu Hyug Hyukk Hyugs Hyun Hyunj Hyunh Hyud Hyul Hyulg Hyulm Hyulb Hyuls Hyult Hyulp Hyulh Hyum Hyub Hyubs Hyus Hyuss Hyung Hyuj Hyuch Hyuk Hyut Hyup Hyuh Heu Heug Heukk Heugs Heun Heunj Heunh Heud Heul Heulg Heulm Heulb Heuls Heult Heulp Heulh Heum Heub Heubs Heus Heuss Heung Heuj Heuch Heuk Heut Heup Heuh Hui Huig Huikk Huigs Huin Huinj Huinh Huid Huil Huilg Huilm Huilb Huils Huilt Huilp Huilh Huim Huib Huibs Huis Huiss Huing Huij Huich Huik Huit Huip Huih Hi Hig Hikk Higs Hin Hinj Hinh Hid Hil Hilg Hilm Hilb Hils Hilt Hilp Hilh Him Hib Hibs His Hiss Hing Hij Hich Hik Hit Hip Hih oyeo ooi yoa yoae yoeo uyeo uii yuae yuo eua eueo eue euo iyao iyae iyeo iye ioi iyo iyu ii oa oe nl nch tt ttb db ds dsg dj dch dt lkk lgh llk lmh lbd lbp lng lqh lh mn mnn mm mbs mj bd blp bm pp bsd bj bch sm sv ssg ssd sz sj sch st sh zb zv ngm ngh jb jpp jj ps pt'; + case 249: + return 'Gae Gaeng Geo Go Gol Gwan Gwi Gwi Gyun Geul Geum Na Na Na Na Na Na Na Na Na Nag Nag Nag Nag Nag Nag Nag Nan Nan Nan Nan Nan Nan Nam Nam Nam Nam Nab Nab Nab Long Nang Nang Nang Nang Nae Naeng No No No No No No No Lou No No No No Nog Nog Nog Nog Nog Nog Non Nong Nong Nong Lung Noe Noe Noe Noe Nu Nu Nu Nu Nu Nu Nu Nu Neug Neug Neum Neung Neung Neung Neung Neung Du La Lag Lag Lan Lyeong Lo Lyul Li Bae Beon Byeon Bu Bul Bi Sag Sag Sam Saeg Saeng Seob Se Swae Sin Sim Sib Ya Yag Yag Yang Yang Yang Yang Yang Yang Yang Yang Yeo Yeo Yeo Yeo Yeo Yeo Yeo Yeo Yeo Yeo Yeo Yeog Yeog Yeog Yeog Yeon Yeon Yeon Yeon Yeon Yeon Yeon Yeon Yeon Yeon Yeon Yeon Yeon Yeon Yeol Yeol Yeol Yeol Yeol Yeol Yeom Yeom Yeom Yeom Yeom Yeob Yeong Yeong Yeong Yeong Yeong Yeong Yeong Yeong Yeong Yeong Yeong Yeong Yeong Ye Ye Ye Ye O Yo Yo Yo Yo Yo Yo Yo Yo Yo Yo Yong Un Won Yu Yu Yu Yu Yu Yu Yu Yu Yu Yu Yug Yug Yug Yun Yun Yun Yun Yul Yul Yul Yul Yung I I I I I I I I I I I I I I Ig Ig In In In In In In In Im Im Im Ib Ib Ib Jang Jeog Ji Jib Cha Cheog'; + case 250: + return 'Che Tag Tag Tang Taeg Tong Po Pog Hang Hang Hyeon Hwag Kotsu Kaku Coc Chou Ki Sei Ki Cho Jik Li Shin Shou Fuku Sei Sei U Hagi Sen Sho Gap Itsu To Han Shi Kan Kaku Nang Ye Wu Seng Mian Mian Qin Bei He Tan Qi Ping Mo Ceng Che Hui Kai Zeng Cheng Min Ji Shu Mei Hai Zhu Han Zhu Zhao Zuo Bei She Zhi Qi You Zu Zhu Huo Zhen Gu Tu Jie Lian Jin Fan Shu Zhe Chou Cao Cao Zhe He Shi Ye Jin Bin Zeng Chuo Yi Nan Xiang Pin Hui Hei Guan Bing Kuang Quan Xing Chong Ji Yong Shao He Tao Hui Wa Zhong Fen Yan Ben Bi Ci Ao Yi Cai Yao Wang Shen Yu Zeng Ao Cheng Dai Yu Sou Bing Ao Qing Lang Wang Zhang Dai Sha Liu Yin Zi Han Jing Zhu Qiao Jue Fan Zhu Zhen Ci Hua Guan Wen Yi Sheng Zhi Juan Zhe Tian Tiao Jie Lei Tao Lian Ping Zhe Huang Hua Yun Qiang Fu Shi Diao Zhu Qing Ye Nuo Yu Jin Bian Zeng Shu Chi Sou Xing Zhu Nan Jing Bai Xiang E Pin Zhen Gui He Xie Jie Qian Beng E Pang'; + case 251: + return "ff fi fl ffi ffl st st mn me mi vn mkh i ay ' ' d h kh l m r t + sh s sh ss a o ' b g d h u zz tt yy k k ll mm nn ss p p ts kk rr ss t o v kh f 'l ' ' b b b b p p p p bh bh bh bh th th th th th th th th t t t t v v v v ph ph ph ph j j j j n n n n ch ch ch ch ch ch ch ch dh dh dh dh dh dh d d zh zh r r k k k k g g g g g g g g n n n n n n n n n n e e h h h h h h h h e e e' e' . . . . . . . . . . . . . . t t ' ng ng ng ng u u o o u u u v v o o u u e e e e a a i'a i'a i'e i'e i'w i'w i'u i'u i'o i'o i'u i'u i'e i'e i'e i'a i'a i'a y y y y"; + case 252: + return "i'j i'h i'm i'a i'y bj bh bkh bm ba by tj th tkh tm ta ty thj thm tha thy jh jm hj hm khj khh khm sj sh skh sm sh sm dj dh dkh dm th tm dhm `j `m ghj ghm fj fh fkh fm fa fy qh qm qa qy ka kj kh kkh kl km ka ky lj lh lkh lm la ly mj mh mkh mm ma my nj nh nkh nm na ny hj hm ha hy yj yh ykh ym ya yy dha ra aa un- in- a- u- i- -a i'r i'z i'm i'n i'a i'y br bz bm bn ba by tr tz tm tn ta ty thr thz thm thn tha thy fa fy qa qy ka kl km ka ky lm la ly ma mm nr nz nm nn na ny aa yr yz ym yn ya yy i'j i'h i'kh i'm i'h bj bh bkh bm bh tj th tkh tm th thm jh jm hj hm khj khm sj sh skh sm sh skh sm dj dh dkh dm th dhm `j `m ghj ghm fj fh fkh fm qh qm kj kh kkh kl km lj lh lkh lm lh mj mh mkh mm nj nh nkh nm nh hj hm ha yj yh ykh ym yh i'm i'h bm bh tm th thm thh sm sh shm shh kl km lm nm nh ym yh a- u- i- ta ty `a `y gha ghy sa sy sha shy ha"; + case 253: + return "hy ja jy kha khy sa sy da dy shj shh shkh shm shr sr sr dr ta ty `a `y gha ghy sa sy sha shy ha hy ja jy kha khy sa sy da dy shj shh shkh shm shr sr sr dr shj shh shkh shm sh shh tm sj sh skh shj shh shkh tm dhm aan aan ( ) * * * * * * * * * * * * * * * * tjm thj thj thm tkhm tmj tmh tmkh jmh jmh hmy hma shj sjh sja smh smh smj smm smm shh shh smm shhm shhm shjy shmkh shmkh shmm shmm dha dkhm dkhm tmh tmh tmm tmy `jm `mm `mm `ma ghmm ghmy ghma fkhm fkhm qmh qmm lhm lhy lha ljj ljj lkhm lkhm lmh lmh mhj mhm mhy mjh mjm mkhj mkhm mjkh hmj hmm nhm nha njm njm nja nmy nma ymm ymm bkhy tjy tja tkhy tkha tmy tma jmy jha jma skha shy shhy dhy ljy lmy yhy yjy ymy mmy qmy nhy qmh lhm `my kmy njh mkhy ljm kmm ljm njh jhy hjy mjy fmy bhy kmm `jm smm skhy njy * sle qle Allah 'akbar Muhammad sl`m rasul `alayhi wa-sallam salla salla Allah `alayhi wa-sallam jalla jalalahu Rial bismillah al-rahman al-rahim * *"; + case 254: + return " , , . : ; ! ? [( )] ... .. - - _ _ ( ) { } [ ] [( )] << >> < > [ ] [ ] ' ' [ ] - - - - _ _ _ , , . ; : ? ! - ( ) { } [ ] # & * + - < > = \\ $ % @ an an un _ in a a u u i i - - . . ' a a ' ' u' u' ' ' i' i' i' i' a a b b b b h h t t t t th th th th j j j j h h h h kh kh kh kh d d dh dh r r z z s s s s sh sh sh sh s s s s d d d d t t t t dh dh dh dh ` ` ` ` gh gh gh gh f f f f q q q q k k k k l l l l m m m m n n n n h h h h w w a a y y y y la la l' l' l' l' la la"; + case 255: + return " ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ ( ) . [ ] , - o a i u e o ya yu yo tsu a i u e o ka ki ku ke ko sa shi su se so ta chi tsu te to na ni nu ne no ha hi fu he ho ma mi mu me mo ya yu yo ra ri ru re ro wa n ' ` g kk gs n nj nh d tt l lg lm lb ls lt lp lh m b pp bs s ss j jj ch k t p h a ae ya yae eo e yeo ye o wa wae oe yo u wo we wi yu eu ui i c L ! - | Y W | < ^ > v # * { | } ? ?"; + case 256: + return 'a e i o u da de di do du ja je jo ju ka ke ki ko ku ma me mi mo mu na ne ni no nu pa pe pi po pu qa qe qi qo ra re ri ro ru sa se si so su ta te ti to tu wa we wi wo za ze zo B25 B43 B85 B71 B90 B48 B29 B62 B76 B33 B68 B66 B87 B91 B18 B19 B22 B34 B47 B49 B56 B63 B64 B79 B82 B83 B86 B89 B100 B102 B104 B105 B105f B105m B106f B106m B107f B107m B108f B108m B109f B109m B120 B121 B122 B123 B125 B127 B128 B130 B131 B132 B133 B135 B140 B141 B142 B145 B146 B150 B151 B152 B153 B154 B156 B157 B158 B159 B160 B161 B162 B163 B164 B165 B166 B167 B168 B169 B170 B171 B172 B173 B174 B176 B177 B178 B179 B180 B181 B182 B183 B184 B185 B189 B190 B191 B220 B225 B230 B231 B232 B233 B234 B236 B240 B241 B242 B243 B245 B246 B247 B248 B249 B251 B252 B253 B254 B255 B256 B257 B258 B259 B155 B200 B201 B202 B203 B204 B205 B206 B207 B208 B209 B210 B211 B212 B213 B214 B215 B216 B217 B218 B219 B221 B222 B226 B227 B228 B229 B250 B305'; + case 257: + return ', . * 1 2 3 4 5 6 7 8 9 10 20 30 40 50 60 70 80 90 100 200 300 400 500 600 700 800 900 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 20000 30000 40000 50000 60000 70000 80000 90000 * * # * * * * * * 1/4 1/2 1 5 50 500 5000 50000 5 10 50 100 500 1000 5000 5 10 50 100 500 1000 10000 50000 10 1 1 1 2 2 2 2 5 10 10 10 10 10 30 50 50 50 50 100 300 500 500 500 500 500 1000 5000 5 50 1/2 1/2 2/3 3/4 y t < 1 2 3 4 5 m K l Go x a a Gr t 0 1/4 y I No = - S S S )) X V IIS II | > * TR. 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46'; + case 258: + return ' a e b b g d i w z th y k q l m n m n u p k r s t t a e h x a p d l y r l a q b m o d t sh sh s ? u n k n t p s i e y k k d w g g z z ng j ? t y r b b b b l e y k 1 2 3 4 5 6 7 8 9 10 20 30 40 50 60 70 80 90 100 200 300 400 500 600 700 800 900'; + case 259: + return "a b c d e v z h th i k l m n s o p s q r s t u x ph ch f r c i u s I V X L j t' t' a b g d e q z h th i k l m n j u p 90 r s t w f x hw o 900 a b g d e zh dzh z dz i k l m n o p r s t u c sh shc y y o o f h c v '' ' e ie ju ja ia a d z n s a b g h d h w z h t y k sh l m d n z s ` p s q r t g t i u s | a i u ka ku ga gu xa ca ja ji ta tu da di du tha pa ba fa na nu ma mi mu ya va vi ra ru la sa za sha sra ha AM1 AM2 AMHA XS DH1 DH2 BG BU : 1 2 10 20 100"; + case 260: + return "E A A O O U I E A O U U I Aw W Y H P B T D Ch J K G F V Th Dh S Z Sh Zh R L M N Ng Oy Yu e a a o o u i e a o u u i aw w y h p b t d ch j k g f v th dh s z sh zh r l m n ng oy yu p t k f th s sh ch y ng b d g v dh z zh j w h l m i e a ' o u au aa r n ii ei ai u ou uu oi oo ar or er ur 'r ir i' yuu ' b t j x kh d r s sh dh c g f q k l m n w h y a e i o u aa ee oo 0 1 2 3 4 5 6 7 8 9 A Ai Ai E Br Ch Hch E Ei H Hy I K Hk Ky L M N O Oi P Hp S Sh T Ht C Hc Ch D U W X G Z Zh a ai ai e br ch hch e ei h hy i k hk ky l m n o oi p hp s sh t ht c hc ch d u w x g z zh"; + case 261: + return "a b c ch d nd dh e e f g gj h i j k l ll m n n nj o p q r rr s sh t th u v x y z zh gh gh kh a b g d e z e z t c y z i ` l n' x d' c j k l' h x a c c c' m q n j' s j o t' f j c p g r s v t s u c' c w p k * A B B C Ch D Dh E E F G H H I Ij J K L Ll M N Nj O P Q R S Sh T Th U V X Y Z a b b c ch d dh e e f g h h i ij j k l ll m n nj o p q r s sh t th u v x y z"; + case 262: + return 'AB1 AB2 AB3 AB4 AB5 AB6 AB7 AB8 AB9 AB10 AB11 AB13 AB16 AB17 AB20 AB21 AB21f AB21m AB22 AB22f AB22m AB23 AB23m AB24 AB26 AB27 AB28 A28b AB29 AB30 AB31 AB34 AB37 AB38 AB39 AB40 AB41 AB44 AB45 AB46 AB47 AB48 AB49 AB50 AB51 AB53 AB54 AB55 AB56 AB57 AB58 AB59 AB60 AB61 AB65 AB66 AB67 AB69 AB70 AB73 AB74 AB76 AB77 AB78 AB79 AB80 AB81 AB82 AB85 AB86 AB87 A100/102 AB118 AB120 A120b AB122 AB123 AB131a AB131b A131c AB164 AB171 AB180 AB188 AB191 A301 A302 A303 A304 A305 A306 A307 A308 A309a A309b A309c A310 A311 A312 A313a A313b A313c A314 A315 A316 A317 A318 A319 A320 A321 A322 A323 A324 A325 A326 A327 A328 A329 A330 A331 A332 A333 A334 A335 A336 A337 A338 A339 A340 A341 A342 A343 A344 A345 A346 A347 A348 A349 A350 A351 A352 A353 A354 A355 A356 A357 A358 A359 A360 A361 A362 A363 A364 A365 A366 A367 A368 A369 A370 A371 A400 A401 A402 A403 A404 A405 A406 A407 A408 A409 A410 A411 A412 A413 A414 A415 A416 A417 A418 A501 A502 A503 A504 A505 A506 A508 A509 A510 A511 A512 A513 A515 A516 A520 A521 A523 A524 A525 A526 A527 A528 A529 A530 A531 A532 A534 A535 A536 A537 A538 A539 A540 A541 A542 A545 A547 A548 A549 A550 A551 A552 A553 A554 A555 A556 A557 A559 A563 A564 A565 A566 A568 A569 A570 A571 A572 A573 A574 A575 A576 A577 A578 A579 A580 A581 A582 A583 A584 A585 A586 A587 A588 A589 A591 A592 A594'; + case 263: + return "A595 A596 A598 A600 A601 A602 A603 A604 A606 A608 A609 A610 A611 A612 A613 A614 A615 A616 A617 A618 A619 A620 A621 A622 A623 A624 A626 A627 A628 A629 A634 A637 A638 A640 A642 A643 A644 A645 A646 A648 A649 A651 A652 A653 A654 A655 A656 A657 A658 A659 A660 A661 A662 A663 A664 A701 A702 A703 A704 A705 A706 A707 A708 A709 A709-2 A709-3 A709-4 A709-6 A710 A711 A712 A713 A714 A715 A717 A726 A732 A800 A801 A802 A803 A804 A805 A806 A807 aa : - ae b b dz dz dz dzh d d d e o fng u g g g h h h j ls lz l l l lzh lzh y y o oe u q r r r r r tc ts ts tsh t v y ' ` pc c x qc q s"; + case 264: + return "a e i o u ja jo ka ke ki ko ku la le li lo lu ma me mi mo mu na ne ni no nu pa pe pi po pu ra re ri ro ru sa se si so su ta te ti to tu wa we wi wo xa xe za zo ' b g d h w z h t y k l m n s ` p s q r sh t + 1 2 3 10 20 100 1000 10000 ' b g d h w z h t y k l m n n s ` p s q r sh t < > 1 2 3 4 5 10 20 ' ' b b g d h h w z h t y y k k l l m m n n s ` p s q r sh sh t 1 2 3 4 4 5 10 20 100 ' b g d h w z h t y k l m n s ` p s q sh t 1 5 10 20 100"; + case 265: + return "' b g d h w z h t y k l m n s ` p s q r sh t 1 10 20 100 2 3 a b g d e v i y k l m n o r s t u f q s t a e l n c ^ a e i o y w b b p m n n ne ne r r l x h s s se k q t t te te to d * + a e i o y w b p m n ne r l x h s s se k q t te to d 11 .5 RMT IMN 1 2 3 4 5 6 7 8 9 10 20 30 40 50 60 70 100 200 300 400 500 600 700 800 900 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 20000 30000 40000 50000 60000 70000 80000 90000 100000 200000 300000 400000 500000 600000 700000 800000 900000 1 2 3 4 5 6 7 8 9 10"; + case 266: + return "a i u r e o m h k kh g gh c ch j n t th d dh n t th d dh n p ph b bh m y r l v s s s z h k th t vh ' ' 1 2 3 4 10 20 100 1000 .5 , . * # + @ , . ~ h l h m q w s r b t s k n h s s f ' ` d g d g t z d y t z | 50 # h l h m q w s r b t s k n h s s f ' ` d g d g t z d y t z | 10 20 ' b bh g gh d h w w z zh j jh h t y k k kh l dh th m n s ` ` p f c q q qh r sh sh t 1 5 10 20 100 + # ; , . : *"; + case 267: + return "a a a a a a e e e e o o i i u u k x x xv g g gh c j t th d dh t p f b bh ng ng ngv n n n m m y y v r l s z sh zh sh sh h . : ; . . * * ' b g d h w z h t y k l m n s ` p s q r sh t 1 2 3 4 10 20 100 1000 ' b g d h w z h t y k l m n s p s sh t 1 2 3 4 10 20 100 1000 ' b g d h w z h y k l m n s p s sh t * * + + 1 2 3 4 10 20 100"; + case 268: + return 'a a a i i e o o o b b b b g g g g d d d z z y y y y k k k k l l l lt m n n n nt nt nc nc ny ny ng ng ng p p c c c q q q q q q r r r s s sh sh sh sh t t t t ot bash A A B Mb C Nc Cs D Nd E E E F G Gy H I I J K K Nk L Ly M N Ny O O O O O P Mp R R S Sz T Nt Ty Ch U U U U V Z Zs Tprus S a a b mb c nc cs d nd e e e f g gy h i i j k k nk l ly m n ny o o o o o p mp r r s sz t nt ty ch u u u u v z zs tprus s 1 5 10 50 100 1000'; + case 269: + return ' b p t t j ch h kh f d d r r z s sh k g l m n w u y i ng ny v a i u e o m 0 1 2 3 4 5 6 7 8 9'; + case 270: + return " 1 2 3 4 5 6 7 8 9 10 20 30 40 50 60 70 80 90 100 200 300 400 500 600 700 800 900 1/2 1/4 1/3 2/3 a b p p' t' s c ch ch' h' x d z r r' z j s sh s d t z' ' x' f v v q k k' g l m n u w o e h y e - ll e"; + case 271: + return "' ' b b g h h w z h y k l m n n n s ` ` p s s s r sh t t t 1 2 3 4 5 10 20 30 100 .5 `d ' b g h w z h y k l m n s ` p s r sh t f l sh 1 10 20 100 , . * ** < ' b g w z x y k d m n s p c r sh t l , . ; : ' -' b g d h w -w z h y k l m n s ` p r sh t 1 2 3 4 10 20 100 ' b g d h w z h t y k l m n s ` p s q r sh t zy"; + case 272: + return "m m h h h a a i i u u r r l l e ai o au k kh g gh n c ch j jh n t th d dh n t th d dh n p ph b bh m y r l v s s s h l l r n a a i i u u r r l l e ai o au , . . : - + * 1 2 3 4 5 6 7 8 9 10 20 30 40 50 60 70 80 90 100 1000 0 1 2 3 4 5 6 7 8 9 e o e o l * m m h a a i i u u e ai o au k kh g gh n c ch j jh n t th d r dh rh n t th d dh n p ph b bh m y r l v s s s h a i i u u e ai o au ' . # # , . , . r # s t b c d g m n l n v p y r h k j n a e i u o e x 0 1 2 3 4 5 6 7 8 9"; + case 273: + return "m m h a i u e k kh g gh n c ch j jh n t th d dh n t th d dh n p ph b bh m y y r l w s h a i i u u e ai o au oi o au 0 1 2 3 4 5 6 7 8 9 * , . ? lh a ei v a i u e o k kh g gh c ch j jh n t th d dh n t th d dh n p ph b bh m r l v s h r ' . * Sri m m h a a i i u u r r l l e ai o au k kh g gh n c ch j jh n t th d dh n t th d dh n p ph b bh m y r l l v s s s h a i i u u r r l l e ai o au ' h h Om , . . ' * e m 0 1 2 3 4 5 6 7 8 9 1 * - - ~ ^ 1 2 3 4 5 6 7 8 9 10 20 30 40 50 60 70 80 90 100 1000"; + case 274: + return "a a i u e ai o au k kh g g gh n c ch j j n t th d dh n t th d d dh n p ph b b bh m y r l v s h r a i i u e ai o au m ' , . , . . q i r a i u e k kh g gh c ch j j n t th d d dh n t th d dh n p ph b bh m y r l v s h r rh . a a i i u u e ai o au k kh g g gh n c ch j j jh n t th d d r dh n t th d dh n p ph b b bh m y r l v s s h m a i i u u e ai o au ' 0 1 2 3 4 5 6 7 8 9"; + case 275: + return "m m m h a a i i u u r l e ai o au k kh g gh n c ch j jh n t th d dh n t th d dh n p ph b bh m y r l l v d d d h ' ' ' a i i u u r r e ai o au Om u ` m m r l l l 0 1 2 3 4 5 6 a k n v p"; + case 276: + return "a a i i u u r r l l e ai o au k kh g gh n hn c ch j jh n hn t th d dh n t th d dh n hn p ph b bh m hm y r hr l hl v s s s h a i i u u r r l l e ai o au m m h ' ' m Om * , . , - . 0 1 2 3 4 5 6 7 8 9 . - ^ ' m h h * a a i i u u r r l l e ai o au k kh g gh n c ch j jh n t th d dh n t th d dh n p ph b bh m y r l v s s s h a i i u u r r l l e e ai o o au m m h ' ' m . Om 0 1 2 3 4 5 6 7 8 9"; + case 277: + return " a a i i u u r r l l e ai o au k kh g gh n c ch j jh n t th d dh n t th d dh n p ph b bh m y r l v s s s h a i i u u r r e ai o au m m h ' * , . - - - - - # * * * * * * * * * * * * * * i i i u u u"; + case 278: + return "a a i i u u r r l l e ai o au k kh g gh n c ch j jh n t th d dh n t th d dh n p ph b bh m y r l v s s s h l a i i u u r r l l e ai o au m h ' , . . * 0 1 2 3 4 5 6 7 8 9 @ @ @ @ @ @ @ @ @ @ @ @ @ a a i i u u e ai o au k s g gh n c ch j jh n t th d dh n t th d dh n p ph b bh m y r l v s s h r m h a i i u u e ai o au ' kh . 0 1 2 3 4 5 6 7 8 9"; + case 279: + return 'k kh ng n t t p ph b m j ch th r l s ny h d dh g g gh bh jh b l r r a a i i u u e av o ai m 0 1 2 3 4 5 6 7 8 9 10 20 , . * ! c t th d dh n l'; + case 280: + return "a a i i u u e ai o au k kh g gh n c ch j jh n t th d dh n t th d dh n p ph b bh m y r l v s s s h r a i i u u r r e ai o au m h ' . M A I U ' Y I U E O N G K N J C N D T N D T M B P H L R R S S V m a i u ' y i u e o n g k n j c n d t n d t m b p h l r r s s v 0 1 2 3 4 5 6 7 8 9 10 20 30 40 50 60 70 80 90 Om"; + case 281: + return "a a i i u u e o k kh g gh n c ch j n t d dh n t th d dh n p ph b bh m ' y r l v s s s h l z a i i u u e ai o m m n y r r ' . - * 0 1 2 3 4 5 6 7 8 9 a a i i u u r r e ai o au k kh g gh n c ch j jh n t th d dh n t th d dh n p ph b bh m y r l v s s s h l r a i i u u r r e ai o au m h ' * ~ e"; + case 282: + return " i u u e o o ai au i k kh g gh ng c ch j ny t th d dh n t th d dh n p ph b bh m ts tsh dz dzh zh z ' y r l v sh s s h ks m m m m h r y r l v @ # - , . : @ # i u u e o o ai au r l k kh g gh ng c ch j jh ny t th d dh n t th d dh n p ph b bh m ts tsh dz zh z ' y r l v sh s s h ks h h r l sh s g k ng d n b m r l sh s ' m h - , . ` @ @ @ # # hi hii hu huu ha haa shri shrii shru shruu shra shraa spe spi spo spa p k l m d z v ng h g kh s b c t th n ph r f ch a e i o u ua ia p k t m n l w ng y ' ' ' ' '"; + case 283: + return '# # 5 6 8 9 5 9 9 0'; + case 284: + return "a a i i u u r r l e ai o au k kh g gh n c ch j jh n t th d dh n t th d dh n p ph b bh m y r l v s s s h a i i u u r r l e ai o au m m h ' , . - ^ 0 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 10 20 30 40 50 60 70 80 90 * @ , k kh g ng c ch j ny t th d n p ph b m ts tsh dz w zh z ' y r l sh s h k kh g ng c ch j ny t th d n p ph b m ts tsh dz w zh z y r l sh s h i u e o m m"; + case 285: + return "a a i i u u e ai o au k kh g gh n c ch j jh n t th d dh n t th d dh n p ph b bh m y r l v s s s h l ks jn tr a i i u u r e ai o au m h ' ' r r 0 1 2 3 4 5 6 7 8 9 a a i i u u e ai o au y v b bh m k kh t th l g gh d dh n c ch t th l j jh d dh n p ph h r s a i i u u e ai o au m h Om 0 1 2 3 4 5 6 7 8 9"; + case 286: + return ' k g ng p b m t d n c j ny y r l w s - i u e o , .'; + case 287: + return 'm ng r h a a i i u u re ro le lo e ai o k kh g gh ng c ch j jh ny t th d dh n t th d dh n p ph b bh m y r l w s s s h jny a a i i u u re e ai e , . # # * - : : : * * @ @ 0 1 2 3 4 5 6 7 8 9 yh 1 2 4 5 8 10 12 15 16 20 20 32 40 48 60 64 80 160 160 240 / N C A U M K P M K P P V P K V N P N U V # N S P A V M M V ~'; + case 292: + return '2 3 4 5 6 7 8 9 3 4 5 6 7 8 9 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 2 3 3 4 5 6 7 8 9 1 2 3 3 4 5 216000 432000 1 2 3 3 4 5 3 3 4 4 4 4 6 7 7 7 8 8 9 9 9 9 2 3 4 5 6 1 2 3 4 4 5 5 2 3 1 2 1/3 2/3 5/6 1/3 2/3 1/8 1/4 1/6 1/4 1/4 1/2 1/3 2/3 40 50 4 5 6 7 8 9 | : \\ \\ \\'; + case 303: + return ' 1 2 4 5 6 7 8 9 10 11 12 12b 13 15 17 19 21 23 24 25 26 27 28 29 30 33 34 35 36 37 38 39 40 41 44 46 47 49 50 51 52 53 54 55 56 58 59 60 61 62 63 64 66 67 68 69 70 71 72 73 74 75 75b 76 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 94 95 96 97 98 99 100 101 102 103 104 105 107 108 109 110 112 114 301 302'; + case 304: + return 'A1 A2 A3 A4 A5 A5a A6 A6a A6b A7 A8 A9 A10 A11 mSa A13 A14 A14a xr A16 Xrd A17a A18 A19 A20 sr A22 A23 A24 A25 A26 A27 A28 A29 A30 A31 A32 A32a mniw A34 A35 A36 A37 qiz A39 A40 A40a A41 A42 A42a A43 A43a A44 A45 A45a A46 iry A48 A49 Sps Spsi A52 A53 A54 A55 A56 A57 A58 A59 A60 A61 A62 A63 A64 A65 A66 A67 A68 A69 A70 B1 B2 msi B4 B5 B5a B6 B7 B8 B9 C1 C2 C2a C2b C2c DHwty Xnmw C5 inpw stX mnw C9 mAat C10a HH C12 C13 C14 C15 C16 C17 C18 C19 C20 C21 C22 C23 C24 tp Hr Sny ir D5 D6 D7 D8 D8a rmi wDAt D11 D12 D13 D14 D15 D16 D17 D18 fnD D20 r D22 D23 spt spty D26 mnD D27a kA D29 D30 D31 D31a D32 D33 aHA D34a D35 a D37 D38 D39 D40 D41 D42 D43 D44 Dsr d D46a D47 D48 D48a D49 Dba D50a D50b D50c D50d D50e D50f D50g D50h D50i D51 mt D52a D53 D54 D54a D55 sbq D57 b ab wab sAH D62 D63 D64 D65 D66 D67 D67a D67b D67c D67d D67e D67f D67g D67h E1 E2 E3 E4 E5 zzmt E7 E8 E8a E9 E9a E10 E11 E12 E13 E14 E15 E16 E16a zAb E17a E18 E19 E20 E20a E21 mAi rw Aby E25 E26 E27 E28 E28a E29 E30 E31 E32 E33 wn E34a E36 E37 E38 F1 F1a'; + case 305: + return 'F2 F3 HAt SsA F6 F7 F8 F9 F10 F11 wsr wp F13a F14 F15 db F17 bH F19 ns sDm F21a pH xpS F24 wHm Xn F27 F28 sti Sd ms F31a X sd ib nfr zmA F37 F37a F38 F38a imAx Aw F41 spr F43 iwa F45 F45a qAb F46a F47 F47a F48 F49 F50 F51 F51a F51b F51c F52 F53 A AA G3 tyw G5 G6 G6a G7 G7a G7b G8 G9 G10 G11 G11a G12 G13 mwt G15 nbty m mm G19 G20 G20a nH Db rxyt G24 Ax G26 G26a dSr gm bA G30 G31 baHi G33 G34 aq wr G36a nDs G37a gb zA pA xn wSA w G43a ww G45 G45a mAw TA G48 G49 G50 G51 G52 G53 snD H1 wSm pAq nr H5 Sw H6a H7 H8 aSA Styw mzH sbk sAq I5a km I7 Hfn f I9a D I10a DD I11a I12 I13 I14 I15 in K2 ad XA bz nSmt K7 K8 xpr bit L2a L3 L4 L5 L6 L6a srqt L8 iAm M1a M1b Hn xt M3a rnp M5 tr M7 SA zSn M10 M10a wdn M12 M12a M12b M12c M12d M12e M12f M12g M12h wAD M14 M15 M15a HA M16a i Y ii M19 sxt sm M22 nn sw rsw M24a M25 Sma M27 M28 M28a nDm bnr M31 M31a M32 M33 M33a M33b bdt M35 Dr M37 M38 M39 iz M40a M41 M42 M43 M44 pt N2 N3 idt zw N6 N7 Hnmmt pzD N10 iaH N12 N13 sbA dwAt tA N17'; + case 306: + return 'iw N18a N18b N19 wDb N21 N22 N23 spAt xAst N25a Dw Axt xa q iAt N31 N32 N33 N33a N34 N34a n mw N36 S N37a N38 N39 Sm id N42 NL1 NL2 NL3 NL4 NL5 NL5a NL6 NL7 NL8 NL9 NL10 NL11 NL12 NL13 NL14 NL15 NL16 NL17 NL17a NL18 NL19 NL20 NU1 NU2 NU3 NU4 NU5 NU6 NU7 NU8 NU9 NU10 NU10a NU11 NU11a NU12 NU13 NU14 NU15 NU16 NU17 NU18 NU18a NU19 NU20 NU21 NU22 NU22a pr O1a O2 O3 h O5 O5a Hwt O6a O6b O6c O6d O6e O6f O7 O8 O9 O10 O10a O10b O10c aH O12 O13 O14 wsxt O16 O17 kAr O19 O19a O20 O20a O21 zH O23 O24 O24a txn O25a O26 O27 iwn aA O29a zxnt O30a O31 O32 O33 O33a z zb inb O36a O36b O36c O36d O37 qnbt O39 O40 O41 Szp O43 O44 ipt O46 nxn O48 niwt zp O50a O50b Snwt P1 P1a P2 P3 P3a wHa nfw aHa P7 xrw P9 P10 P11 st wz p Q4 Q5 qrsw Q7 xAwt R2 R2a R3 R3a R3b Htp kp R6 snTr nTr bd R10 R10a dd R12 R13 imnt iAb wx R16a R17 R18 R19 R20 R21 xm R23 R24 R25 R26 R27 R28 R29 HDt S2 S2a dSrt S4 S5 sxmty S6a xprS Atf Swty mDH wsx nbw S13 S14 S14a S14b tHn S16 S17 S17a mnit sDAw xtm S21 sT dmD Tz S25 Sndyt S26a S26b mnxt S28 s sf S31 siA Tb anx Swt S35a S36 xw HqA awt'; + case 307: + return 'wAs Dam xrp md Ams nxxw S46 T1 T2 HD T3a T4 T5 HDD T7 T7a T8 T8a pd T9a pD zwn T11a rwd rs qmA T15 T16 T16a wrrt Sms qs T20 wa sn T23 iH DbA T26 T27 Xr nmt T30 sSm T32 T32a T33 T33a nm T35 T36 mA U2 U3 U4 U5 mr U6a U6b U7 U8 U9 it HqAt U12 hb U14 tm biA grg U18 U19 U20 stp mnx Ab U23a Hmt U25 wbA U27 DA U29 U29a U30 rtH zmn U32a ti xsf U35 Hm U37 mxAt U39 U40 U41 U42 V1 V1a V1b V1c V1d V1e V1f V1g V1h V1i sTA V2a sTAw wA snT Ss Sn V7a V7b V8 V9 V10 V11 V11a V11b V11c arq V12a V12b T V14 iTi V16 V17 V18 mDt mD V20a V20b V20c V20d V20e V20f V20g V20h V20i V20j V20k V20l V21 mH V23 V23a wD V25 aD V27 H V28a wAH V29a nb V30a k V31a msn sSr V33a V34 V35 V36 idr V37a V38 V39 V40 V40a W1 bAs Hb W3a W4 W5 W6 W7 W8 Xnm W9a iab W10a g W12 W13 Hz W14a W15 W16 xnt W17a W18 W18a mi W20 W21 Hnqt W23 nw W24a ini t X2 X3 X4 X4a X4b X5 X6 X6a X7 rdi X8a mDAt Y1a Y2 zS Y4 mn ibA Y7 zSSt Z1 Z2 Z2a Z2b Z2c Z2d Z3 Z3a Z3b y Z4a Z5 Z5a Z6 W Z8 Z9 Z10 imi Z12 Z13 Z14 Z15 Z15a Z15b Z15c Z15d Z15e'; + case 308: + return 'Z15f Z15g Z15h Z15i Z16 Z16a Z16b Z16c Z16d Z16e Z16f Z16g Z16h x AA2 AA3 AA4 Hp AA6 AA7 AA7a AA7b qn AA9 AA10 mAa AA12 im AA14 M AA16 sA AA18 AA19 apr wDa AA22 AA23 AA24 AA25 AA26 nD qd AA29 Xkr AA31 AA32 V11d : * + ( )'; + case 324: + return '1 2 3 4 5 6 7 8 9 10 10a 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 26a 27 28 29 30 31 32 33 34 35 36 37 38 39 39a 40 41 41a 42 43 44 45 45a 46 46a 46b 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 66a 66b 66c 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 97a 98 98a 99 100 100a 101 101a 102 102a 103 104 104a 104b 104c 105 105a 105b 106 107 107a 107b 107c 108 109 110 110a 110b 111 112 113 114 115 115a 116 117 118 119 120 121 122 123 124 125 125a 126 127 128 129 130 131 132 133 134 135 135a 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 202a 202b 203 204 205 206 207 207a 208 209 209a 210 211 212 213 214 215 215a 216 216a 217 218 219 220 221 222'; + case 325: + return '223 224 225 226 227 227a 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 267a 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 289a 290 291 292 293 294 294a 295 296 297 298 299 299a 300 301 302 303 304 305 306 307 308 309 309a 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 329a 330 331 332a 332b 332c 333 334 335 336 336a 336b 336c 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 359a 360 361 362 363 364 364a 365 366 367 368 368a 369 370 371 371a 372 373 374 375 376 377 378 379 380 381 381a 382 383 383a 384 385 386 386a 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 410a 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 450a 451 452 453 454 455 456 457'; + case 326: + return '457a 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530'; + case 362: + return ' t ng y m b d a ph kh h i c k l m n p o o r sh th e w e k l l hai o tek 0 1 2 3 4 5 6 7 8 9 , . oz oc oq ox az ac aq ax vz vc vq vx ez ec eq ex iz ic iq ix uz uc uq ux awz awc awq awx uiz uic uiq uix ng uex uez awx uec uez ueq uex uiuz uiuc uiuq uiux mz mc mq mx k kh g ng s y w p ny ph b m n h l ht t d r nh sh c ts gh htt th x f dh ch z 0 1 2 3 4 5 6 7 8 9 n k s f mb ny g d kp j xw w z gb nd c hw t b v h p l a o o u e e i .'; + case 363: + return "eeb eev ib iv aub auv ub uv eb ev aib aiv oob oov awb awv uab uav ob ov iab iav ab av wb wv aab aav v nts l h nl r nk qh y hl m ch nch hn plh nth n ' x c m d j v s g ? ! , & % + - * / ~ ` - - ^ @ 0 1 2 3 4 5 6 7 8 9 Caum Pua Vam Roob Neev Ruav Tas ' Xyoo Hli Hli ZT Hnub Nqig Xiab Ntuj Av TC MT Tau Los Mus CHLNN CCT CT CTC CPD CNT Cheng Yeng Lee Lor Xiong Kong Her Moua Thao Chang Pha Khang Hang Vang Fang Yang Chue Kw Vue"; + case 366: + return ' M S V W Atiu Z Kp P T G F I K A J E B C U Yu L Q H Ng X D O N R O Ai Y m s v w atiu z kp p t g f i k a j e b c u yu l q h ng x d o n r o ai y 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 1 2 3 , . Aiva !'; + case 367: + return "b b b bl m m m f v v d d d d dr dr n n n n nr nr l l hl hl dl dl dli dli g g g gh gh ngg ngg ngg h hx hx hx j j ni ni zh zh zh zh j sh x r r z z z s r r y y y yi yi w bl sh j d z dr ` n ' ` ' a au ah an ang o oa wo w e en eng eu i ia ian iang io ie ii iu ing u ua uan uang uu uei ung yu yi e e yu yu i i ai ei ao ou n ng uog yui og er w ig ea iong ui x b d s x b l t s k f b x l t s f - - , -"; + case 368: + return 'do sa chha sho ngwu zar gwyr gon tson ke chha pho chha khi rer par je le shon she chha zar lo tsew thwy phy sho khi ngwu vor to ni phy chha sho har ngwu tew ? de thwu de li pho thew thwu thew thwy lhy pho chhew chyr ? me thon khu te zi nyr tshwin ka tew tsewr li ko ve dzew ku mo la be ly twa phe ba ta dir bu ji ko mo ly ly ty ta ta do me rer kyr kyr la vor gew chha ku von phi lha dzy dzy cho be tew bi tin thew sy thon jwo chhi khy ? e me a ly e phe kha si tha kir lhe be tshe ta ta ko khy shu chhwa ghwa mer ze kwe zhy vi jwa nar or lhi tshen u tshwa kwar kwar tew sa me born khy ker pha e by tshi ji me var hon pyr di vi ba ne ir lhe cho rur ngyr gu ar pha kyr gar li ly dzen chyr chyr pha ryr twi bi lhy lhy dwe e e mo tu tswy pha khy ler lwy vir ar la swy ge pho ver ver nga er ko ? tew ly tew tsewr zhi mu bu o jen ne lon li bu ky ky ne pu shi rir mi ky dy le o ge rir pew li u jon dy he bu jen myr khu pu mi khy hy sa ly ny ky var ny zhi'; + case 369: + return '? thwo chwe chwon di chwo char ? shwo zi zi zhi chwy chwo li chwen chi ngorn shwo gy shwon she ji che chwen chwa chwy bir ve kin vy ngwu ngwu ky ly ko ror lhe je ly lu bi nu lew dzen dzy ga me phy pe ? ma twi ghwen chhew my chha pe bu nwy la shan se lu rur u rar lwu la ew den ten ten non lhi mi ghor lwen khwy la la me dzwa ne na li zi me ji me be len khew be lhy rewr gur khwy sew rur mar tu u gu me lwon kwe kewr dzew ngewr du ky lwen ten ten ge le me twy j? kwy a tshy tshy to tew no dze u san phe pu pu ? kwen ngwyr gi ko ka shwy bu lew tshe chu le ga lon me ka di rar ke khy lhi dzu sa tsar ryr me mi bu u khwy e khan khwa di siw me phy e lyr vir jew lhwo tshy la tha dzi e la la rar la bu e lwon a ew chhy ge phar phy shan sar hwa mi chhy shar hwa khwa khwa the mer lu lhew ve le di ha sha sha ly la chyr zir lhew lwyr shy te wya wya khon khy bi len ka ko tswa ? la khy ma lon di di lwan ka ryr da ma nga lu kho dzon lhwi che ka zy khan lu nen gwan dzu don de'; + case 370: + return 'ly vu ka su ny le tshe la jan ni zhi tsur de tsa ? de my dzi kewr le ka zhi ? di hwin chu gu gu ka tsin dzar te dzi zorn tshu kewr shu je lha she lo o a lwe a khwa ghir ghir nar rar khwa o ror jy sy ngewr chhon si na chew pu pi lhwa tsha tshwa i ghi te ja tsa pi tsa tsa je jwe chon pu shwa be kwon chon dzwy ? phi chew chyr tshen mi chhy di thu zhi dze shi ghu a chu kew shwa phi chhy gwe ? tshen chyr go chhen khe gwe chen chhy ka chhy shwu chhew kwa chhy vi my chhu hon bu sha tshe gha sy shar ror ghu na dzwy mur ten di no sa hwi no lo tsi nu kwi don ni zyr dzwan pa my ba shy o lhe ghe hwin ni tshew zhu ja gi so ge ha ly ku cha my dy chhwan ty hon lon na ku se la kha lu dzo ? chwen se chhu lhu len no lwo ha sho da by kyr shin chy de shwo si su lwu khwar ghu ngwu ja rer chor ne tswu chhyr thwu chhu den ke zyr thwi tha ka swi khwar vy vy nwy tsa lwu ner ker ja na kwy khar zyr vir lhu ? lir vir wo tew pho di shwi ngwyr ge di li kwan ? su tswen tsi ma no kwi dzon chhy zyr zhu ur'; + case 371: + return 'ha di chwi tun lon san shwe ky mur ner nwy ha na hwar di ur tswa chwan chor ? thwan ?ar ?ar gu nwy lhu nen hwar nor se na chiw na than gu gu ? pa pho ur jwon pen lwy chwu dar ku mor vi pu ben va va vi kon ner po ne ner vi ar ly dy thwy pen ghu vi nwe ew ne kyr kyr shon kon hy su khy jwe tsir pa su khin khy va rewr kir kyr kyr vi pa vi zar ky pa on ngwy dy khin su po ba da ghy lhu li zur hy tshen ny lu lon dewr ? po zy la ni dir chwa dzen dzen par tsewr cha ja ve tshwu ve lew cha rir cha ki vyr ghor vi vyr wo ky rer vyr jon khi kwi me ky mur da kewr je ku khi ku bu pha mir ku ku pha my thar er ku then pon me mi kha kha vu ka ? tser jyr mi vu vu chy tser jwe kha ti vu kon cha cha bu va kon swew mi mi po mi ngwy mi e ngwy wy hwan di ngwu ghur ghar si ? ? ba shy tshe no du li cho rir rer j? ghar dzwyr be win pe zo u lo ghar ku ghur rer tha lu ba ? ghur by vi lu kor ma tshe pen te li phe kar ju ma pho gy ma u rer jyr nwy rer la la'; + case 372: + return 'rer ti ti sha pen be cho lho be mar pen gha va ke py lhu hon shi gha swy ghar pe chi lhu kho du ror var gha ghew chy chi chy chy chy lu ve kwy lu ne shi shi khon ve ky shwa len ke phy ni by che nu li la sy se an min y jwa tshon swin ngwi ji on vyr chin chu gy ty ma dzy me nga khon ke la sy tha lew mor shwa di my ji ngwir se swe ghan gar zyr gu tsewr khew vi rir rir ? ghwa ghwa che shwyr to ngon gi kwin by dzu nwy dy gur tshe ka chhew na lwan tsy zew to ghwe an nu gha ne kha ngwu la tshwew dzu na la la shyr hwa nwew jen la ? shon ly dzwy on go ghwe y mi chha ngon lwe jy khe ghe ghe by u jwa min na nwo ke dzwy she bi gur on na gha ba nu va gew ly khy kha khi rir shwi chi khu chhwy kwa jwa rar ly sha tshew kur khwe thu mi lu lu mi sy gu ngwe ka le ky lhwu ky khon ghe ? sha lwu ji ghy wer dzu chhe tshe von ga ju hen py ma nwy khor ve chu ngwyr de rir vy je je shon dwu gha mi ben swin phu ver lwe ma ? na te bo na phy er lo khwan na lwe vy khar ngwi lo tshew rir'; + case 373: + return 'va si tsi chi ba kew so u chan chhon kwon bon zi ngon ghe lwu nu ka vy ? lhu nir tsewr sha mo chhi phy gwi lwen kew myr n? su ly ti len kwi dzi mer su chy ghe kwe du vi ngewr ngon dzi nu ly tshew zar ur ku korn chon ba er li ar ghwe khwy khy lwyr o chi gu tson rir me lu lu nu shon ? ler zhin ler new chyr ky khy ni di the phy ko rer ngy phy ma te va phy dzo ty kho zor khy tsha shwa bi thy dwu lo lwu me rur shy chhwyr chhi lo lhi ghi chhwyr shy tsen jwa gha ngwe chhon ta ngwu kho lu da ku ne dzen dzu chhwo ? nwi swi ge kha pha tho shy swy gy la ke nwo bu lu da lho ha na ny sin nwo sa sa ghi ta ne che ka ngwe ta ne zhir tu chhwi shwon i rir li lhorn na kewr nu chhon a lwyr wu lhu la kewr bu swy du ngwu ka ku pu le e thy thy shy shy mo wu lu shwe sin gu do ngwe ku te go le pwyr pwyr ew ku ku ngon e len len e len e ngon lha thorn e le e lha len the lwy lwy zhi phy ka zhi pha ki tsir lwu chon lwu che khwy jy khi khwy tshwy khi ny ni va shwa ly na na jy va ta'; + case 374: + return 'kew rir khwy na ta gu kew chu ngwir ngon tshwu ka shwon ngwyr ngwyr shwen kwe by kwe hu tshwu ngwyr hu tshwu ngwyr ngon tshwu tshwu ga lu lha lu rer chhen chhen wyr lhew lhew je jir je nyr lhew lu swa tha nyr ve ba ngwu len du mu khi gy horn khan khan me do gu thwy kwy po bu my dewr lin shyr hyr ha zew va ghar jan dzon ky khwy sew ghi si ghi la lwin hwan ha phan da ghi kin phin ly shwe kha khwy ge ja kwar van ha pin de jin mer er hew kan a shon rar chhwy zir ky ky rir ky rar cha tsen rir rir lhon u cho u ny kwen u cho du so ky do lu lu le gha u ngur chi si dzwan hon sha le do khu tu dzwy li lhor da tsir thwo zew mu pu dzi my kwan khu ny pha pha tshe zyr tu my dzew rer bi ven ghor jar tshon le le lha tsyr ku jy by zhu chhy chhwi shwan tsi shy tshan du khi lew kwo bi shwu ly lwu du var tshwa shwi khe sha ka ngwi da dzo rar she lhorn zon lon zhu bu ky ba khu len dze ku len rer dy vi ghu ky lu lon par dza khi lu nar vor gew ghor du tu vy vu rer shin lon ? ne la dzi pha vu tshon o da twyr ? khe ko'; + case 375: + return 'tsew jo o to o vu lhe gu zon y cha ngon ? sa ror my my pa kha sha ja ke cho lon be che jo ? o ge chho gew khwi tshon twi lu kew ke lwi me my la lew si lo da lu ly tsun sho dzi jan khu le vi bo gu lhi ? dwu len ryr i tshe tshe lo ryr pen swan ? tho zon zew va swi ga sha da khu du gha ja ghy ky rur lu khe no nwy tsorn sy nir dyr ngwyr de gu si la lan da rir mur si tsha to dzon kan khew rir ve se pa mar ver my na tur ghe cha kew ge vu na kwy di pho ten chhe rer dzi lu dy rur chwan gu chho bi si pu lhor zhiw ka vi nwu tsi lwe zhwy nwy sha phe hwin shew ryr twe ge jy ur ge da ko hen po ban ghy ngwir le kur da ky ni er chi len vi di hu ne li do shwu mer rur ne kwan tsy ? lhon ky nu ba kwon tshwe rar thwo ge ghew ly khy lhon tsy my zhwy len vi thwo ur dzwy len ku i pi tan ko cha kon phi po thwyr lor ba dzyr ghe li po ju lwu gi ly chew te man rir lhwi ra gi nir lwe vo ker chho lhwi py ngwu ngwu khy a ir py ka ne py phi di mor ka phi'; + case 376: + return 'dzwy bu rir tu ka gy po ti dzo myr jan chha va tu khy ko du kar by ba pho tha ghar pi ky byr the lhu bi a nwi sho do by phy bo dzi do ti ky jwu mi bi jwew ror ki a tshar thi the do shi a pa zhy pho dy dzi li thar le ka tsu mo lo nga thwo tshe dzi dzi phyr ? ar bi ? dzi ? pi li mi ka mi phy tha ngwu nu ? ar dy on tsew li ke ka tu bi bi vy to dzi ma yr yr dzi jo hwi tsew sho len khy shwo ji la se ? le shwa de she non si korn ber ly ber chwen no swa swa hy hy gwyr shwan ni shwy kew tsa tsa vu je pin ni ghar si u rir dzu nga rir lhyr tshwen chhwew swu nar zo u ? u le chwi my vi dzi lhi la da gi mir dzwo tsa pi lhy dzew gy gwi lhwa na tshon ga tha rer vor jon khy la y rir mi ze de kwen tshwin rer lhy lhy gwi thwo ngwu tsha ngon lho la mi khan mi my rar lu ty du lon gi tu vi shon ze chon thew no kew thu me tswyr ver de thy dzew tshi py ngon shwew pho the tha bi tsen vo tshin e de kwi dzi bo se vin be gy lhy ne tsi rar lhy chha li gy lhwe'; + case 377: + return 'she chhiw di na yr me ly dew gi nga su me tu be sar kyr ka phe kew tho mu tsan te ? den da mi chon lon chi pen tsir var gi bi ma thu nga shy chu ju ghwan ngewr kyr ni win nwy dzi chhwyr len tshon my be chyr ne ka chi ghu lhwy va na sin lo lhy li shon khe lyr ty ty mer ty thy de ge my ne gu gu o nor hu ngo ngo lhew zu twy phy li tshan zi ryr kwy du gu la me lu ji tsu tse rir ghu khar jwo lwu len e e le kur gwi la dze pin li khon khy lu la ngwu lo ngwy phi a chyr gy pa ho ghi dzi hwe dir khe tsin lew thew be lhwe ne swan ? rar ghyr lhy hu ngwyr dy so chhan mer so khy si tshon dzyr so je kwy my vy on dza nwi le dzen na mer ? to thy ew gu zu phe ghu shar hwa rir dzu mi py zhiw li ni vi phan me zhiw na u pen lew rer ? gi ? ghyr ta lwyr swy vi to rer no kon ke chho bi pha lhy nga lu lu chon chhwen vo ly den ge lhu mo tsi zhy ke tse dy na pha zir gy li rer bo pe pho tho ghyr di e khe swy lew kha thu sar ni lwu ze ngir thon jy dzu tsorn thy mi'; + case 378: + return 'j? phu en la ew lhy shen chon bir ni kyr ghwy nwy hwa ngewr jon pe cha rir sa new bo pa dzu ba lhe kar ryr dzi shin lhe j? lhy de li gu dzo tswy by kwy ror pa ky ghu rur zhe ka chyr la nu ti ti lon kwy to lhy ghy ghy le vi jwe par he twar kwyr bi mer ? do lhor gwi vin bu si tsor my lhu vy tew tshi gu ku kwar ew mi dza dzu dzen no phu du no tsir pen bi che ba ve shwa shu bi bo ko mi tsy van lho my shi chon ke swe kwa nwi vi jwi new by chhwen i khar i ? chwo la chor zi si khu gi ko thu thu cho swy bu my zwi bi khy kwyr my ni si ke khwar ku tsha lon bi lon dzwyr shi mur du jwon nor ghwe u ghu ghu gwo dza phon chi chi pa shu me pen shwu li kon dy mi gi gi by ghiw vi dew che pir dy rar dzo ghi mar ten bur ku la nor wi ta phon dzwy new ? shu se be by chhon ni shi my thwi su nu ba shor i tho win gwyr ? ly khwi li ew ? dzi phon gwyr ny by pa nu jy ghew nwy dwewr jyr ? hon cha lhu dan lhi par khan khe kir ma kir de de i ghwy tshwin je ly khe ly kwi'; + case 379: + return 'lwu den var si tswa ma phi la vi si ghwy ghwe zin gu shon len sy chy da tshwu lha mer vi vi lo chhu ny rir ko rir be zir ba bin gwy py shu de hew vy py ki lho dyr de ja dyr kwy ji zhu da pe len jwon kwa norn na len rar kor yr ? lu nir len bur so hon ten jy ta ge bi chy e chy don je shi ge lu shu khy ghe le le khy py tsa ? sy swen ja thwo bi le khan tswyr chhwew thwo pu par chhwew dy swi vi si pi pi dy zhon on tsha ga thu thu on rer go nir pe bar pyr le swew di bu zwe bu zwe pho tswi phon rer li dir na li pho kew i dzi jyr ge thu thu my ly swew my shwi by shwi shwi bi chon ? lhon shwya tshwi li by lhon bu thu my chi lhi khi li su chhy ly li ni shwa si sa ge gur ma ghu pwyr zwy py so tsy bu pe rer nir kwy shew shew ven rur ka swu my le vi ly khan be tshi khan twy by ghor tsho tsha dzo le le khwu le lo gwy gu kwy lhe lhe be ngwu khwu le gwy gu ky lhe len khy rur twu tu lo ver ve thwu te thi ghwy lu nwy khu chy ma kwen pan lu dwar ja ja mar lu ver'; + case 380: + return 'thwu jon hwo tshy gwe ge lha lhon jwa lhon tsar tsar tsar jew u me me tyr bon lo ew ? sho gha u khwi ly dze myr pi na wi shi ka ga ze la khwa lwo lhor ew wo lhew to to sha vyr lhy kir gu ? lhy gu gu ? zwyr khwy tson dzwy lhi o dzwy ni wi o thy si thy thy lhi ngwi li li lhe thy thy thu thu cha pu tho chew ge jy han rur zhwu che ghyr kur dzu my lu jwi lan ? je zhwu na vi che lhi ky me lu nwe i su py shew ten dew lan tsha du rer vi li du ky lu zewr me na khwa dzy dew ghwy lo cha ngur len chhon chhwen ghyr vy ghew jo thy lu ma lor ver na be dew en bo ngur tsi tshew syr rur jwi kwe kwe ky ky rar py nga hin lu e thy tse vi me zir khwa jan by ka vy zher tswe kwe chhon lwu jwyr lu li chew ngwu ty lu shu tha tswy er swin me me me rur bi kyr vi lho dzu rar the chon ge te so si then rar bi ngwu shar jwa pe ngwu ? ngwi ka ka ka lhi o lha ven bi shwi je mer lhwy ju ka mi ja o zir lhyr dwu er u u ? tha lhen shy chhy dzwy chhi chhu tha chhu tha cha gew lon chha ka'; + case 381: + return 'so ka phon phon yr ki jwy lwe don phe lhi kwan zon ton ton tsa ghar khen ka rir la pa ve pe ngwy zew pe chwon kwu zew rir pa ten ga bu vyr ew mew zha vi sy sy myr ki chu swu de gwan gwan ror jwe lher rer lu ? la tswa no ma me khew lo ve ku von khu ly vi lu lwu shen tshi rir don mu jon wer lu shen bu ne o ki lon thar by tswin ror cha bo bu lu lwyr lon shon tshwan chho che u chew se thu to de shy lon jwe ge ve ko di chy ti kir ror no dza tsu he she he my va sha ghy lu ba bi lu mi tsi chi my chu ghwa di di zyr ne tsir ? bi jwy lu mi chwo ? bi ba an cha cho cho jwy ne swy jy lu ngwu bu dzu hu ner mi lu kew ka jwi dar thi to lew ? ghu ga sha ne cho ta kho ha shi shy shy zo shi hu shwy shy shy e lhon tshwew dza shi je zho shy phi phi ty she ta ? ti je kar bu hwi phi ? twe twu ? tshwew two ke lwi li ke di me li ghan chwe ker chon jwu du du by du en en du ny chhwor kin von kir t? jen gin du dwyr ty by lhi ew dzur ma te ni ? le ma'; + case 382: + return 'u lwo shwe vi ni chhwin khon de di jen lu tsewr vo tsu kwy lwi yr jyr su dwyr yr khwy ga dzyr ha tshyr ga khwy khwy ghon ne ga hwa dzen twa ty tin tu jwu ? ngwyr le ar le lhen vy vy jwu ton no zur lan nwy shon lhwe lhwe thu sy swy byr lhi chon di u chen mar gon swo sy khew ki swy o gon ku hwin sy morn twan don twu chen ? chen lhwe don lu go don tser ner che jwy ne my my rer kir do ngwu she rer my my en ki le te se be dy ror chy hen ba je my lan du ngorn lhon phe ghan dew khwa che phe de lin hen ve ror ma sa lha de the chhi gi chhi rewr jwy chhy en lhon ba ? twi tsha ki tsa ja ew zur swa ? dzu ton tu ghor tu ja po shi py be rur phon nir sha rur by dzwy jon vi ghu lon shwy li va tho so ew zur zwy hew si ha pa rar var pa bi de de kwa kwin lan sha sha pu lu do lhew tshy bu lew ka bu rur jwan on ju sha rir shu tsha jon no kew phe zin gu hin i lho tshew khwa shwy ? zin she rir zin new vor zhyr a le zur tshew tsewr tswy pen tho ku ho thu gha bu va cha shen ba vu swy'; + case 383: + return 'gwi vu ba shen chir nwy shon mi na swe sew dzwy ka sa my po kwan lhi khu zy chho lo lo den phon ghu on chir ghi lo kon shwu khwy pe zyr ghyr von ka dzu kew ngwi gha di su ban dzu dzu ta li dzew bu var le hon ngur gha lwi jwo dzu ly khu sew nin ne lhy ghy ghew bu ly chy lwu chha li ti me dzon en dwy dwy di dzy de phon rewr by kon tshi ly gy rewr kew pa vi kwa then ghwe lu ver kew lon chhe gur hon khwa ta ti ghwe nwe tshi khew na phen bu dan ge dzen dan phy ?u ar ly shi kur kon lwi ku sar dzu dzu ke ku khar ly rar jew bi mi sew ve ti ver gwi kwi vir lhwi mo no ly bi rir gor ha ve lew ne nu chwew zhew ny va rur born so dzi ghu sa cho na myr hwan na se ghew ne zy bo ? ne tshy ? bu khu hu ji bi tshwu be tsu bo bo rir rir tsir phy ke dy khu y she kewr khe ghu lon bo che sha lew tshwu chwew hwyr khwe lhy ngwi wu nga me tshy khu ha ban chhi dzi di mu chwew vin zur mer jwon vy ma tsy kwen che sa kwy kwy my py di ke me sho dzen born gha le je vi on nu ku jwon ma vi de'; + case 384: + return 'dwyr tho khu gu gu gu ne zhiw phu zhiw ly ge tsir na mur pu zhiw pu jan tse phu tsir ge tshwu phe bo chho ly tshwu wy zer o kwi dy tha len dy lu me me ? gwar rar zy gha kwe lhy ma tsha ? kha kha zwan ku la ryr zwan kha kha ghew ni tshi tshon no kir dze a a my phu khan y shy ngwo lhi ? lwy lwy thy by bu bo ror bu rer bu by za kwy jwa kwy zy dzu ne ghwy do a za thew ghen chhew te te chhe bu korn zy ne te ghwy zy dzi lwi ka za dew ghwy tse dzy dzar thy dzar lhen shwi shwi shwi ngwo kwi se shew nwy li on ew tsy pen lo di ? zi ngwy ghy la be be tsha shi dan lo ta tsy pyr shon pa lo tshi zar dzen le dew lon tswo tsha li kha shon han kha be shi dze vy o lwe nwo bo sho bo su zha me ? vi khin ken ne chi lew da ne ka vy zewr len vy zewr dzwy vi vi rer lin ngwy y dzu ti no pa pa tshe mi dzew na dy da zar dy ke ly dzwy rar rar vi ly wan du vi lew vi vo du ly go ghyr chhwo jwa kwy o kho ly go dzwew dzwew ve kew le ryr swo nu le vy my in la o lhy la'; + case 385: + return 'chu ky gi li zi lhi pho mi o len li ghy te ba gi ju ? ba pa pen pen sy du dzwy ghon che du lwa no shwa u tsha chha se a khu phy se ten a tsu tsu rer tsu len tsu khy lhwe chwa then ly ly tshi o bwe ma ner twin ba lwa khe nga norn te ta rir la nga sa du swe ti ? te le ngwir bu ze len tsur phu bon la zorn chwi zon by zi ner rar den ku di lwu ner tshi twu se tshu da rar tsur ? kwi nga che ta chu thy ta tsorn dzy ghu twa tshi tshi lwa lwa tewr ner li ner den ghan twon ? o bu ver lwen le by ny ka le le lu ? ghon wo tshen ka rir ly ? gi ghu lha bar ga tshy jy tshy ge ge na tshy rer khi zewr khe tshe ta ka shon ? dze tshe ti mi ta ten she li chi dzi kwe kwe tshwu bi so ni su tar phi myr bi tshew kwe ge dzi she chho she gu wu lwu rer tsor bu ta li le she dzwi wu na phe shon ghu vir vor dza dzew lu lu len van mi pen bi bi bi khy bar thu thu lo ge pho kwen on shwi ni bo ny tswar swi da ni chhin pa vi ma vi chhy vi khwu chu shy jo mu ge no ji ni'; + case 386: + return 'var shy lu rar chy no ghor rar mi tshwu vi phe vo no to rar ar myr dze rar bi shwo vi kan shwy de gy thwo thwo shwo me ly ke khon len khi har sa lhu de nur lew ta u de u jen by jen me by mo ga ni ryr gi ror on ly vyr ma swen du ? tser mi dzen dzu lwu dza tsha dzew dzew ba ba ar zyr bi dwa tsho on my mo ba dwa len pwyr on zyr the dwa dwan tsho na na pu tshi pu dwe pu vir ja ja ja dzwy lew nwo gi rar hon phe tsir nga shew gew lhi dzi rer tsyr kwyr dyr tsu tsyr lhi tho dzi ve tsu zhy khew ni se non po bo shon norn ke sew po jew po phar ke ke no kon la j?n j? pa kewr pen my vi dzo khi ir lu ngwo ze lu to so thu j? thu jew thew thu shy pha sa tswyr tar twi pha pha pha bo thu thu ny nu ba ka nwy ny thwe thin ka ba gur jwi phu chhwi phu san hwa hwi no jon jon dwu chy u kwan ne gha kwa gy gy le ho khe dzu ko rir dzu ben rar rewr zar rewr my phi tshy my jan dew zha lo dzwy do tyr cha tshy chha ar en bo tshy lu gwi en bo gwi ? bo gwi shon zhu kur gha shon ne'; + case 387: + return 'er ghorn u rir ghon ze ka no u kwo gew lhi shen nga shi khur khi so kon khon rir jon zhwyr kewr ghon dwu ly lwi pi pu tsy pe phen lwi zu zu dy be zur ti la chhwi yr rar vy chwo kha chhen phy dzi zhew vi hwen shi tshi lu to lhy phi phi ly thy bar phi la chyr mo char ki gwar la gwar zir kha tew rar phi phi o tsi rer len dzwe khwy chi chu war gu ben gu pu chu py o o tsy dewr e e chon bi dewr e ma hi han hu khwi ha swi har swi chha chha chha ge li vi ghwyr te phi vi vi la vi vi gi ? shy phi ? vi vir ? jwy pon jy lho dzi jy chhwew chhwew swu chhew che zha chhwew lu khew khew dzew lhy li khew ve shi ta si na sha si no ta khwy ty to vyr va lhi swe tshe ki kwi nwy pi kar do chwe lhu vi ka ze kwy nwy ta du di shy thy khew khen ky de swe kwe ky ti ? so rir va chhwo kur sy ka gha dzu ty ghwi phu phi se phyr vir ten chi rur sha ti be tew phon po a tso khe kwen lwi lyr du ten a ly hwen ne ha kar chy ne shi vy sew tser sha ghor ?a twew di shy tsy tar rur chhew swi tse ka'; + case 388: + return 'phy lu nwy ? lhwa gi la la kwa va tshu vu la chhwi pi ti ma rer er ta tshwew chew lu ty ku dzwy shwy ly pir shen ngwi na ngwo chy gi phy tshwe vu vu pi la phy chy khi bo go gar rir kwy dew lho ? ngyr phy jwo kar zyr phi lo rer chir chwe ka ky ty ror lho ? du ky phy i ka khu khu tewr je lhi te ta rer rewr ky chhar cha rar la ngyr shi ma ? khwy se me zon my vor vor khwy se e chhu sew sew wu lo khwy kan dwewr zi dwu u dwewr shwe chon lhorn lhorn thy tse ?a rorn zi di di ror zi du lon du du ha lu chho zhy twe tshi ghu lo zhy tshe bo twi lhor ga lo jwe lo par twe to lo pan pan twi be ba the chhew zhu zhon ? me me da li phy thu dwu phe dzu du zew ne zew zew zew zew ta tyr to ta to hwy wy vy lhu nar lwe nar khwar shwy lwi lwi ly ly ly rur khy ly ly ju lhew zyr lon lhew si swi rur dzwo ghwan chyr vy my rur kon dzy gu rur rur dzwi dzi chy ti je gha rur dze ba va u le ? ror mu be che gu di rur khon ghyr ngwy ngwyr ngorn ? ghyr gu kwyr ghyr va ngwyr gha py lo an vi'; + case 389: + return 'vu bi jy tswu lo zur ? lha dwyr dwyr py thwu je u dan bi nga ne ne chwi nu ne ne nin hun ne ne jy chhin ne hon dzy ne ne khwa tha ku ku rir gu ne dwyr dzen lu bi dzen var khu o pa me lwew du kwy khwu se o by khi kho non non lhon lhorn dzi zyr je je tan tan tan ghew chy vi khy jar twu chhew ne gewr ly u ku no ly so ve ku tsy tsy ne ke ga be dzi zewr chor zewr by va u la ? da si si ghew ngewr bi bi hy hi phu shu ku ku dzen shew phu porn ta chhew gu gu gu gu ner gha si tsha ngewr va khy vi len len len khe my ngy my gi ve my my my my li shwa tso my jy jy no no shon kwi ? kyr bi kyr ? gi kyr khe tswar ta gha lon ko kyr by nu kha khu ryr tshwa zhu ? gi tswan khwu ngyr ma tshu lhy nu chhwa van ? ngur gwi nwy ja tshon vi dzon tshi tshu chhwa len ran ryr ge zir lhu tswu dzwy de v? bu gwi da zher khe po dar bu de bu ngon lu vor ne gha kur gha du tsyr jy ? zwi my chu lwu la ju ju ju lor dew dew no chwen kir rar rar ny vi vi vi khon khen zo lhe lhe'; + case 390: + return 'shi sho cho gi shwi ke la shwi chir ke shwi me shu di tswyr wu she vir vir khwe ja vur li li sa je dze kew she dze ka za po za gi y jy y chhwo ka zy ky ton bi jy vi mo gha ke shar so gi gwon son vo vir gi ky ky yr lhwi me dwar mur tar se bi y ghwen ku vy ryr myr ken lwi rir ky lhu lhi tso va lho pi pi tew ky ky zi ky ? zwew dzew ny lhy zhyr lho kon zwi ba shi my lhi se gwi son chhi sy sho ton lew lew be lew be jo ve kor dzu rir lu lo e e lhew mu chhew hon le sa vi lhan du ky lhan tu vo tu yr yr don rer khy jon swo son son son va me lon lwo lon lhi py py lhi lhwe lu ? lhi ly ly je ge thwyr lu ba ? on khe dzi ly ghin vo ko ly ly ly ly shan ly ko ly ly dzi swy khen di lwy lwy dy me be be be lu ? dzy swen gu ka tswy ka kha rewr nwu new na twu chhew ngewr be nwy shwy zhyr zhyr shy li ne ten zi tsu mo ve ? ji mer sha rur rur se len kwa ky bi lew vir se khe gu khe gan gu la gu to chyr ryr jwu rewr be di ? lu lu ge'; + case 391: + return 'myr tsa dzen dzi ngwir li on chho jo phi phar phan phon ar le nar dza pa shu chhi ngewr kir du ma rir chu ko ghwe be tser tse by shar shar kwar dzyr ha kwar lhwyr kwu chhwe tho er ke ke ngur ngur i ge thy shu tha ma shu tha bi tshy dzon ryr pha pho khu ke ? phi thy jar tsi vir chhy la shwi jar ? mir dzwy len chu vir ju ghe tswi shwu shwu shwu ne ew ew ew dzon kwyr chhon kur ? wyr shwy thy lor chhy nen non tshe jy bo zo ? jon ? le zyr lwu bo gin kho dwu my ga e the la kha vir vu kwo kwo kwo li li na li dzy jon ly la bi bi tan le khy tsen zhyr tewr ka lu shu kin shy ve phar van sew swy ew ge be swy thwan dzwy chha dzwy pho dzon dzon dzon lon lon lon lhew zhe lu te gewr ghwin twar gi ji li vi thwe wa va dza phu khe pen dy dy dy si zy by ve le bi ngwu no ghy chhe chhe lo shy chhew dziw zar tsar zhi tshwu bi hyr han hwi tsen lhi lhen ki korn ghiw ne dy zhyr dzon o byr khe dzu lhy vi du swu by by norn norn ten shon gha vi ? ? ? ? ? ? ? ? ? ? ?'; + case 392: + return '1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256'; + case 393: + return '257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512'; + case 394: + return '513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768'; + case 395: + return '378 1 2 383 381 382 3 392 4 5 6 395 7 8 9 10 11 12 13 14 459 15 454 16 17 390 18 19 20 21 22 455 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 452 453 396 384 385 40 41 42 43 ? 450 45 46 47 48 49 50 51 52 389 53 54 55 388 56 57 58 59 60 61 62 63 64 391 386 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 387 ? ? 379 81 82 83 84 393 85 86 394 87 88 89 90 91 92 93 105 106 107 108 109 110 111 112 113 114 115 116 65 117 118 98 94 99 100 101 102 103 397 398 399 104 95 96 97 44 400 401 403 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 402 297 298 299 300 301 302 303 304 305 306 307 308 309 310 404 405 406 407 408 311 312 313 314 315 316 317 318 ? 319 411 412 409 410 413 320 321 322 323 324 325 416 417 419 420 164 165 451 166 167 168 169 170 171 172 173 175 174 176 177 178 430 ? 179 180 427 ? 428 429 ? 432 181 182 183 431 184 185 186 ? 187 188 189 190 457 191 192 193'; + case 396: + return '194 195 196 414 197 198 199 200 201 415 202 203 204 205 206 207 208 209 210 220 221 222 223 224 225 226 418 227 228 229 230 231 232 233 234 235 ? 236 237 238 239 241 242 245 250 251 253 240 422 356 243 248 254 358 359 244 421 246 247 249 252 255 423 256 257 258 259 260 261 425 262 263 ? 426 264 265 266 424 267 268 269 270 326 327 328 329 330 331 332 333 334 335 458 336 337 438 439 440 338 437 339 340 341 436 342 343 344 345 346 347 348 349 350 351 352 353 354 355 357 360 361 362 433 434 435 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 119 ? 120 121 122 123 124 125 126 127 128 129 130 ? 131 132 133 134 135 442 443 136 137 138 139 444 140 141 441 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 445 211 212 456 213 214 446 216 217 218 219 215 449 447 274 448 275 276 277 278 271 272 273'; + case 397: + return 'ga ta ghu bu shi le kwe mi le'; + case 432: + return 'e e a a a a i i i i u u u u u e e e e e o o o ka ka ka ka ka ka ka ka ka ka ka ka ki ki ki ki ki ki ki ki ku ku ku ku ku ku ku ke ke ke ke ke ke ko ko ko ko sa sa sa sa sa sa sa sa shi shi shi shi shi shi su su su su su su su su se se se se se so so so so so so so ta ta ta ta chi chi chi chi chi chi chi tsu tsu tsu tsu tsu te te te te te te te te te to to to to to to to na na na na na na na na na ni ni ni ni ni ni ni ni nu nu nu ne ne ne ne ne ne ne no no no no no ha ha ha ha ha ha ha ha ha ha ha hi hi hi hi hi hi hi fu fu fu he he he he he he he ho ho ho ho ho ho ho ho ma ma ma ma ma ma ma mi mi mi mi mi mi mi mu mu mu mu me me me mo mo mo mo mo mo ya ya ya ya ya ya yu yu yu yu yo yo yo yo yo yo ra ra ra ra ri ri ri ri ri ri ri ru ru ru ru ru ru re re'; + case 433: + return 're re ro ro ro ro ro ro wa wa wa wa wa i i i i i e e e e o o o o o o o n n wu yi ye wu ko i e o ko i e o n i na tsha ie poe swe phiu u cya tie njie toe tchye fwe liu siu thu njyu vai kai khau kou tciou liang ciang tsheng song ma fa la thoe tsoe fwe tswe ti ci fu fu fu tcyu tcyu fai hau lou liou tciou ciou tchyn fang vang sang khang theng neng piong iong va khua tchya nie lie tcie tchie njie njie ie ie mwe vwe vwe twe tswe swe swe tci ci i liu njiu ciu mu yu tchy njy y pai pai lai ai hau tou liou iou tsew tsew suow huow huow nguw mang thang kang liang tciang njiang peng seng piong tshiong tcing pa la sie tcie ie poe loe tsoe soe koe khuoe ye pwe pwe tchi tsiu fu vu khu hu pw fw sw kw hw mai thai sai sai thau lau lau nw kou'; + case 434: + return 'ciou lew sew thuow uow kuw tcyn yn vang tsang sang khang tciang iang teng neng piong miong ciong ciong njing ng tsa sa kua kua cya cie phoe foe loe tshoe tshoe oe tchye fwe tswe ni tshi tshi si fu ang tchyu cyu phw fai tsai lou tsou piou miou tchiou njiou iou nuow kuow huow pang ngu tsiang tsiang ciang iang liong tshiong ciong cing la cya poe thoe noe tshoe kue tsiou kue ye pwe vwe thi tsi tsi tci tci tshiu pu tsu ku tcyu njyu tchy pw hw phai mai lai sai hai mau tshau hau kou ou kue tshiou siou tciou ciou thuow fang vang lang tshang khang khang liang siang ciang ciang neng leng nong long liong tsiong siong tcing tcing cing ing ng va sa lie tshie sie ie moe loe tchye cye pi ti tci tsiu pu fu thu hu tcy cy pw khw lai sai sau tsou ngou tsiou njiou ciou iou yn tang lang kang hang hang siang tciang iang meng tsiong siong tchiong pa tshie sie tsoe koe tcye tcye pwe swe ti i tciu ciu tsu tshu ku lw mai kau thou hou pang fang tang lang meng teng tseng cing ing tsa tsie cie moe li tsi tci i mu lu hu cyu hw tau siou lew tshew yn tong ie voe tswe i tu lu lou tsou tsuow mang tciang tchiang tciong tsie moe ku cyu pw tsiang tshai nguow nong fu ku fang tcye fi'; + case 444: + return "h x p t f k l b d v g r pn ds fn km rs th dh dh kk j hl lh rh m n j s mn nm jm sj m ng zh j z s ms ns js ss mns nms jms sjs ch jn jns st str sp spr ts trs w wh wr sn sm krs grs sk skr a ow oa o aou i e ie i ui ee eh i ee i ye u eu xw un u u uh u ooh ow ou wa wo wi wei wow u o i a an am en an on m ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ` ` ' ' ' ' ' ' ' ` ` ' ' ' ' ' ' + r - ."; + case 463: + return ' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'; + case 464: + return '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -'; + case 465: + return "| | | | | | |: :| : D.S. D.C. S * / % %% ^ ^ ' // { [ # # # # # # # # G 8G G8 C F 8F F8 N N - ## bb b b # # # # # b 44 22 8va 8vb 15ma 15mb - - - - - - - - - . . . . . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # / // /// ~ ~ r s z p m f < > * * tr * * * * * * * * * * * * * * * HT NT T * Ped. * ^ / \\ * * * # # # # # # # # # # # - - - - - - * * * * * * * * * C F b # # # # # # # # # # # C & # # # # # # # # b # b"; + case 466: + return '1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 50 51 52 53 54 1 2 4 5 7 8 11 12 13 14 17 18 19 23 24 25 26 27 29 30 32 36 37 38 39 40 42 43 45 47 48 49 50 51 52 53 54 3 4 5 - 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19'; + case 467: + return 'Ren TianRen DiRen RenTian RenDi RenRen Zhong Zhou Xian Xian Shao Li Shang Gan Shu Xian Cha Tong Zeng Rui Da Jiao Ruan Xi Cong Jin Shi Ge Yi Le Zheng Wu Shi Geng Duan Yi Zhuang Zhong Mi Qin Lian Qiang Sui Sheng Ju Fa Ying Ying Yu Zao Da Kuo Wen Li Tao Tang Chang Du Yong Kun Jian Jin Shou Xi Ju Ji Shi Yi Shi Chen Nei Qu Hui Meng Qiong Ge Zhi Jian Cheng Zhi Shi Ju Xun Jiang Nan Qin Yang 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 1 5'; + case 468: + return 'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A C D G J K N O P Q S T U V W X Y Z a b c d f h i j k l m n p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v'; + case 469: + return 'w x y z A B D E F G J K L M N O P Q S T U V W X Y a b c d e f g h i j k l m n o p q r s t u v w x y z A B D E F G I J K L M O S T U V W X Y a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r'; + case 470: + return 's t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z i j A B G D E Z E Th I K L M N X O P R Th S T Y Ph Ch Ps O D a b g d e z e th i k l m n x o p r s s t y ph ch ps o d e th k ph r p A B G D E Z E Th I K L M N X O P R Th S T Y Ph Ch Ps O D a b g d'; + case 471: + return 'e z e th i k l m n x o p r s s t y ph ch ps o d e th k ph r p A B G D E Z E Th I K L M N X O P R Th S T Y Ph Ch Ps O D a b g d e z e th i k l m n x o p r s s t y ph ch ps o d e th k ph r p A B G D E Z E Th I K L M N X O P R Th S T Y Ph Ch Ps O D a b g d e z e th i k l m n x o p r s s t y ph ch ps o d e th k ph r p A B G D E Z E Th I K L M N X O P R Th S T Y Ph Ch Ps O D a b g d e z e th i k l m n x o p r s s t y ph ch ps o d e th k ph r p W w 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9'; + case 479: + return 'fng g g k l lzh y ng r t q qc qc t x q k l dzh l ng r r tsh zh dzh i o tsh c s d l n r s t'; + case 480: + return "a b v g d e zh z i j i g k l m n o p r s t u f h sht c ch sh u i e ju e jo je o jo th a b v g d e zh z i k l m o p r s t u f kh ts ch sh y e yu dz a i j o u h a b v g d e zh z i k l o p s u f kh ts ch sh ' y g i dz dzh s y u i"; + case 481: + return "m ts nt t h n x nk c l s z nc nts k d ny nr v ntx tx f r q y nq p xy np dl npl ' ml pl g r a aa i u o oo e ee w b m j v s g d - 0 1 2 3 4 5 6 7 8 9 $ @"; + case 482: + return ' p b t d k g m n ng s ch y w j h r l i ih iu iuh u e eh eo eoh o ae aeh a aa a b c d g y ph l n p t th f s sh j z w v k o au r m kh h e i ng u lh ts tr ong aang ang ing on en aan ny uen x 0 1 2 3 4 5 6 7 8 9 Rs'; + case 484: + return ' o p l y m a j b n h i s d t h u c d k r e n g m n t l 0 1 2 3 4 5 6 7 8 9'; + case 487: + return " xye xyu xyi xya xyie xy xyo hwe hwi hwie hwi mwi mwie k'wi k'wie k'wi bwi bwie kwi kwie kwi gwi gwie gwi fwi fwie pwi pwie"; + case 488: + return 'ki ka ku ke ke ko ko kua wi wa wu we we wo wo wui wei wvi wva wve mi ma mu me mo mua mue bi ba bu be be bo bo i a u e e o o ei i i a e si sa su se se so so sia li la lu le le lo lo lee di da du de do do ti ta tu te te to to ji ja ju je je jo jo joo yi ya yu ye ye yo yo fi fa fu fe fe fo fo fua fa ni na nu ne no hi ha hu he he ho ho hei hou hi ha hu he ho hua nggi ngga nggu ngge ngge nggo nggo nggaa nggua nggee nggoo nggoo gi ga gu ge guei gua nge ngo ngua pi pa pu pe pe po po mbi mba mbu mbe mbe mbe mbo mbo mbuu mbee mboo mboo kpi kpa kpu kpe kpe kpo kpo gbi gba gbu gbe gbe gbo gbo ra ndi nda ndu nde nde ndo ndo nja nju nje njo vi va vu ve ve vo vo nyi nya nyu nye nyo 1 2 3 4 5 6 7 8 9'; + case 489: + return "A D L M B S P Bh R E F I O Dh Yh W N K Y U J C H Q G Ny T Nh V X Gb Z Kp Sh a d l m b s p bh r e f i o dh yh w n k y u j c h q g ny t nh v x gb z kp sh ' ' 0 1 2 3 4 5 6 7 8 9 ! ?"; + case 492: + return ' 1 2 3 4 5 6 7 8 9 10 20 30 40 50 60 70 80 90 100 200 300 400 500 600 700 800 900 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 20000 30000 40000 50000 60000 70000 80000 90000 1L 2L L cr 2cr 1 2 3 4 5 6 7 8 9 - 1/4 1/2 3/4 Rs 1 2 10000 L'; + case 493: + return ' 1 2 3 4 5 6 7 8 9 10 20 30 40 50 60 70 80 90 100 200 300 400 500 600 700 800 900 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 20000 30000 40000 50000 60000 70000 80000 90000 * 2 3 4 5 6 7 8 9 10 400 600 2000 10000 1/2 1/6'; + case 494: + return 'a b j d w z h t y k l m n s ` f s q r sh t th kh dh d dh gh b n f q b j h h y k l m n s ` f s q sh t th kh d gh j h y l n s ` s q sh kh d gh n q b j h h t y k m n s ` f s q sh t th kh d dh gh b f a b j d h w z h t y l m n s ` f s q r sh t th kh dh d dh gh b j d w z h t y l m n s ` f s q r sh t th kh dh d dh gh mh hd'; + case 496: + return '1z 2z 3z 4z :mahjong: 6z 5z 1m 2m 3m 4m 5m 6m 7m 8m 9m 1s 2s 3s 4s 5s 6s 7s 8s 9s 1p 2p 3p 4p 5p 6p 7p 8p 9p 1b 2b 4b 3b 5b 6b 7b 8b j - - 00 01 02 03 04 05 06 10 11 12 13 14 15 16 20 21 22 23 24 25 26 30 31 32 33 34 35 36 40 41 42 43 44 45 46 50 51 52 53 54 55 56 60 61 62 63 64 65 66 - 00 01 02 03 04 05 06 10 11 12 13 14 15 16 20 21 22 23 24 25 26 30 31 32 33 34 35 36 40 41 42 43 44 45 46 50 51 52 53 54 55 56 60 61 62 63 64 65 66 - As 2s 3s 4s 5s 6s 7s 8s 9s Ts Js Ns Qs Ks Ah 2h 3h 4h 5h 6h 7h 8h 9h Th Jh Nh Qh Kh 0 Ad 2d 3d 4d 5d 6d 7d 8d 9d Td Jd Nd Qd Kd :black_joker: Ac 2c 3c 4c 5c 6c 7c 8c 9c Tc Jc Nc Qc Kc 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21'; + case 497: + return '0. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 0 CC0 ShareAlike NonCommercial (A) (B) (C) (D) (E) (F) (G) (H) (I) (J) (K) (L) (M) (N) (O) (P) (Q) (R) (S) (T) (U) (V) (W) (X) (Y) (Z) [S] C R CD WZ Copyleft A B C D E F G H I J K L M N O P Q R S T U V W X Y Z HV MV SD SS PPV WC A B C D E F G H I J K L M N O P Q R S T U V W X Y Z MC MD MR CreativeCommons PublicDomain Attribution A B C D E F G H I J K L M N O P Q R S T U V W X Y Z PX IC PA SA AB WC DJ CL COOL FREE ID NEW NG OK SOS UP! VS 3D 2ndScr 2K 4K 8K 5.1 7.1 22.2 60P 120P d HC HDR Hi-Res Lossless SHV UHD VOD *M* A B C D E F G H I J K L M N O P Q R S T U V W X Y Z'; + case 498: + return 'hoka koko sa Shou Zi Shuang de Er Duo Jie Tian Jiao Ying Wu Liao Qian Hou Zai Xin Chu Zhong Sheng Fan Sheng Chui Yan Tou Bu Yi San You Zuo Zhong You Zhi Zou Da Jin Kong He Man You Yue Shen Ge Ying Pei [Ben] [San] [Er] [An] [Dian] [Da] [Dao] [Sheng] [Bai] De Ke Fu Lu Shou Xi Shuangxi Cai'; + case 499: + return ':cyclone: :foggy: :closed_umbrella: :night_with_stars: :sunrise_over_mountains: :sunrise: :city_dusk: :city_sunset: :rainbow: :bridge_at_night: :ocean: :volcano: :milky_way: :earth_africa: :earth_americas: :earth_asia: :globe_with_meridians: :new_moon: :waxing_crescent_moon: :first_quarter_moon: :waxing_gibbous_moon: :full_moon: :waning_gibbous_moon: :last_quarter_moon: :waning_crescent_moon: :crescent_moon: :new_moon_with_face: :first_quarter_moon_with_face: :last_quarter_moon_with_face: :full_moon_with_face: :sun_with_face: :star2: :stars: :thermometer: * * :white_sun_small_cloud: :white_sun_cloud: :white_sun_rain_cloud: :cloud_rain: :cloud_snow: :cloud_lightning: :cloud_tornado: :fog: :wind_blowing_face: :hotdog: :taco: :burrito: :chestnut: :seedling: :evergreen_tree: :deciduous_tree: :palm_tree: :cactus: :hot_pepper: :tulip: :cherry_blossom: :rose: :hibiscus: :sunflower: :blossom: :corn: :ear_of_rice: :herb: :four_leaf_clover: :maple_leaf: :fallen_leaf: :leaves: :mushroom: :tomato: :eggplant: :grapes: :melon: :watermelon: :tangerine: :lemon: :banana: :pineapple: :apple: :green_apple: :pear: :peach: :cherries: :strawberry: :hamburger: :pizza: :meat_on_bone: :poultry_leg: :rice_cracker: :rice_ball: :rice: :curry: :ramen: :spaghetti: :bread: :fries: :sweet_potato: :dango: :oden: :sushi: :fried_shrimp: :fish_cake: :icecream: :shaved_ice: :ice_cream: :doughnut: :cookie: :chocolate_bar: :candy: :lollipop: :custard: :honey_pot: :cake: :bento: :stew: :cooking: :fork_and_knife: :tea: :sake: :wine_glass: :cocktail: :tropical_drink: :beer: :beers: :baby_bottle: :fork_knife_plate: :champagne: :popcorn: :ribbon: :gift: :birthday: :jack_o_lantern: :christmas_tree: :santa: :fireworks: :sparkler: :balloon: :tada: :confetti_ball: :tanabata_tree: :crossed_flags: :bamboo: :dolls: :flags: :wind_chime: :rice_scene: :school_satchel: :mortar_board: * * :military_medal: :reminder_ribbon: * :microphone2: :level_slider: :control_knobs: # # :film_frames: :tickets: :carousel_horse: :ferris_wheel: :roller_coaster: :fishing_pole_and_fish: :microphone: :movie_camera: :cinema: :headphones: :art: :tophat: :circus_tent: :ticket: :clapper: :performing_arts: :video_game: :dart: :slot_machine: :8ball: :game_die: :bowling: :flower_playing_cards: :musical_note: :notes: :saxophone: :guitar: :musical_keyboard: :trumpet: :violin: :musical_score: :running_shirt_with_sash: :tennis: :ski: :basketball: :checkered_flag: :snowboarder: :person_running: :person_surfing: :medal: :trophy: :horse_racing: :football: :rugby_football: :person_swimming: :person_lifting_weights: :person_golfing: :motorcycle: :race_car: :cricket_game: :volleyball: :field_hockey: :hockey: :ping_pong: :mountain_snow: :camping: :beach: :construction_site: :homes: :cityscape: :house_abandoned: :classical_building: :desert: :island: :park: :stadium: :house: :house_with_garden: :office: :post_office: :european_post_office: :hospital: :bank: :atm: :hotel: :love_hotel: :convenience_store: :school: :department_store: :factory: :izakaya_lantern: :japanese_castle: :european_castle: * * :flag_white: :flag_black: :rosette: * :label: :badminton: :bow_and_arrow: :amphora:'; + case 500: + return ':rat: :mouse2: :ox: :water_buffalo: :cow2: :tiger2: :leopard: :rabbit2: :cat2: :dragon: :crocodile: :whale2: :snail: :snake: :racehorse: :ram: :goat: :sheep: :monkey: :rooster: :chicken: :dog2: :pig2: :boar: :elephant: :octopus: :shell: :bug: :ant: :bee: :lady_beetle: :fish: :tropical_fish: :blowfish: :turtle: :hatching_chick: :baby_chick: :hatched_chick: :bird: :penguin: :koala: :poodle: :dromedary_camel: :camel: :dolphin: :mouse: :cow: :tiger: :rabbit: :cat: :dragon_face: :whale: :horse: :monkey_face: :dog: :pig: :frog: :hamster: :wolf: :bear: :panda_face: :pig_nose: :feet: :chipmunk: :eyes: :eye: :ear: :nose: :lips: :tongue: :point_up_2: :point_down: :point_left: :point_right: :punch: :wave: :ok_hand: :thumbsup: :thumbsdown: :clap: :open_hands: :crown: :womans_hat: :eyeglasses: :necktie: :shirt: :jeans: :dress: :kimono: :bikini: :womans_clothes: :purse: :handbag: :pouch: :mans_shoe: :athletic_shoe: :high_heel: :sandal: :boot: :footprints: :bust_in_silhouette: :busts_in_silhouette: :boy: :girl: :man: :woman: :family: :couple: :two_men_holding_hands: :two_women_holding_hands: :police_officer: :people_with_bunny_ears_partying: :person_with_veil: :blond_haired_person: :man_with_chinese_cap: :person_wearing_turban: :older_man: :older_woman: :baby: :construction_worker: :princess: :japanese_ogre: :japanese_goblin: :ghost: :angel: :alien: :space_invader: :imp: :skull: :person_tipping_hand: :guard: :dancer: :lipstick: :nail_care: :person_getting_massage: :person_getting_haircut: :barber: :syringe: :pill: :kiss: :love_letter: :ring: :gem: :couplekiss: :bouquet: :couple_with_heart: :wedding: :heartbeat: :broken_heart: :two_hearts: :sparkling_heart: :heartpulse: :cupid: :blue_heart: :green_heart: :yellow_heart: :purple_heart: :gift_heart: :revolving_hearts: :heart_decoration: :diamond_shape_with_a_dot_inside: :bulb: :anger: :bomb: :zzz: :boom: :sweat_drops: :droplet: :dash: :poop: :muscle: :dizzy: :speech_balloon: :thought_balloon: :white_flower: :100: :moneybag: :currency_exchange: :heavy_dollar_sign: :credit_card: :yen: :dollar: :euro: :pound: :money_with_wings: :chart: :seat: :computer: :briefcase: :minidisc: :floppy_disk: :cd: :dvd: :file_folder: :open_file_folder: :page_with_curl: :page_facing_up: :date: :calendar: :card_index: :chart_with_upwards_trend: :chart_with_downwards_trend: :bar_chart: :clipboard: :pushpin: :round_pushpin: :paperclip: :straight_ruler: :triangular_ruler: :bookmark_tabs: :ledger: :notebook: :notebook_with_decorative_cover: :closed_book: :book: :green_book: :blue_book: :orange_book: :books: :name_badge: :scroll: :pencil: :telephone_receiver: :pager: :fax: :satellite: :loudspeaker: :mega: :outbox_tray: :inbox_tray: :package: :e_mail: :incoming_envelope: :envelope_with_arrow: :mailbox_closed: :mailbox: :mailbox_with_mail: :mailbox_with_no_mail: :postbox: :postal_horn: :newspaper: :mobile_phone: :calling: :vibration_mode: :mobile_phone_off: :no_mobile_phones: :signal_strength: :camera: :camera_with_flash: :video_camera: :tv: :radio: :vhs: :projector: * :prayer_beads:'; + case 501: + return ':twisted_rightwards_arrows: :repeat: :repeat_one: :arrows_clockwise: :arrows_counterclockwise: :low_brightness: :high_brightness: :mute: :speaker: :sound: :loud_sound: :battery: :electric_plug: :mag: :mag_right: :lock_with_ink_pen: :closed_lock_with_key: :key: :lock: :unlock: :bell: :no_bell: :bookmark: :link: :radio_button: :back: :end: :on: :soon: :top: :underage: :keycap_ten: :capital_abcd: :abcd: :1234: :symbols: :abc: :fire: :flashlight: :wrench: :hammer: :nut_and_bolt: :knife: :gun: :microscope: :telescope: :crystal_ball: :six_pointed_star: :beginner: :trident: :black_square_button: :white_square_button: :red_circle: :blue_circle: :large_orange_diamond: :large_blue_diamond: :small_orange_diamond: :small_blue_diamond: :small_red_triangle: :small_red_triangle_down: :arrow_up_small: :arrow_down_small: * * + + + * * M + + + :om_symbol: :dove: :kaaba: :mosque: :synagogue: :menorah: * :clock1: :clock2: :clock3: :clock4: :clock5: :clock6: :clock7: :clock8: :clock9: :clock10: :clock11: :clock12: :clock130: :clock230: :clock330: :clock430: :clock530: :clock630: :clock730: :clock830: :clock930: :clock1030: :clock1130: :clock1230: * * * @ @ * * :candle: :clock: * * :hole: :levitate: :detective: :dark_sunglasses: :spider: :spider_web: :joystick: :man_dancing: @ @ @ @ @ @ @ @ @ @ @ @ :paperclips: * * :pen_ballpoint: :pen_fountain: :paintbrush: :crayon: * * :hand_splayed: * ^ v V :middle_finger: :vulcan: v < > < > < > ^ v ^ v ^ v :black_heart: :desktop: * * :printer: * * * * * * * * :mouse_three_button: :trackball: * * * * * * # # # :frame_photo: # # # # # :dividers: :card_box: :file_cabinet: # # # # # # # # # # # # :wastebasket: :notepad_spiral: :calendar_spiral: * * * * * X aA Aa :compression: :key2: :newspaper2: # # :dagger: * :speaking_head: v ^ > < :speech_left: @ @ @ @ @ @ :anger_right: * * * :ballot_box: x x x x v v :map: :mount_fuji: :tokyo_tower: :statue_of_liberty: :japan: :moyai:'; + case 502: + return ':grinning: :grin: :joy: :smiley: :smile: :sweat_smile: :laughing: :innocent: :smiling_imp: :wink: :blush: :yum: :relieved: :heart_eyes: :sunglasses: :smirk: :neutral_face: :expressionless: :unamused: :sweat: :pensive: :confused: :confounded: :kissing: :kissing_heart: :kissing_smiling_eyes: :kissing_closed_eyes: :stuck_out_tongue: :stuck_out_tongue_winking_eye: :stuck_out_tongue_closed_eyes: :disappointed: :worried: :angry: :rage: :cry: :persevere: :triumph: :disappointed_relieved: :frowning: :anguished: :fearful: :weary: :sleepy: :tired_face: :grimacing: :sob: :open_mouth: :hushed: :cold_sweat: :scream: :astonished: :flushed: :sleeping: :dizzy_face: :no_mouth: :mask: :smile_cat: :joy_cat: :smiley_cat: :heart_eyes_cat: :smirk_cat: :kissing_cat: :pouting_cat: :crying_cat_face: :scream_cat: :slight_frown: :slight_smile: :upside_down: :rolling_eyes: :person_gesturing_no: :person_gesturing_ok: :person_bowing: :see_no_evil: :hear_no_evil: :speak_no_evil: :person_raising_hand: :raised_hands: :person_frowning: :person_pouting: :pray: * * * * * * * * * * * * * * * * * * * * * * * * # # # # - | - | & & & & & & " " " !? !? !? / \\ / \\ :rocket: :helicopter: :steam_locomotive: :railway_car: :bullettrain_side: :bullettrain_front: :train2: :metro: :light_rail: :station: :tram: :train: :bus: :oncoming_bus: :trolleybus: :busstop: :minibus: :ambulance: :fire_engine: :police_car: :oncoming_police_car: :taxi: :oncoming_taxi: :red_car: :oncoming_automobile: :blue_car: :truck: :articulated_lorry: :tractor: :monorail: :mountain_railway: :suspension_railway: :mountain_cableway: :aerial_tramway: :ship: :person_rowing_boat: :speedboat: :traffic_light: :vertical_traffic_light: :construction: :rotating_light: :triangular_flag_on_post: :door: :no_entry_sign: :smoking: :no_smoking: :put_litter_in_its_place: :do_not_litter: :potable_water: :non_potable_water: :bike: :no_bicycles: :person_biking: :person_mountain_biking: :person_walking: :no_pedestrians: :children_crossing: :mens: :womens: :restroom: :baby_symbol: :toilet: :wc: :shower: :bath: :bathtub: :passport_control: :customs: :baggage_claim: :left_luggage: ^ X i m f :couch: :sleeping_accommodation: :shopping_bags: :bellhop: :bed: :place_of_worship: :octagonal_sign: :shopping_cart: ^ ^ :hindu_temple: :hut: :elevator: :wireless: :playground_slide: :wheel: :ring_buoy: :tools: :shield: :oil: :motorway: :railway_track: :motorboat: ^ ^ ^ :airplane_small: ^ :airplane_departure: :airplane_arriving: :satellite_orbital: # # :cruise_ship: :scooter: :motor_scooter: :canoe: :sled: :flying_saucer: :skateboard: :auto_rickshaw: :pickup_truck: :roller_skate:'; + case 503: + return 'QE A F E W AF AR AR SV SV + + + * * * * * * * s n n v * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * T T T T T A MB VB R h n dn m drss ozss * * * * * * * * < ^ > v * * * * * * * * * * # # # # # # # # # * * * * * * * * * * + + + + + + + x x x x x x x * * * * * * * * * * * * * * * * * * * * * + + + + + * * * * * * * * * * * * * * * * * :orange_circle: :yellow_circle: :green_circle: :purple_circle: :brown_circle: :red_square: :blue_square: :orange_square: :yellow_square: :green_square: :purple_square: :brown_square: :heavy_equals_sign:'; + case 504: + return '< ^ > v < ^ > v < ^ > v < ^ > v < ^ > v < ^ > v < ^ > v < ^ > v < ^ > v < ^ > v < ^ > v < ^ > v < ^ > v < ^ > v < ^ > v < ^ > v < ^ > v < ^ > v \\ / \\ / - | < ^ > v \\ / \\ / < ^ > v \\ / \\ / < ^ > v \\ / \\ / < ^ > v \\ / \\ / < ^ > v \\ / \\ / < ^ > v < ^ > v < ^ > v - - - - < > < > < > < > < > < > - - \\ /'; + case 505: + return '+ + + * * * * * ^ ^ ^ ^ :pinched_fingers: :white_heart: :brown_heart: :pinching_hand: :zipper_mouth: :money_mouth: :thermometer_face: :nerd: :thinking: :head_bandage: :robot: :hugging: :metal: :call_me: :raised_back_of_hand: :left_facing_fist: :right_facing_fist: :handshake: :fingers_crossed: :love_you_gesture: :cowboy: :clown: :nauseated_face: :rofl: :drooling_face: :lying_face: :person_facepalming: :sneezing_face: :face_with_raised_eyebrow: :star_struck: :zany_face: :shushing_face: :face_with_symbols_over_mouth: :face_with_hand_over_mouth: :face_vomiting: :exploding_head: :pregnant_woman: :breast_feeding: :palms_up_together: :selfie: :prince: :person_in_tuxedo: :mrs_claus: :person_shrugging: :person_doing_cartwheel: :person_juggling: :person_fencing: + :people_wrestling: :person_playing_water_polo: :person_playing_handball: :diving_mask: :wilted_rose: :drum: :champagne_glass: :tumbler_glass: :spoon: :goal: + :first_place: :second_place: :third_place: :boxing_glove: :martial_arts_uniform: :curling_stone: :lacrosse: :softball: :flying_disc: :croissant: :avocado: :cucumber: :bacon: :potato: :carrot: :french_bread: :salad: :shallow_pan_of_food: :stuffed_flatbread: :egg: :milk: :peanuts: :kiwi: :pancakes: :dumpling: :fortune_cookie: :takeout_box: :chopsticks: :bowl_with_spoon: :cup_with_straw: :coconut: :broccoli: :pie: :pretzel: :cut_of_meat: :sandwich: :canned_food: :leafy_green: :mango: :moon_cake: :bagel: :smiling_face_with_3_hearts: :yawning_face: :smiling_face_with_tear: :partying_face: :woozy_face: :hot_face: :cold_face: :ninja: :disguised_face: :face_holding_back_tears: :pleading_face: :sari: :lab_coat: :goggles: :hiking_boot: :womans_flat_shoe: :crab: :lion_face: :scorpion: :turkey: :unicorn: :eagle: :duck: :bat: :shark: :owl: :fox: :butterfly: :deer: :gorilla: :lizard: :rhino: :shrimp: :squid: :giraffe: :zebra: :hedgehog: :sauropod: :t_rex: :cricket: :kangaroo: :llama: :peacock: :hippopotamus: :parrot: :raccoon: :lobster: :mosquito: :microbe: :badger: :swan: :mammoth: :dodo: :sloth: :otter: :orangutan: :skunk: :flamingo: :oyster: :beaver: :bison: :seal: :guide_dog: :probing_cane: :bone: :leg: :foot: :tooth: :superhero: :supervillain: :safety_vest: :ear_with_hearing_aid: :motorized_wheelchair: :manual_wheelchair: :mechanical_arm: :mechanical_leg: :cheese: :cupcake: :salt: :beverage_box: :garlic: :onion: :falafel: :waffle: :butter: :mate: :ice_cube: :bubble_tea: :troll: :person_standing: :person_kneeling: :deaf_person: :face_with_monocle: :adult: :child: :older_adult: :bearded_person: :woman_with_headscarf: :person_in_steamy_room: :person_climbing: :person_in_lotus_position: :mage: :fairy: :vampire: :merperson: :elf: :genie: :zombie: :brain: :orange_heart: :billed_cap: :scarf: :gloves: :coat: :socks: :red_envelope: :firecracker: :jigsaw: :test_tube: :petri_dish: :dna: :compass: :abacus: :fire_extinguisher: :toolbox: :bricks: :magnet: :luggage: :squeeze_bottle: :thread: :yarn: :safety_pin: :teddy_bear: :broom: :basket: :roll_of_paper: :soap: :sponge: :receipt: :nazar_amulet:'; + case 506: + return 'K Q R B N P N n N K Q R B N P k q r b n p K Q R B N P N n N K Q R B N P k q r b n p K Q R B N P N n N K Q R B N P k q r b n p K Q R B N P N n N E e E E e E NQ NR NB nq nr nb G A E H R C S g a e h r c s :ballet_shoes: :one_piece_swimsuit: :briefs: :shorts: :thong_sandal: :light_blue_heart: :grey_heart: :pink_heart: :drop_of_blood: :adhesive_bandage: :stethoscope: :x_ray: :crutch: :yo_yo: :kite: :parachute: :boomerang: :magic_wand: :pinata: :nesting_dolls: :maracas: :flute: :ringed_planet: :chair: :razor: :axe: :diya_lamp: :banjo: :military_helmet: :accordion: :long_drum: :coin: :carpentry_saw: :screwdriver: :ladder: :hook: :mirror: :window: :plunger: :sewing_needle: :knot: :bucket: :mouse_trap: :toothbrush: :headstone: :placard: :rock: :mirror_ball: :identification_card: :low_battery: :hamsa: :folding_hand_fan: :hair_pick: :khanda: :fly: :worm: :beetle: :cockroach: :potted_plant: :wood: :feather: :lotus: :coral: :empty_nest: :nest_with_eggs: :hyacinth: :jellyfish: :wing: :goose: :anatomical_heart: :lungs: :people_hugging: :pregnant_man: :pregnant_person: :person_with_crown: :moose: :donkey: :blueberries: :bell_pepper: :olive: :flatbread: :tamale: :fondue: :teapot: :pouring_liquid: :beans: :jar: :ginger_root: :pea_pod: :melting_face: :saluting_face: :face_with_open_eyes_and_hand_over_mouth: :face_with_peeking_eye: :face_with_diagonal_mouth: :dotted_line_face: :biting_lip: :bubbles: :shaking_face: :hand_with_index_finger_and_thumb_crossed: :rightwards_hand: :leftwards_hand: :palm_down_hand: :palm_up_hand: :index_pointing_at_the_viewer: :heart_hands: :leftwards_pushing_hand: :rightwards_pushing_hand:'; + case 507: + return '# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # | | | | | | - - - - - - # # # # # # # # # # # # # # # # # # # # # # # # # # # # # X X / \\ / \\ X X X X X X X X X X X X X X X - ^ v > < < < > v ^ [ ] # ] # # # X > > > ? + + + + + ^ 0 1 2 3 4 5 6 7 8 9'; + case 512: + return 'He Qi Qie Hai Qiu Cao Shi Si Jue Khang Khenh Yu Kong Tin Zi Xing Ba Cup Kha Khe Mou Dua Re Trut Ji Ye Jun Qian Lu Bui Xuoi Doi Dou Dua Luon Bik Chu Lin Duoi Sanh Shi Cha Cui Gom Bui Gom Qie 4 Ga Cung Nham Qi Giua Chan Suot Giua Xuyen Chuoi Huan Yi Zuo Jie Ay Zou Zi Za Jin Pai Dui Cong Shen Ben Ben Huang Mai Yin Gun Waang Saam Joeng Wan Jiu Ul Ut 4 It Chin Shen Tam Ut Lyun Ut Jiu'; + case 513: + return 'Vu Ye Dong Jue Jie Diao Le Jue Chui Ling Sing Ting Tho Er Er Er 5 Gen Gop Vai Hai Jo Ya Ban Yi Kep Nham Gieng Lam Nam Vai Wei Jie Yi Mat Mat Mat Mat Die Loeng Qi Le Xi Bao Xie Quen Zhang Quen Mat Yong Son Xu Die Dan Wei Gua Fan Coi Mo Xi Yan Trum Ni Dan Wu Jan Joeng Dan Voi Tao Yu Gong Mou Va Bom Kua Chu Qu Mo Jau Shi Gan Sheng Ging Hua Top'; + case 514: + return ' Tuo Waan Shou Nie Nhong Jyu Lap Yun Gua Zok Xiao Lao Dan Suo Mang Yi Te Jau Bi Ta Luo Sing Vai Nghi Nay Xien Tray Xi Hun Da Ju Du Jip An Phuong Jyu Ding Mei Ran Ai Yu Jian Qi Ji Ngai Nguoi Nho Thay Zung Min Fan Vung Zhou Zhi Zhong Nao Bing Zhuan Shu Xun Jue Qian Gua Tu Ying Zhi Kui Syun Jung Chen Lian Ya Guo Miao She Yu Si Sou Zhi Mei Mu Qie Fu Ju Bei Bi Suo Qian Ming Chan Sao Ji'; + case 515: + return ' San Paa Gong Qiong Rong Sou Sou Yao Wu Nap Na Phia Chou Shuai Zhe Li Gai Sui Zhan Zhuang Fu Man Ji Dou Mak Lei Caan Hui Jian Yan Zhi Bay But Bom Hen Mei Yao Di Yi Gap Bie Qu Yi Yang Zha Sha Jin Git Xum Lai Ging Git Cap Bay Lu Chau Dang Jue Qi Yu Vai Ngai Zai Sa Se Dun Jie Ke Yue Jian Yao Gon Jyu Xian Xiao Qiao Yu Qu Bam Ga Xian Luo Guang Ngai Dung Cheng Chuang Yi Zheng Zong Dui Zhai Tho Giong Fung Gaa Fei'; + case 516: + return 'Yi Meng Nghe Bian Jie Shu Liao Bi Su Di Jing Lou Troi Liu Bei Wen Meng Chan Doi Dao Doi Pin Jian Lin Gui Qi Hong Ji Xie Zheng Chan Trom Thoi Long Yao Chan Ngua Ngoi Sin Dian Chong Nei Nei Zhai Bian Chan Nghe Cau Xiao Nhau Cu Xin Jing Qian Qing Gu Wu Maau Fu Jyun Jan Gan Yuan Bing Wan Hang Rang Ro Vac Nhoc Niao Cin Lian Tin Rao Fan Di Truoc Rang Vang Sang Hui Yi Xian Dun Daam Quanh Ro Mong Lan Fu Xiong Liang Tao Ji Jie Zha Shi Vao Nhui Qi Bian Lan Lan Lin Zhi Bi Sheng Lon Vo Tron Sip Sheng Cyun Qin'; + case 517: + return ' Biao Xi Juan Bing Ji Xi Qin Hai Lun Yue Linh Lian Tam Gom Ban Heng Lim Qi Qian Zheng Mao Cong Na Mou Ting Zong Jiong Zhao Nian Cheng Qia Yu Jiao Zhao Di Jiu Sui Yao Wang Liao Tong Meng Xuong You Zeot Si Nap Lou Lieng Yin Bay Chong Mong Gan Jiu Leo Ngat Day Mat Qin Jiong Xie Mat Rong He Jan Tao Qiu Xie Jing Nian Jing Ji Zeon Tian Cui Die Qing Mui Maang Lun Vang Ping Ping Ce Die Lou Wun Quan Tron Lian Han Pang Tang Cong Ret Yi Xuan Suo Liu Shuang Shen'; + case 518: + return ' Bu Sou Dong Qin Shen Chan Hong Nong Ting Jiang Hui Chan Hei Xi Zhi Lok Mo Lai Li Li Huai He Jiao Yan Shu Shi Fung Zhen You Suo Wu Chang Cong Sap Ju Shu Jiu Wei Pang Huo Bay Jie King Zao Ou Gua Faai Hao Li Zhi Xian Bu Chang Moc Yun He Tao Biao Ra Diao Er Jiu Di Yi Kun Zhe Kuo Zhou Ju Shan Sha Diao Ban Ji Zhong Yi Kou Wu Ge Ba Cham Gou Xian Gua Liu Chi Guai Chuan Li Cu Shua Bi Dut Chem Bing Li Jiu Tiao Duo Jing Yan Quan Lie Ke Gen Zhen Fen'; + case 519: + return ' Yi Jiu Xu Jiao Lu Jiu Chou Xian Deo Kuai Dui Luo Xi Qin Bu Qia Dan Dam Hui Cao Pi Ya Beng Guo Gua Ju Qia Jue Li Bao Hua Jiao Xe Thai Cun Tach Dut Qia Zha Qia Zhe Cha Ying Yan Chong Chi Wan Me Sou Peng Kan Yuan Gaai Mo Cham Mo Chou Suo Tu Zhe Ti Wu Da Li Cha Rong Gong Que Li Thien Tao Cao Chat Got Bam Li Mi Chi Gun Lou Chuang Suo Jiao Jin Gwaai Fa Zhai Deo Dut Lan Jin Cui Deo Ceng Zun Zhao Pie Zhan Xi Yao Fu Chong Cui Gua Ji Thien Hoat Se Zhan Ling Se Ye Ju Vac Tu Gat Rua Ru Ze Huan'; + case 520: + return ' Xian Qian Zhao Bua Cung Can Le Kuo Li Rou Tet Du Lie Riu Xe Ying Li Du Ling Truoc Wan Cim Chom Die Jiu Li Ku Keng Zhen He Bi Pi Hang Ran Sieng Zhuo Dui Yi Gang Nhan Ke Yi Mo Loi Can Geng Ke Shi Ran Ling Beng Duan Min Juan Nao Zi Khuot Zong Tang Xia Han Lue Qian Nhoc Mo Ou Hao Zha Juan Cong Vam Giup Giup Li Zha You Dian Jue Bei Yao Pie Lu Jin Kai Se Yang Jin Ke Ruon Chan Nian Wan Lu Yun Yao Bao Jun Xuan Zhou Moc Kui Qu Shao Sun Du Kuai Pao Bit Bao Fu Jiu'; + case 521: + return 'Ran Ju Cho Qiong Cho Zhou Hua Bao Yi Me Yi Yi Mao Ci Ruan Thia Bay 1 Ci Han Cong Xi Quan Tiao Diao Han Ye Kham E Wei Cang Diao Wui E Di Suan Quan E Ou Xuan Wu Giau Yi Mou Hu Han Au Shi Sa Hwe Bi Han Jing Xi Qin Cuo Ci Ban Dui Xi Zhi Luan Muoi Hu Ji Guai Gan Pang Nghin Chuc Ruoi Lung Xung Zhu Bi Tron Yu Nhay Nhu Qi He Chu Shao Chi Bo Reng You Nai Sai Hui Tiao Ban Xu You Chi Heng'; + case 522: + return ' Wai Xie Jue Sui Qing Zhuan Mong Ji Bi Xi Hing Ji Trung Jun Liao You Ngheo Ju Yue Bang Pi Ze Yi Di Qie Suo Ci Zhu Yue Jiao San Shi Me Yi Xia Yuan Guo Ke Cui Yi Cyun Li Dian Xi Bi Bian Mei Li Sou Lim Liu Gui Ke Yi Xi Yin Ke She Wo Pi Co Yue Hong Rap Li Fu Lou Jue Xian Day Day Dian Li Rot Tu Jian Bai Di Zhang Yu Leon Dui 6 Can Tu Tan Ji Qi Shan Nian 3 Di'; + case 523: + return ' Bo Guan Bi Tranh Xing Zeon Cut Zhen Bo Bo Sa Mo Fu Mot Tao Bang Jik Biao Xi Jie Jin Qian Si Jing Chi Jing Tro Sui Zha Li Zhuo Bian Tun Bi Fei De Zhu Jeoi Ju Yi Ya Chi Gua Zhi Reng Leo You Bo Ji Pin Ying Yang Mang Ge Ji Long N Sa Chuan Ci Wu Ren Duc Jyu Ri Dai Ji Yi Ran Huo Gua Zhe Pi Za Ban Jie Hou Xian Hui Cai Zha Dai Ge Pi Hin Pian Shi Liang Yue Hu Bian Reng Reng Waan Danh Zi Tuou Luk'; + case 524: + return 'Dieu Gay Ngoen Nham Yi Zhi Jin Weng Chao Qiu Mut Zhu Zha Po An He Chu Yan Khen Shi Hu E Keoi Meo Eot Phinh Shi Lou Tuo Dai Wai Po Rong Ju Bo Tam Dat Nip Mieng Quai Dang Hoet The Rin Se Ro Nhai Phom Yu Dou Gui Shou Suo Ni Zhou Long Bing Zun Ye Ran Ling Sa Lei E Zhong Ji E Zuo Na Yun Vo Ming Haau Xie Zui Shu Diu Fa Ren Bang Han Hong Yi Yi Ke Yi Hui Zheng Gan Thau Hao Dau Huyt Nho Lai Nhung Thuc Tre Jing Ge Nou Qie Die Ji Yi Yi Fu Shuo Shuo Yong Ken Hua Hong He He Qian Qia Si Ce Bang Uc Loi Bei Keoi Caau Dap Xac Nhu Thay Cai Fau Jue Hoi Jing Ke Ai Lou Tu Chuang Lan Song Cheng Wei'; + case 525: + return ' Nu Jiu Bin Ngoen Ro Phao Nhanh Nhan Oc Mang Nuc No Renh Day Chieng Miu Voi Do Thon Bo Toac Gung Ke Uong Ban Bieng Xiao Sheng Hou Vum Ngoam Zhu Guan Ji Ji Xi She Ou Hu Ta Xiao Zao Bo Qi Wa Tuo Dao Na Daam Keu Mui Hong Net Ji Zaat Gu Xap Mep Mun Ngan Zhai Ya Wu Zhen De He Ang Pi Se Fen Gua Ji Po Ming Xuan Han Gang Ba Zong Meng Faat Huo Pe Tham Nhu Sua Ngoam Ga Treu Moi Vieng Se Bang Pha Ria Can Chum Be Phinh Nghenh U Dat Beo Quai Nhau Wong Suc Sat Bop A Kieng Zai Sua Nhinh Ep Tre Troi Du Mai Suong Kung Meo Dian Xi Da Nang Hei Chut Diao Luo Ke Yi Jue He Ji He Nie Run Qian Dai Shao Ke Zhu Shi Lu Jia Pian Hou Ji Ta Chou Wo Jing Po Zhai Xin Bian Xu Gu Jie Xian Phao Danh Mieng E Bo Piao Za'; + case 526: + return ' Pai Tu Ying Kak Tap Mei Naa Ge Kam Soek Bou Quat Niu Dan Ling Xua Tuc Song Cau Ten Ten Saap Dum Bai Bi Huc Phuc Hong Giai Ke Khan Khac Lay Ren Vac Tau Xam Xiang Nuo Ge Bo Xie Zhen Yu Ni Moi Chia Map Xun Wa Ang Han Hong Dan Nuo Cao Ji Neng Yong Xiao Chua Yao Ge Tang Bao Chan Chat Xu Hai Chou Jian Zuo Wei Da Pi Ko Be Bem Khu Chu Git Quan Ngo Kam Lan Maai Zam Ria Cay Chiu Hei Gwe Huan Xi Pen Liu Mu Mie Lang Tui Ban Ge Ku Lung Jia Bo Chiu Choi Dieu Ri Trou Leu He Bong The Vong Xang Hung Chan Ghe Hat Chac Naap Choac Tim Ri Que Cop Xui Suot Chau Ngoan Do Guong Ngon Han Oang Bep Gian Dai On Quat Tuech Bua Huan Zu Luo Ngoam Thoi Li Zeot He Mo Shui Shen Kang Chi Ling Luo Yan Zhao Chua Gu Qin Tan Fen Tu Ling Lang Mang Hen Zi Tim Aa Bai Dau Moi'; + case 527: + return ' Paai Lan Zan Wu Li A Lue Zhi Chou Jiang Jian Maan Lun Yi Shang But Ngai Ho Kang Nhoi Can Khoach Danh Nin Thay En Gan Dan Ji Biu Mach Song Ran Ngau Xo Dan Zap Tham Thung Nuot Nat Thin Tham Mon Nac Syut Ram Nhai Ham Ngo Xia Neng Ngon Thua Thep Giuc Nhan Hang Nha Chong Oam Yi Nin Hon Hui Zha Kik Han Yin Bi An Xia Ni De Di Jian Pan Yu Chuai Za Cha Zhe Se Pen Gu Zhe Li Dou Chou Zui Po He She Long Nha Treu Thue Doi Qi Ngoang Shu Rum Jin Ling Bai Kang La Xu Jin We Chuan Yue Bang Zaa Ging Vao Seu Nuot Then Giam Toet Nhun Nhap Hang Sao Si Xep Moi Ngau Mai Xie Jiu Ji Yue Jian Han Het Sa Hui Qiao Se Zui Nhip Lu Hua Chu Shan Wo Ji Zhuo Xian Yi Guo Kui Gaa Saau Soe Wet Am Ngui Sut Nhao Dat Lem Ngay Khan Choan Nhao Ngat Nham Ngoi'; + case 528: + return ' Loi Dong Zhou Lu Bo Shi Ying Ku Nam Zip Bei Nich Tuong Can Du Phao On Oai Bo Lok Voi Bam Tui Cau Neu Chuyen Thoi Hao Goi Quan Ua Khoac Ngon Ron Zhi Xie Ye E Lu Han Ye Luo Chuo Fan Zhi Ying Wen Wa Ai Yu Am Hua Lie Jing Za Khay Hon Non Wo Hang Xao Cac Zang Dui Ji Wo Dyut Ji Xi Zhan Tuan Gan Zit Doeng Kwaat Do Ngon Ziu Pheu Cha Thot So Khao Xong Ngo Hun Pho Mom Reu Mom Buk The Yu Xin Eng Loc Lie Ban Zhi Shi Lao Lai Wei Pao Chi Ying Dou Dou Bao Qie Shu Zhi Lie Ze Peng Zhe Ngau Rang Ran Dang Ray Troi Lin Nhanh Khoan Thom Ou Leng Xie Ji Lai Ying Ceng Bai Aak Gaa Khe Tron Nhang Chem Phan Doe Dan Thanh Boc Bo Treu Gung Le Mua Nhom Mut Ren Ngoi Xac Lun Long Xi Laai Lin Heoi Gui Xing Ceoi Sek Li Ci Chen Gheo Dang Theo Nho Phac Thot'; + case 529: + return 'La Lum Qing Ruc Gam Ham Ung Jian Dao Jian Qing Xie Ying Ha Zhe She Mi Huan Liem Lom Dang Non Khan Toe Khem Hun Thung Ren Jik Tot Cu Ru Sa Huo Yi Di Luan Yi Soe Can Bo Pang Tan E Zang Cong Laa Dang Bun Hum Gion Nheo Trom Lai Lanh Ngong Nhau Zhai Xi Mang La Yun Xang E Gam Die Nan Them Dem Nguyen Gheo Hoai Guan On Huan Khuyen Shi Jian Ngay Zhan Ji Huan Gwang Nhau Xon Nhep Wan Luo Wok Sac Keu Sac Dou Nham Lian Trom La Hen Giem Gu Giau Nie Nan Jiu Yue Yao Chuang Can Li Dun Nan Nan Ri Yue You Yin Guo Dang Zhen Mi Die Zhen Doe Kua Han Song He Ji Zhe Bing Wei Tou Tu Gang Lou Quan Hun Zhuan Que Hong Dang He Tai Guai Yu Nhot Ya Wan'; + case 530: + return 'Qun Jue Ou Chuong Quan Zhi Ling Wu Xin Da Yuan Yuan Mo You Waan Wu Zhang Chuong Xuan Rao Gun Yu Chuong Xia Bian You Yin Xuan You Lei Tron Ting Zhen Zai Ga La Que Ju Ji Chun Da Tun Ai Hon Cong Zi Huang Yi Zhuang Ngo Bao Chi Ri Lu Jie Shi Zuan Sing Loc Tum Moc Yi Fen Fen Mo Shu Saai Ao Pi Ping Po Jia Zhou Qiu You Tan Juk Rong Mi Jyun Tin Chau Cho Sanh Yi Rong Yin Lie Qiong Ray Nieu Nen Loi Coi Hui Ji Gao Kwai Zeon Cat Vach You Cha De Yin Yu Bei Bo Bit Lo'; + case 531: + return 'Bet Fan Kok Ce Fat Qiao Cha Xin Chi Day Dia Ham Zao Kui Fei Ta Guai Duo Gui Zhi Baan Mang Dam Genh Chan Nao Hu Tao Che Vung Lam Dum Mun Nui Them Xui Yi Go Ben Nie Zhai Huan Du Qi Ce Chui Da Zeon Zhi Geng Weng Du Chi Sai An Kuo Wo Ying Pian Bun Nam Coi Trieng Hang Gieng Mo Ngoi Chau Me Ngoi Ngoi Zha Zhua Thong Su Ni Gung Zhu Chan Beng Ni Zhi Hui Long Joeng Xia Zhi Xi Jiang Dum Hong Luong Ma Xo Ngach Tret Xay Bui Dui Fu Jiao Chao Bai Lie Ao Dap Gei'; + case 532: + return ' Zao Chu Tuo Hao Kang Yin Xian Hoc Nut Dat Ngua Fu Bie Kui Qie Sa Je Ve He Da Ye Zhang Liang Dui Lao Xun Gam Chum Kwan Sam Doi Thoai Zhi Ku Lan Sui Wo Ku Neo Cat Coi Jian Vuon Con Gom Con Den Vong Jiang Zhui Shuang Yu Sa Yu Lan Yu Qian Ju Lie Shu Xian Gai Mun Dao Tai Tian Ech Cau Ghe Nieu Suong Meng Di Mian Joeng Chat Hui Bai Dung Loi Vung Am Xep Cho Ghe Duo Duoi Lie Vai San Lai Yin Lan Jiao Huo Doc Chinh Tho Ranh Chem Guo Chen Zhan Wan Mi Ngoi Chum Kui Duo Fan Ray Yin'; + case 533: + return ' Nan Lei Chau Lom Nen Lan Gong Ben Ting Yao Wang Jie Xiu Shu Wei Yu Trau Zhan Ang Sang Chou Kua Ju Hai Mian Hang Chou Ling Zong He Hing Kwai Kun Zhong Zhao Die Gou Yun Dan Nuo Hing Bing Ran Chan Nhom Rong Yin Chan Zhi Guai Nuo Shen Su Bon Wo Chi Dem Mie Zhi Sanh Qi Gou Sai Gom Ve Lou Zi Nhieu Nhieu Lam Dang Tum Xian Muong Rou Peng Xi Kua Gui Chun Jie Jie Xi Ku Gioi Gu Zha Fan Xie'; + case 534: + return ' Fan Huan Niao Xi Hau Taai Cu Gun Ban Xi Qia Mang Zhe Mat Lon Juan Bie Zong Bie Quan Xi Jiao Quan Zhi Tian Kai San Zi Gang Jie So Muong Bie Dou Zui Canh Nhon Yan Bi Xon Kech Kuai Yan Wei Huan Hao La Gong Fan Meng Lei Di Lon Bing Huan Co Wa Jue To To Hai Chi Ba Jiu Di Maa Zhang Jyun Da Shi Hao Tong Mat Ji Ye Daan Gai Taai Bi Pi Yao Di Can Pin Yue Qie Pi Nua Bing Kaa Tuo Xie Jau Wing Juk Ye'; + case 535: + return 'Fan Gua Hu Ru Ran Fou Huang Zat Syu Ru Mao Di Dui Hui Xi Xiu Ran Yi Zhe Ji Gao You Pu Hang Saam Wui Bua Chu Cu Zhe Niao Qie Cha Niao Sui Kep Va No Kwan Cha Cheng Yao Du Wang Nian Mi Lau Nou Xi Yao Chan Bou Mou Ji Dai Laai Fan Zi Jyun Can Vo Di Bong Xie Mie Keng Cu Sheng Pan Hu Ke Xian Hou Qiong Zong Fu Nai Ni Ku Ci Leoi Ping Gwai Ping Wun Nen Jyun Fui Ge Hou Ai Shi Sing Jing Bing Goeng Xiu Cong Jiao Zha Xiao Lian Qu Shan Xie Gong Mie Chai En Dou Go Zi Haa Jan Fui'; + case 536: + return ' Kou Tiao Shi Pi Sang Guan Hao Zhi Yang Tong Bi Mo Fu Zuk Tong Cuoi Qiang Tai Gin Mun Syut Zhi Wing Zou Sou Niao Juan Yang Huang Leo Min Cai Beng Mo Chao Lu Shao Bu Zeng Si Zui Yue Zan Luan Seon Ging Cong Guk Gei Qu Doi Di Ling Miao Mei Zhuan Haan Man Wan Dang Yuan Sau Ju Hui Qi Yun Man Mo Jing Co Wo Kwan Jyu Piao Jin Yao No Vo Sui Gam Chi Ni Sou Niu Shu Piao Han Ban Soeng Gaa Mung Caai Yao Nei Mai Cuoi Shi Yuan Cai Jie Xie Wai Sen Yan Xiao'; + case 537: + return ' Gaan Haan Can Chua Xie Li Fan Coi Coeng Geoi Moi Moi Haa Zhu Na Zhuan Ji Kui Gioi Re Luo Bou Qia Wan Lyun Shu Cheng Yi Zi Hao Jiao Haau Hui Nhat Xiao Ci Hou Chau Ga Ji Noi Dua Ni Laai Ni Ti Seon Nit Con Ju Ming Me Li Zhong Long Xu Chu Qiong Fu So Bin Gu Ji Qi Xi Deng Er Mun Shu Tong Xiao Pi Rot Dan Ji Chat Nhang Xiao Coi Cong Bin Rong Gwai Mian Mian Shu Xiao Bao Wa Pao Fu Gai Hu Heng Zhu Guai Gui Giua Coi Dai Bin Huang'; + case 538: + return 'Cha Xia Ju Yao Giua Fen Zao Feng Ju Yu Tot Hun Cung Jie Xiong Ning Nai Chu Giu Tru Nou Sheng Yu Huan Geng Wan Gaa Tuo Qiao Ning Yin Jia Suo Jie Xi Weng Mang Yang Yao Mang Ou An Lou Chua E Zi E An Xum Huo Ceng Cho Xiong Ji Zuo Qi Zheng Co Ji Qi Juan Ning Rem Se Sao He Rong Qin Kin Lan Ju Li Shi Lung Ni Xian Fu Ru'; + case 539: + return ' Xiong Gui Ji Meng Fu Xuong Sai Yu Jiao Meng Long Qiang Mi Yi Long Han Ni Lao Seng Lin Yu Nuo Wu Bian Bian Xuan Jian Cam Tac Bian Gang De Cyun Zhuan Ban Rong Shuan Cut Jia Hui Mon Zhan Bai Lie Xie Bun Chut Be Jian Shou Xiu Chut Trut Kao Gwik Guan Luan Nhi Nhon Gwik Nou Chang Gwik Hoen Nhe Mon Chut Nho Mon Dep May Be Chut Liang Ot Choai May Hoan Mo Nai Ru Nit Xiu Zhi May Be Be Be Cao May Be Khi Nhen Mon Nhon Mon Teo Li Tho May Chuong Chuong Hen Nhon Mong Hen Lan Nhon Nheo Chan Oat Wang Wong Li Wu Pao You Gan Mong An Xiu Shui Rui Ban You Huo Hui Zuo Xiao Mian Ga Yuan Bo Chao Tui Bo Ga Tiao'; + case 540: + return 'Na Hu Nie Hui Lou Ti Ghenh Qiao Qiao Zhong Di Lin Quan Zhuan Lei Xie Ren Dang Du Nian Shi Xian Kek Zhi Ai Ci Pu Shi Qu Shu Dian Xiao Shui Huan Yi Juan Zhi Tsubi Zhao Xu Thuoc Long Tyun Zhu Suo Go Die Gang Qu Ke Hu Ju Qing Ve Bing Ti Jue Qiu Ke Jiang Va Sang Yun Vai Gwat Mei Pi Qu Mi Ti Ngoe Xai Kai Cuoi Bi Qu Va Tiao Chu Ve Ju Xi Cut Cuoi Rot Lin Do Do Do Toi Vo Duoi Chi Ji Cu Cuoi Lu Cu Cu Li Voi Via Noc Jue'; + case 541: + return ' Zhu Lu Vom Nie Quan Nhon Ya E Hu Ngai Mang Ngai Zi Wu Cha Qin Jie Hong Dan En Ze Hu Ang Jie Fu Yong Zung Feng Mu Se Cong Cu Kang Nui Dun Yao Ai Bao Po Shi Fan Ju Pi Wei Ku Qie Gan Kuang Sui Beng Jia Ya Ngan Kan Nie Xing Xi Lin Duo Chan Gong Pui Shi Dou Dui Jiang Yu Lu En Ci Gu Wei Che Huan Bie Han Tui Na Qi Tou Yuan Wang Wu Gao Keng Yi Sing Xiao Jin Gui Ya Sui Song Zhuo'; + case 542: + return ' Tu Xian Deo Ze Li Zhu Jie Voi Ti Xie Qiong Ya Ju Yin Zhi Kan Zi Ke Nie Qiang Wan Ze Ju Zi Kei Zik Ya Lin Qi Hui Qi Yang Sui Qi Gui Ghenh Chom Nghi Ghenh Qin E Zuo Ze Qi Ji Tuo Die Hui Mao Xu Hou Yan Xiang Cong Hu An Bing Coeng Duo Lei Zhu Die You Qi Shi Xun You Kan Qiao Qiang Pen Quan Ying Laam Ngong Din Sha Wai Tao Hong Pi Yao Tu Chai Xia Qi Qiong Jin Zhen Zhu Xi Weng Zhong Voi Rang Sui Von Chon Ke Kuo Kang Chao Bi Mo Zhu Han Yu Yi Ma Qi Gun Man Liao Lin Zu Lei Hu Chuang Qi Lei'; + case 543: + return ' Chi Po Die Mom Chop Lei Yi Gaan Dian Zeon Dun Gao Hu Xiao Ga Peng Shen Wei Vot Rung Dui Chao Yin Kuai Ku Zui Gu Yun Zhi Ji Cheng Xie Xian Zui An Hao Po Di Ye Nao Fai Non Jie Bang Lan Cang Bi Zhan Qi Lom Nao Lu Kuang Mo Lei Pao Li Ceng Dang Lei E Beng Jue Hei Hei Zam Xuan Nie Hai Doi Doc Lom Xian Jian Mi Nie Ngoi Cang Song Zeng Yi Chong Cang Ngong Lei Nuo Li Li Luo Tang Nie Nie Ji Lei Nang Lin Ling Xian Yu Zai Quan Lie Yu Huang Nao Xun Ju Huo'; + case 544: + return ' Yi Xi Se Jiao Yong Shi Jing Wan Ye Jiu Gong Hui Vang Sua Tron Sang Er Bang Lon Giau Sam To Lon Han Fu Fu Zhuo Ji Seon Seon Xuc Trang Va Bang Trai Qi Shi Diao Pei Xian San Chang Yue Gong Wu Fen Chan Nei Jue Zhao Qian Ao Wang Zhong Phuon Huang Bu Zhu Bi Chao Zheng Fu Kou Zuo Xuan Fu Yao Day Bo Du Bei Xie Shi Yi Hong Cui Yi Zhuan Coek Vua Chi Po Yin Tranh Yuan Jiong Mao Qian Yi Wu Lei Long Bit Vua Bei Huo Cong Kong Ta Han Qian Zhi Se Qian Guo Gun Jian Zhong Mian Gui Shi Mou E Ba La Zhou Ji Mei'; + case 545: + return 'Zao Cho Phoi Zha Yi Gou Gui Ying Shai He Bang Mo Meng Wu Dai Jiong Han Bau Tong Kou Li Zhi Hui Zan Diao Cu Dai Lau Man Zhi Kua Xiang Hua Liao Cui Qiao Jiao Xu Er Tuo Tan Zhi Vai Quat Manh Nao Mao Di Ceng Jiao Lian Sha Dan Sui Lian Guo Biao Lung Ci Dian Lu Ni Yan Lan Gai Chu Men Bi Zu Hui Chan Lai Xian Fen He Lim Yao Zhan Nei Luo Yuan Rem Neng Ren Phang Nen Ge Jian Ping Lai Nin Bie Nam Jian May May Bing May Tuoi Nen Mi Hu Diao You Yao Beng Chen Ji Yao Si Gwaan Si Guan Yan Doi Chi Sha Yan Yi Yi Che Han Huang Khuya Sen Shui Sui Ren Tan Zhi Fan Feng Tan He Mi Pi Bu Na Tian Ba Yi'; + case 546: + return ' Yan Tiao Yao Shen Ke Tong Xuan You Bai Chai Roku Xia Lu Kun Zang Qiu Cu Zui Lou Xia Shen Loi Pu Jing Qiang Yi Nie Dui Jie Sui Zhan Cou Beng Guan She Jin Di Dan Nai Nou Ji Yan Nou Du Wei Pian Hu Jia Ye Jun Lan La Yin Tui Nao Zu Kho U Ma Si Zhi Hui Zhui Hui Chu Che Vua Xiu Lan Cong Shen Mo Yi Yao Xi Zui Bing Yu Lu Vom Tui Wei Fen Shen Liao Shu Dan Juan Yu Xin Yao Su Huo Qian Ma Kai Day Lu You Choi Xian Day Wu Yin Xi Zhai'; + case 547: + return 'Xie Qu Li Rong Rong Qian Nghit Ling Luan Chan Yan Ting Gwing Cing Zheng Yan Yin Kui Qu Fu Yu Qi Qi Ji Yuan Gao Juan Qi Gai Quan Wei Zhi Jian Si Yi Qian Yi Li Zang Yi Cai Yi Ge Die Zhi Yi Zai Dai Su 2 Jie Chen Qu Han Xian Quan Jie Juan Dan Jin Bing Hu Jue Yu Kap Li Qiang Shui Ku Zhen Fu Shen Wang Ban Chui Tong Yi Yang Tuo Zhou Ji Giang Ten Cong Cong Xun Shen Xuan Liu Yuan Hu Zheng Peng Jue Bat Von'; + case 548: + return ' Zhi Pian Yuan Jian Pang Zhuan Xian Beng Cong Mo Guo Cheng Qiao Bi King Qiang Zhou Fan Bie Bo Rong Ding Quan Jiu Yao Xia Zao Dan Wu Tuo Hu Wui Xi Lai Fei Ji Hu Xian Shan Wing Fei Bay Cuo Coeng Fu Chu Diu Lan Xi Biao Yu Sui Xi Pou Shan Ji Jiao Yi Gung Wan Ji Wan Tui Faan Ang Liu Tian Chi Ran Sa Yin Pi Ci Tong Yin Ge Tiao Zheng Zhou Yi Kua Song Di Xie Seon Xiao Guang Tuo Feng Wu Xiu You'; + case 549: + return ' Ling Yan Dong Qi Tao Han Chi Song Quan Fung Han Hang Rou Qi Kai Yu Cha Cheng Yu Bing Cong Zhu Yu Mei Jue Liu Sao Yu Shuai Yuan Zhang Hong Shuai Chu Zhang San Xian Cui Meng Di Zhi Ao Xiu Pian Jiao Kuan Sa Xian Zha Dian Yi San Hui Shan Suot Chong Yi Xie Zhi Tiao Ping Xian Hang Xian Su Cuan Sau Sau Song Hei Xian You Yu Tai Jue Nang Dian Yi Bi At Gei Nai Xu Yi Ru Gong Yi Zhi Faan Zhi Xin Ji Xia Ruon Zhao Ne Xie Yi Sam Yu Nham Tech Thit Fu She Yuan Fan Fu Wu Xi Hong Thoai Sau Ji Chang Lo Te Nguong Mo'; + case 550: + return 'Pei Mu Qiu Mao Da Xia Shen Te Hong Bi Long Cik Si Ni Qiao Ruan Zing Sa Rung Rap Jiang Cha Mi Yi Suo Wu Xuan Xi Yi Nao Mai Hiu Wei Lay Ghiec Hung Cyun Rui Doi Nhon E Tim Kan Long Lu Zhuang De Zhi Xing Mui Geng Jin Xian Ji Cuo Lao Fen Ju Miao Xia Su Ti Ji Zhi Hu Kou Suo Ni Cay Xon Dan Dai Thoa Gian Long Khuay Teng Zhu Ngop Men Da Qiu Ya Xian Nei Zhi Bie Chong Lan Dong Qun Xiang Xiao Wan Ru Wang Ni Bai Ya Si Yin Yu Li Huo Mang Zang Ngo'; + case 551: + return ' Mung Leon Zi Bang Jan Ho Suc Luoi Gong Mung Thiep Be Xi Jiu Xie Qian Nuo Xing Duo Ji Wu Mu Yan Qi Na Chi Hou Sao Nao Cheng Cheng Kui Jia Tu Hong Du Xia Zhong Huo Chong Da Mao Yao Juan Net Vui Ray Khit Danh Shi Yin Gu Wu Fit Guo Ti Hong Fung Buon Hong Cau Eo Ngan Re Yi Tun Qiong Hai Qi Huo Ti Pi Geng Xie Mi Gao Ta Xiang Shu Fu Zhuan Liu Jan Fit You Ai Cheng Dui Lik Dua Set Chua Hen Nan Te Thoi Nep Tom Net Chac Cham Quen Rieu Nhong Dat Li Yang Li Lu Mu Sui Ai Kou Zhe Ai Teng Lu Tui Bi Nhuoc Mung Hui Huan'; + case 552: + return ' Geng Sung Thung Thuong Ho Ban Ngau Ngo Kuo Xin Sao Gian Dan Gan Hon Mam Man Mo Ngoay Shu Que Ba Tui Lang Fu Bie Tang Xiang Si Bo Mai Dang Gui Hei Xi Dang Yi Bi Gu Cui Se Ge Yu Na Li Zhi Mau Ci Zhao Kok Ji Ruan Chong Nhon Son Jie Ngung Chieu Then Tui Han Nuc Doi Nhang Chang Zhe Su Yong Qi Zhuo Kai Ye Qi Gom Jyu Nguoi Dep Xiong Mung Khan Ngay Gung Nghi Tui Quo Nhac Tuong Ham Nao Yi Chou Tuan Ai Pin Lie Mian Ai Mo Wei Ying Ni Bo Liu Khuay Rui Chu Dik Ngo Hung Lu Cha Chu'; + case 553: + return ' Sao Li Song Li Xi Yan Cuo Liu Meng Zhan Bo Chanh Cham Hon Chan Len Doi Nhit Ten Zhuang Dung Miao Li Ju Xie Xie Long Long Goe Teng Zhu Cam Lung Chan Lo Nhang Chan Xian Ying Pei Trai Xie Jiao Chong Sung Ngan Gion Jyun Nan Wan He Ngung Ngoi Tun Zong Laan Tho Hong Man Jin Qu Dou Qiu Zai Sheng Zai Ngo Yi 3 Hua Kan Yue Ni Si Wo Can Jian Mie Shao Rong Gan Qiang Shu Zhuo Shi Zin Ti Zha Zhan Nen Tit Fen Mie Ze Zhi Qian Han Ge Can Guo Jiao Ta Yong Ao Zha Xi'; + case 554: + return ' Xu Wu Mac Jue Ji Chi Wan Mie Zei Jie Shi Xi E Hu Hu Li Chu Yi Mao Xu Zhong Yi Ngo Liao Jian Jian Ju Zhu Wu Cong Quanh Ke Ke Li Bi Ge Xu Sha Ling Ke Cong Ho Bo Bian Shuan Qi Shan Buong Muon Ji Hat Qiao Triu Thuon Yi Jue Zhang Xin Tuo Hai Xia Tuo Yi Day Chop Se Nghi Cu Jiang Nan Peng Jie Xue Hu Geoi Vuc You Nu Ye Yin Kong Giam Moc Thay Ngat Vat Nang Vap Xiao Xiang Nao Zhang Keo Giat That Vun Go Deoi Tha Kam Jie Ngoay Nu Shan Wing Trot Phach Lou Day Xao Ngoac Trum Rung Quay Say Oan Dung Jia Bac Paak Zhou Rong Lu Sa Nu Wun Bo Zhe Qin Ci Zu Wo Wu Nie Xian'; + case 555: + return 'Hong Zong Bung Tem Giu Jip Wun Muc Chui Diu Tay Khuong Giang Lay Nem Nhu Phiet Ting Jin Doi Vot Jie He Tu Zhe Pin Jin Nan Cay Dun Xi Xie Xi Lao Duan Ji Cha Chou Gang Xiang Dao Thuoc Lang Xac Nhan Bian Xiao Xin Hak Ngon Gan Quao Cay Quet Tro Dan Voi Giau Khuay Nho Vay Vom Tua Lan Dui Xoi Diu Cham Buong Phay So Yu Xian Li Qian Mei Qiao Ya Qia Qiong Bang Zheng Luk Ze Shuan Sao Co Ron Nho Chut Co Quay Lu Xie Dik Fu Zhai Ngaau Be Co Quai Bop Va Quat Ngoi Khep Quay Huo Che Nho Sap Buoc Ven Vo Dut Va Roc Sua Ngang Ngon Lay Xo Niu Ze Duan Deng Yu Lu Sau Wan Xue Jiao Yue Zhi Wei Ge Ju Yan Cuo Mao'; + case 556: + return ' Fu Ai Xuan Gang An Ji Pi Zhi Nuo Day Ceon Jau Eo Wo Phu Gap Zung Pan Yi Jie Zi Jia Wai Jia Boi Danh Gieo Waa Me Ray Bon Dap Mo Go Ngan Cai Phung Xoi Day Nhot Dot Chan Suo Suo Ji Song Ti Pi Po Mi Lam Ye Qin Jin Jue Yuan Ruan Kik Ban Tou Run Tia Dom Ro Rung Cau Cham Xuc Gay Hai Kap Mai Mo Tho Phui Sai Thiep Bin Cau Long Wei Zao Qie Sou Lu Die Chuai Bi Zhu Ma Fei Pie Yin Xuan Ao Zhuo Zu Keoi Bi Lang Ti Tiao Jian Saai Dom Tong Muong Dao Luon Duo Dong'; + case 557: + return ' Bian Zap Daat Dua Chop Chong Van Dan Thoat Giam Day Dut Paang Mop Phen Ning Khay Dam Xay Lay Nuc Gay Xau Ngon Nhung Zhi Fen Kang Zhi Zhai Bi Kuan Ban Jue Qu Qi Lei Xie Tang Sou Bei Cou Yang Jian Bam Dua Deoi Paang Suon Zao Gaan Vao Doi Phay Nen Don Roi Quet May Gop Khoi Ngang Sum Quay Quo Don Cat Xap Moi Cham Chua Vot Ro Zhuai Van Fan She Qiong Po Tie Sha Za Niu Niao Guai Cui Zin Ngung Cui Saau Qiao Chong Die Loe Choang Quay Maan Pin Ci Bang Co Bum Mam Dom Bung Ngoi Am Chia Don Giu Nem Xan Niu Giet Tro Chen Yin Baai Vuc Xian Yi Miao Duan Zhou Kong Zhang Do Ban Deoi Xo Khenh Ru Hang Khuynh Quay Vo Liu Zhi Chan Du Yuan Suo Jie'; + case 558: + return 'Li Gong Bang Zan Guo Liao Shen Bong Deo Lan Dim Dung Kem Khoac Xia Chen Niao Cuan Wei Tuo Su Long Xiao Yan Bich Cyut Kwai Qing Choc Gai Mac Rung Nhoi Xe Chia Xi Yu Zheng Xie Chai Fen Guo Jing Lan Xian Ling Keo Xau Ep Luom Xo Tum Suong Tom Khit Lei Jun Xiao Cung Za Giam Que Lay Mo Phoc Guan Qie Luo Yao Luan Ta Naan Rap Rap Luo Bung Dim Bau Son Trac Uon Ba Chan Zhuo Luon Tiao Wan Ling Maan Yu Qi Qi Chia Chia Ji Bo Shi Fu Gui Dian Hao Gai Qi Cheng Hui Xia Shi Zhi Qi Hai Jiao Li Liao Qiao Sa Qi Shi Jie Hok Bei Bian Ba Jun Pi Dan Tang'; + case 559: + return 'Kui Ku Kou Shi Shi Ji Bao Ke Kuang Min Liao E Ge Wang Duo Qia Hua Hong Peng Jiao Qu Zi Zhou Kuang Sha Ji Wei Pu Xue Shao Lang Zhi Ting Da Yang Jin Zhi Ve Zhuo Za Chan Mao Kong Zhou Hu Peng Jiu Duk Chuo Min Va Xiao Du Wei Can Yu Du Kai Pi Cheng Chun Shao Yan Kuai Yue Qi Zheng Ke Qi Zhi Lu Pi Nuo Pao Fei Wen Meng Shan Xiong Duo Biao You Man Liao Xie Luan Qiao Deng Cheng Cheng Chuo Ce Tuom'; + case 560: + return 'Lei Zhan Li Lian Qun Chen Cheng Gu Zong Chou Chuan Lei Shuo Lu Va Fu Li San San Sa Nie Zuan Li Shu Fu Geoi Bi Mei Dao Shi Lon Gan Tan Li Man Li Bi Pan You Jiu Guo Liao Dong Wo Qia Dou Lie Jiao Lie Fui Dau Tiao Gia Guo Pang Qiao Di Yun Gao Mun Le Si Xin Xin Xiang Luo Beng Tiao Xiao Dou Dang Ting Zhuan Kan Ou Kan Wo Zuk Xin Ruan Zhuo Dang Cui Zhuo Cong Chan Hong Yang Vua Vua Yan Khuong Vuong Yan Zhen Goc Nuo Yan'; + case 561: + return ' Kei Fang Vuong Hui Yan Yu Ti Fu Ben Yan O Hui Vuong Huang Gui Yan Hu Biao Chech Sui Lech Zi Ji E Ji Kui Liang Huo Wei Zhuo Doek Ting Zai You Nay Ren Mian Kia Khuya Khuya Na Tu Dan Jue Xu Di Xiang Tam Luc Xiong You Gua Pui Xi Jyun He Ding Phoi Lu Xu Zhou Xian Huang Cha Shi Gan Nuo An Xie Fong Fong Hao Chang Hang Giay Don Qin Geng Shan Fu Ze Bu Dan Hiu Gwan Bua Dian Shen Zu Buoi Ranh Gio Sao Kia Kia Bie Chui Zhe Dai Jiu Wo Qiong Lin Hun Ji Fong Ceon Man'; + case 562: + return ' Cao Mu Die Wei Sik Kia Phoi Dem Mai Bong Ngay Dem Ray Chang Quat Ngay Cu Hong Bian Ti Tia Ying Tu Jyu Nau Coeng Mei Min Miu Geng Chi Cou Ti Ui Trua Linh Thoat Huo Qi Sao Sang Xuan Ang Nai Yang Shu Sha Gou Ting Mai Ya Huang Bin Chech Buoi Choi Rua Hao De Kia Gio Ai Ou Cao Ao Mao Gei Hou Se Noi Mo Chop Meng Tian Ngu Sang Xu Kan Lang Luk Seon Luk Bie Cong Xian Bay Chieu Sao Toi Chieu Rang Tun Nhoang Doi Yu Dan Ying Zhao Pu Dip Kwai Hui Hom Lat Com Rao Ai Mo Cai Mung Jing Lan Xom Lat Bao Hang Lie Piao Bo Qiong Bi Mit Gio Som Thua Yong'; + case 563: + return 'Hei Trua Trua Li Trua Khuya Haa Som Rua Nie De Doi Huan Tran Yue Chun Tran Li Nang Zhang Ling Chun Ce Xun Ju Hui Ngoat Quap Cong Vay Xeo Tong Nguc Vay Goc In Veo Ning Ju Het Cui Oam Cha Ngoeo Zao Cong Yu Ken Kuang Fei Ji Yun Qian Quan Liang Po Pei Dem Thang Geng Yi Luo Me Co Kuan Xuan Nian Chap Hu Ju Trang Xun Chieu Khuyu Rang Ye Xi Yue Tang Pin Dun Bei Ot Liao Yong Caat Jip Zi Ya Jiao Hon Kun Zhen Shu Shi You Pai Xiao Ji Tyun Muk Jan Qi He Zoi Kong Dak Then'; + case 564: + return 'Man Ye Chi Truong Nhum Thot Kao Yue Wa Nian Ci Yi Ging Xop Jiu Yang Li Dai Chong Queo Su Say Yi Han Yi Chong Hu Zhua Trat Roi Diu Tyun Qiong Duo Tou Pui Choi Gian Nhot Re Sim Tong Xian Trong Nen Fu Dian Xi Xie Zhen Qiao Tu Gwo Hat Vay Mang Xoai Sao Cong Tau Cai Han Kuang Suo Shou Tiao Vong Zhen Hon Nei Qian Yin Liang Sha Zi Pi Gao Jin You Shan Mi Ou Hu You Meng Jau Phim Hei Lou'; + case 565: + return ' Zhi Bi Shen Qi Xian Pan Kang Don Cui Bap Can Pha Xoi Ngoc Su Chanh Nhai Do Kang Bo Shuan Pi Zai Zhu Zi Sou Jiong Tok Chan Fan Xiao Yin Hou Mao Tu Gan Ji Yi Yu Jiong Pao Xiao Gou Gou Sun Xian Zhuan Co Hay Mau Gaa Noc Gang Chou Qiao Ti Yun Shan Lie Zhi Pai Peng Chay Chay Hong Mei Ca Chot Wai Se Bi Ghe Suot Trac Trot Ju Lai Soi Zi Qu Gu Jue Zhi Ang Qin Pi Zui Qian Cuo Ji Ti Ru Hai Xun Bei Zhi Dun Mun Dang Me Kei Cyun Fung Reng Chan Cham Chua Cha Le Gan Syu Gang Ta Tuo Yang Ku Zhi Ven Son Tu'; + case 566: + return 'Sau Ca Uoi Cay Thot Nep Son Cum Do Choac Li Bay Jian Ni Shen Bang Shuai Dou Qian Han Qia Gan Chun Cha Bi Yi Fu E Lao Hao Li Te Shen Yin Jian Cha Kai Nau Vai Zap Man Nie Cou Cuk Yi Tang Juan Goi Tri Nhan Be Song Mo Sop Lat Giau Chay Rui Chi Gou Jie Zhe Hu Mang Sot Con Mam Zou Si Fei Zi Zi Jie Si Chun Pao Ye Di Lei Xu Ru Pa Juan Xi Ye An Yi Jian Zuk Song Wo Se Zhi Bi Zhuan Jiang Hao Chi Dun Guk Trom Hong Bo Ji Chua Luo Rui Zoeng May Gu Va Khay Trai Be Du Chuom Cheo Then Tu Hu Du Sing Rao Dan Han Que Sha Zhan Ze Chuan Qi Die Zha Tou'; + case 567: + return ' Ci Sa Jau Luo Ji Mo Dip Hei Luo Qin Qiong Juan Ai Jian Hyun Lim Son Dun Vong Do Heo Ot Sau Vung Ti Wen Nhu Qiao Chua Jip Can Pai Hun Ai Shuo Lian Dui Ta Jin Bi Yan Gao Piao Yu She Jian Hu Lie Bian Su Jiao Ceoi Zhui Han Wing Gioi Khu Cuoi Chum Dun Son Tho Tram Xie Meng Fu Lu Tan Liu Xian Sang Cou Zhuang Chen Ze Muc Lian Li Sen Buoi Joeng Dang Trau Peng Tuo Fun Mong Tuo Liao Xiao Chui Huai Niao Qian Li Pao Tiao Liu Wu San Mo Ji Ying Zha Dui Noc Nhan Ran Ma Mem Yu Kyo Xian Xuan Shuan Xi Mei Sen Lian Jiu Lao'; + case 568: + return ' Xiao Zou Bong Tham Pheo Chua Chua Que Gau Liu Zhao Zhe Lei Tram Duan Gian Tram Re Mem Do Jian Shuan Zuo Qie Lao Ha Yu Yi Ni Cen Tram Yan Ruan Trai Trai Vui Yan Die Mian Nen Lei Wan Bay Na Yan Sieng Lei Sha Hu Xi Xi You Han Hai Wa Xu Pi Tan Xi Xi Bin Qin Xi Yu Xi Ci Qian Xia Wa E You Xing Ni Han Bi Sheng Zhan Dian Yu Ou Gui Wang Qian Yi Zu Qian Ding Keng Chu Yi Loi Han Kuan Fun Dian Xi Zi Ling Zi Yu Hun Si Kan An You Ji Hun Qia Hou Hou Dian Xie She Sha Xie Yao Da Xie Chi You He Sha Tai'; + case 569: + return ' Zhu Ai Que Ze La Lou Chuai You Ti Shi Xiao Xi Huo Chi Yi Shu Yue Chan E Xi Xi Ying Zu Za Za Ta Wan Xin Wang Fu Lu Jian Yan Bi Ken Guan Zi Kui Zhou Zhi Trai Tu Ta Chu Cheng Cheng Zhu Da Trai Bi Jia Yi Ngay Thang Yue Gang Gieng Gan Thang Qiao Chu Chu Bi Gui Gu Bing Yin Zhui Gu Tuoi Li Trai E Dai Can Ti Du Yi Die Niu Xue Ne Gui Kao Chuan Zha You Bai Shi Dian Pa Qiu Min Xue Mo Ke You Jiao Bo Xiu Mi Luo Xue Duo Er Shan Kui Nao Mian Li'; + case 570: + return 'Luan Die Qia Lei Mao Heng Che Zhi Gu Cuo Cou Wu Tao Gia Xi Yao Wei Zu Ma Yu Peng Yi Qin Yue Jue Jiang Xu Beng Giuoc Luo Zhui Quan Giam Fan Thac Du Xiang Hui Gu Kao Tai Xing Hun Bian Chet Chet Ke Kao Cuo Lu Zui Zao Jiao Guan Yan Er Qing Deng Si Sui Liao Ngoeo Shan Bi Wei Ye Zhai Ye Diao Ai Jiang Ban Su Toi Huai Yu Rang Dian Zuan Ban Qin Jia Pi Tou Chou Gui Ji Jan Xue Dian Bian Zai Tong Din Shan Gu Que Huk Gu Guk Huk Hu Kuai Guk Gou Su Chou Keng Du Den Yi Ngai Dao Qiang Long Li Li Qing Wei Mou Hou Qi Dung Jiang Xie Van Dai Juk Lou'; + case 571: + return ' Guan Pei Pi Juan Bei Jue Juan Shi Xie Rui Jing Po San Ji Fen Bei Jie Sa Pi Di Mao Ba Ba Tiao Ling Sheng Zhen Pi Wu Ze Bao Su Lu Hao Dou Fu Ni Bou Bom Ge Ru Xian Bi Mao Ria Mao Rong Qiu Bo Hao Nao Yan Pao Sui Tuo Ngu Qu Li De Jie Jie Gun Jian Bi San Bang Chun Nai Bang Rong Jia Sou De Xian Zhan Mao Zi Ji Qi Ru Suo Rong Wu Rong Rong Ta Sou Long Men Li Cui Zong Men Xi Mang Nie Sui Pei Bi Di Saam Qu Qiao Fen Su'; + case 572: + return ' Xu Rong Ji Qu Lie Ngoi Sao Kun Quam Cui Ye Bing Jie Qu Qu Meng Ran Bin Chao Du Long Long Long Rang Xian Tao Qu Nie Shu Lu Kun Ho Min Min Dan Yin Xiao Ji Yin Dung Kwan Fen Zhong Gu Hoi Bum Ram Cha Liu Bu Pa Si Dao Zhen Leo Nhop Shan Chuai Jiu Ke Chi Ngut Hu Li Sha Pai Wei Wu Zeoi Jan Sing Ying Ngot Sha Di Dan Seu Tu He Po Zhi Niu Ni Nhem Rong Guai Zhi Ji Pang Zo Sin Si Dong Fan Jie Hai Mo Ngoi Zhan Xi Deoi Zi Luoi Xi Piao La Ben Jian Doe Pui Taai Jyu'; + case 573: + return ' Jian Za Du Hup Nhung Thac Ben Mao Zao Zhuang Kuang Bi Pai Mao Tan Nit Sau Tun Luo Tan Bung Xoi Lan An Bon Ngam Ngap Xuoi Han Zhu Duo Duo Gan Gwai Qiong Wang Mo Zhe Wen Zhuang Jie Pao Jyun Su Ju Qi Can Tuan Sha Tuo Hua Yi Coi Daam Bing Jin Ji Dik Fan Wan Min Zhong Gong Shuo Yi Wang Ao Be Loi Can Nhom Sua Sua Day Veo Su Bien Zi Gui Tuo'; + case 574: + return 'Hui Xu Zan Zi Bian Da Yin Quan Huai Na Za Loeng Ti Yi Tan She Shuo Xing You Fen Ciu Juk Jam Jau Jim Jyun Ping Ke Fu Min Day Hoanh Lut To Tran Dai O Pi Ji Qiao Zhong Gan Yuan Chi Qian Zuo Xie Mao Hu Pi Xun Xia Ti Na Chua Wu Ji Lam Gaa Sin Huang Xue Tao Qiao Jiao Zin Do Dam Dang Bai Nhua Fung Nuot Cham Set Bui So Cat Tuon Xoi Bong Duoi Dang Kou Ju Sha Jing Mo Nou Ji Shuo Shu Zhuang Fu Zang Xie Lang Tong Zhe Can Yue Zhou Wai Soeng Gin Gei Hou Kenh Nit'; + case 575: + return ' Son Tan Yan Lu Yan Ze Shuai Am Bot Cha Denh Doi Thia Vui Lung Ngau Doi Xop Nhang Lei Van Lot Nhot Don Mem Tran Lang Leo Ngau Zung Guo Zhu Ru Ru Zeon Kan Ji Gao Xie Ou Jian Zhi Zha Hong Kuan Bo Se An Jian Teng Song Meng Yin Tan Guo Ruan Wei Si Saan Cing Wui Kei Gaai Ngot Lian Kei Qi Zhang Buk Choet Doi Kiu Dia Giat Khoi Cha Vuot Xoi Bui Oi Pou Ngau Dong Fu Shen Su Yi Lian He Zhen Ze Cui Cui Feng Li Kou Xiao You Dip Wui Ji Kwai Sam Zeon'; + case 576: + return ' Hao Han Ken Thia Day Ning Nho Loc Am Ray Ngoi Rua Vung O Luon Lay Seoi Yu Chua Huan Suo La Dou Jian Po Bian Xue Bian Wei Zeon Gaa Sam Luk Ji Dao Khoi Lat Loa Min Trong Bot Chua Dao Dan Jie Bai Nian Xian Se Giot Hua Chua Ou Lie Di Cai Zha Lu Huo Li Ying Wei Bi Guo Pi Zing Biao Ziu Kit Lin Nung Yan Zhuan Bong Mo Rua Dan Phun Loi Toe Re Hong Lin E Yin Lan Yao Xuan Li Lik Beu Leo Rach Muong Ung Noi Wing Lom Nhao Rem Thuot Lan Ling Xi Hong Jiao Zhuo Zhi Bo Teng An Xun Lei Zang Hui'; + case 577: + return ' Gau Tong Giet Ruou Xi Hong Fan Jian Cong Za Ca You Siu Dui Pan Ta Pan Fan Xi Re Nhieu Trong Nhan Dan Can Yao Luo Bian Jin Li Lik Jing Lim Rang Yan Dou Man Gong Rang Can Cau Pan Jing Piu Lou Hou Men Xon Gu Shuan Bien Ling Yan Bi Jam Biao Cheng Kui Huo Nay Chi Wo Cou Zhi Shui Gua Pu Xu Si Wu Leon Saap Jung Wan Mou Fu Shi Hui Huang Pa Loa Tom Nha Hong Thep Zhu Yi Li Shan Bung Kho Seot Min Ge Hu Baak Xen Xao Lap Mo Say Phoi Tat Chin Lung Bep En Fa Nhum Xu Yi On Ying'; + case 578: + return ' Chi Yi Gwong Chay Nghe Lui Nhu Sot Ngut Hong Di Hui He Zha Cho Yun Xian Zing Xian Lao Shao Shi Zhuo Giai Tro Tac Tro Ce Heo Ngun Fan Soi Toa Rang Chuom Bie Jiu Wo Jiao Fu Xiang Kai Jin Geoi Kei Luk Coi Roi Bong Ngoi Tro Nhem Ling Phong Ruc Vac Rom Ro Phoi Phoi Lom Ben Nao Huo Ji La Fou Shan Liao Mie Che Joeng Mo Jyun Ping Lou Duo Nao Ji Hei Zhu Hun Dai Ranh Nau Khet Kho Zing Phoi Kho Choi Um Dot'; + case 579: + return 'Kip Su Duo Cha Nhang Jiong Zai Hui Ying Hu Lin Weng Han Nan Wui Rat Git Xi Gan He Ji Xiang Sha Hay To Ret Ngot Nau Hei Ngun To Huc Thieng Tui Chong Zhao Shu You Jian Zao Re Jim Kwan Zhang Heoi Loa Ruo Yan Cui Tong Quac Mo Nong Nuc Mom Phap Thieng Rang Tat Hong Ji Shang Ram Long An E Lao Tan Zhu Lin Zeng Juan Hu Zaan Siu Gun Hei Shen Huo Kui Nhoi To Ho Thui Khet Thap Se Fan Lou Buot Rang Chu Zhou Ao Zhuo Xing Mie'; + case 580: + return 'Hu Zin Khe Tan Bi Ham Nau Ngoi Soi Luoc Khoi Ding Kai Biao Huo Lie Cuan Gaa Hou Xian Re Chang Ro Hung Yue Xun Liao Jing Fan Ro Sha Shi Xie Bung Loe Loi Mo Sem Xiao Ye Lan Yi Lian San Jin Bo Cao Duoc Chin Nung Nau Yao Nhui Do Lom Lian Chon Thap Bat Ta Fong Ram Quang Zaan Ji Lo Xi Zhi Lyun Xi Diu Yue Nen Xian Zhuo Ben Zhang Zu Na Vau Dao Lie'; + case 581: + return 'Na Dit Pao Ju Luan Luo Shua Shang Su Luo Fen Wai Bao Li Xiong Vuot Dang Danh Mong Mong Mong Cheng Zhang Sou Shen Ge Cha Yu Hui Che Jiao Zhu Shu Xiao Ning Pan Jiang Jiang Diao Zong Qiang Qiu Feng Zhan Ke Die Ze Guang Se Fen Jiang Yan Zhi Riu Li Ling Yi Qu Pan Gou Jia He Peng Ju Banh Che Chua Lop Lie Shi Po Xiang Pi Luo Cu Yu Mui Kong Xie Wan Yan Pei Cheng Manh Ti Che Bi Lian Jia Ting Ti Cong Die Shu Li Lu Xia Cui Tam Bo Tui Pu Lin Fen Phuon Bo Chan Dang Tai'; + case 582: + return 'Dao Mong Mong Li Ya Ya Zhan Yi Nga Qi Nanh Hu Ting Kou Chun You Fen Nuo Tian Jin Pi Chen Pi Jie Gui Daan Zhuang Hu Chou Shu Tao Pi Rong Rong Hou Peng Bai Xia Qin Ni Tao Qu Xie Zhao Hua Xin Shou Tu Liang Bi Chu Xing Xin Fu Hak Jie Fu Ngau Lao Te She Chao Chui Ran Hou Beng Cai Mu Be Nghe Xu Die Chan Yu Zhong Li Shou Syun Du Mao Huang Tao Du Ti Sheng Mei Co Sao Zhen Qin Pi Tang Cang Yao Xiu Bang Gu Bu Gou Bo Wen Ji Chan Xia La Cui Min Cu Ou Yong Maan Mao Ke Mang Ding Huan Duo Jiang Su Nghe Trau Ceng Ta Huang Jue Xun Xiong Mi Qun Lao Zhi Wei Se Zang'; + case 583: + return ' An Wei Huai Lung Zhan Ying Ge Hui Quan Lie Ju Ba Lei Man Ling Li Ji Nai Hui Xin Shi Zhe Ji Bo Cha San Tu Cha Jing Ba Bei Yan Hu Yu Bi Chuan Ji Mu Mao Zhong Ye Dou Ye Van Ri Yin Hao Muop Na Tie Fu Mu Zai Hu Chen Tuo Chu Fu Ze Bao Nhim Di Cai Lu Po Da Ye Yi Xiang Bi Zhu Yi Lu Kuang Zhi Wai Wa Di Shu Lie Zao Zhi Nao Si Chon Hoi Ngong San Thac Tay Loi Chai Se Xiao Zang Yu Dou Cha Xie Yang Xian Bao Moi Khon Bo Ro Ro Rai Zhai Qiu Hu Zai Jue Han Cao Hum Lon Muong An Zao Doc Sha Xian Chi Yan An Zhe Jue Li Le Cai Lu Jia Tho Xia Xiao Yan Xu Dun Ying Hui Ti Nou Xi Tu Wai Chen Hong Ti Xuan'; + case 584: + return 'Za Duoi Kenh Ga Voi Uoi Ge Lou Chai Pan Ji Ta Lau Si Xi Xiao Sao Jia Su Huang Cuo Ta Shuai Hau Hoang Fu Li She Tang Gau Uoi Khai Khi Vuon Dian Se Rai Bi Gou Cu Jyu Qian Man Lei Su Zong Hao Muong Chi Cao Wo Xiao Lie Yan Khai Nanh Bi Huan Xi Chi Xu Nao Yan Xie Zha Sui Xi Beng Ran Shuo Ban Gui Kai Chen Xu E Li Xi Huan Su Chang Vuot San Lu Yan Dang Dan Yang Zhai Ju Nhen Duo Sao Lai Su Ze Bi Bam Vuon Yin Hao Lie Ngao Duoi Hao Yang Shuo Ai Qiong Lei Xie Shi Nhat Nhim Soi Lu Beo Que Lian Xiao Ying Xie Ling You Nhim Dang Lan Xiao Doc Jyun Yi Juk Wu Yi Tuo Bu Ji Xin Cin Si Jin Ba Fa Mo Ruo Hoi'; + case 585: + return 'Tyun Fong Da Ji Jung Su Qiong Ba Fat Jai Tian You Tuo Wai You Dong Wing Vua Xi Kong Ji Gok Qiong Dui Duo Yi Jin Baak Do Ming Jik Vong Xi Qin Su Liu Wan Kok Hak Zuo Che Zhu Mao Zi Gaap Quan Jin Yu Yi Mi Lai Zhi Fan Hyun Daap Bing Ji Pui Leon Cung Gyun Ni Ban Zi Dong Ling Cing Zhi Jin Bou Zing Kei Loeng Ping Cau Yi Ling Yu Cong Di Zhi Mei Ting Ruan Jian Paak Wan Jin Wun Pang Haa Zin Hei Ci Ting'; + case 586: + return ' Jin Lu Qu Xi Da Jan Caa Lak Hu Luo Le Long Taan Gau Zan Gei Ji Piu Man Sau Caan Gong Ling Kwan Lao Zhuan Syun Jiu Gaan Cing Si Hoi Kiu Seon Git Daan Zao Hao Xiang Hao Li Dian Ge Syun Kwai Bik Ji Huan E Xia Cuom Jian Qi Xia You Syun Mou Fai Zheng Wing Ji Fung Zhuan Chan Sau Lai Wai Sam Syun Lin Syun Jin Xie Ling Haa Nao Ji Tian Lai Lou Yan Hao Xin Ling Ban Beng Gou Ling Kuo Qia Jiao En Yao Du Dua'; + case 587: + return 'Dua Huo Du Pei Hau Yuan Lou Xing Lian Yao Xi Yao Xi Lu Yan Quan Rang Wa Zu Fan Yi Du Sui Pi Han Xu Ngoi Gong Di Na Sanh Duo Wa Nie Diao Huang Ti Fan Wu Ang Ping Han Gao Gang Li Dun Fu Na Cei Jie Qing Ying Xiang Cung Hu Su Am Hong Chau Binh Ge E Xu Ci Ang Gach Xi Kang Guo Jie Chuan Lei Heng Zun Be Hu Pie Lo Deng Xi Lei Shan Ngoi Ngoi Muong Au Lu Lung Dui Jun Chan Xie Wa Zhe Zhuan Liu Lei Dai Gan Ngot Ngot Shi Ngon Yan Che Gan Yan Lam Sui Zhong Shi Sheng Chan Song Song Sanh De Ga Jing Cu Huang Yin Sieng Meng De'; + case 588: + return ' Cu Rang Xiang Bei Bei Jung Chuan Pu Gyun Ke La Quan Hang Chi Mang Zha Fen Chao Jing Lie Na Na Tong Mu Ran Zu Pi You Shu Lie Shou Tuan Gao Shao Tuo Nan Tuo Gong Diao Seon Meng Bang Xie Si Ting Gui Fu Gui Duoi Gui Ruong Zhu Lai Lun Tian Ran Dong Jyu Cing Juan Yan Ruan Dan Mao Luan Xu Xi Dai Ma Qi Boi Cha Trai Trai Shang Han Ping Ji Li Yu Ban Teng Jyun Chou Chou Trong Qi Xi Bei La Roc Ye Guang Zhu Ve Ruong Lei Lei Cha Boi Boi Ruong'; + case 589: + return 'Guang Die Cau Die La Leoi Ya So Nie Shu Zhi Zhi Zhi Pi Jiu Jiu Yi You Jiu Dau Bot Huan Du Nhuc Soi Tao Qie Qin Xin Chan Ji Qin Du Zhi Ou Wu Wen Kho Vet Bi To Bei Mu Jin Tao Liao Cao Zha Seo Chi Ya Kui Yin Bon Say Si Long Qia Dai Hang Shang Hai Cha Jiao Lao Nham Xi Gui Bo Chau Choang Chon Nhan Ben Zhi Tun Fu Hu Zaa Nie Yi Zhuang Cha Suan Yun Du Xi Chuan Xing Jiao Shen Naa Guoc Xoai Nghen Mang Mut Lan Hau Wang Bei Fei Jian Quan Yi Dong Xu Na Ji Zhen Qi Dui Yin Jiu Pi Xin Lun Cai Ling Bie Dao De La Xi Ju Xiao Jing Mang Cek Diec Vang Loet Bung Mon San Nhom E Pho Buou Wai Nao Xiang Que Qie Tu'; + case 590: + return 'Xu Hui Min Wei You Tui Dai Ke Na Fu Yu Zhi Han Ai Fu Yang Shi Chan Hoen Xiu Chi Yun Shuai Ro Su Sang E Zheng Ai Suo Bu Qun Yi Yan Na Wu Li Li Xi Jue Shi Ya Lit Rom Khu Quan Bang Uon Hen Ong Nhoc Choc Nhuc Chen Ying Bi Che Zha Tuo Hu Teng Ying Bi Ning Lian Xin Yu Bei Mo Dui Dao Qi Kai Buou Not Hui Ngo Shuai Xiao Zhong Zhui Bian Wei Xi Deng Xie Pan Nie Bie She Fei Min Qi Daap Zang Shan Suo Buot Gua Mun Khom Nhen Son Te Buou Om Ngua Ji Dan Juan Lu Ao Yi Shu Sui Wei Wan Chu Teoi Wo Cum Hui Hom Rem Toi Gay Ngua Bi Yin Huo Kai Ning Ai Li Zhai Nho Nhoi Thuot Ngua Lu Luoi Bian Pan Met Ro Xai Ran Gui'; + case 591: + return 'Su Meng Xian Long Qi Chan Yi Hang Mak Lian Guan Wei Rom Ngom Nhuc Jue Lei Luan Li Pi Gay Huan Gui Ju Deng Dang Fei Treo Zhi Mei Huan Pa Bi Po Er Huan Nguoi Mui Chang Luo Fou Chou Zu Nan Xiao Heu Phau Via Trang Bai Lu Luo Nian Ze Jyun Zhu Hu Dau Hui Tang Chou Huang Dou Tram Vang Wong Jit Miao Bo Ho Di Deng Pu Song Chou Bik Yao Meng Long Mon Nguoi Nhenh Lian Bie Phech Faa Lu Se Zuo Saai Cun Ling Zheng Pi Bao Que Vo Pi Nan Pi Bo Bei Fa Min Mo Wa Zhao Zhi Cu Xun Ji Gui Cheng Be Da Han Xiao Que Zaap Chuo Fu Trong Bit Fu Qin Lu Que Dian Qian Chang Ta Bei'; + case 592: + return ' Du Beng Hou Zha Zha Giay Que Ma Han Liu Lu Zi Pi Zhou Zao Niu Hui Xue La Ung Nou Yan Ran Nao La Guang Du Mo Lu Jian Xie Qi Xiang Guo Jie Mang Xia Kui Yong Hai Mi Yao Jau Wen Li Juan Wu Qiao Diao Chu Suo Chong Vim Quan She Yan Meng Ju Trom Tu Nong Mo Fen Am Ao Guo Hu Can Dun Hai Jiao Gu Gu Jin Yang Cha Hui Mam Qu Ke Mam Mam Het Qing Yi Kai Jiao Chou Bu Gen Jiao Zhi Wen Bin Nhap Xiong Fan Yi Chuan Yao Yang Du Yan'; + case 593: + return ' Meng Chi Mu Jiao Nu Guo Xue Fu Xue Fu Pei Mo Xi Wo Shan Xi Qi Mian Dan Chou Gap Ngu Ngo Nham Ngom Nhon Fei Mie Da Xue Xu Si Ju Mao Bao Yi Gua Ni Yi Zuo Nhon Nu Laap Dian Fan Yi Shi Cu Zhen Shi Jiao Hou Er Lei Xue Geng Shou Juan Chau Jie Wei Shou Jing Xu Chong Daap Zong Chop Giuong Liec Nham Nho Quang Jiang Mou Yu Jue Ting Xiao Dou Guo Mang Wang Xu Wang Suo Juan Yue Han Shen Xie Liu Run Bi Nao Wan Jiu Que Ngop Dau Ru Le Ngom Nhin Quau Mang Tro Bet Ni Mi Suo Nhon Qiang Han Zhuo Mi Xu Lang Jie Ding Chang Zhi Fei Jia Jun Huo Qi Ju Zhun Dian Jiao Ya Zhan Gwat Jia Sik Noi Zhi Mai Hu Xie Shi Gui Him Nhom Nhac Ngai Tron Tro Nhoi Nho Xu'; + case 594: + return ' Nghenh Ji Chuang Mao Ruan Xu Huan Sha Ju Kuang Hou Guan Gua Mi Die Bi Liang La Shan Lu Xi Sou Jeoi Mi Ou Ngac Leng Lay Hong Nhin Kip Chot Nguoc Nhon Nam Ku Gui Nhom Dom Xi Pan Se Jue Hong Guan Ju Nai Hua Ge Li Gou Ti Ma Teng Da Qi Yu Jiao Mie Geng Meng Wei Ti Qi Chen Dou Pan Trong Hay Trong Let Trit Soc Khoe Han Tron Mi Ma Lu Qi Keng Die Qi Jiao Kang Qiao Mi Shan Jian Li Ke Xu Caau Man Feng Chan Hui Dui Guom Ghe Zong Mo Trong Nguyt Chop Quac Nhan Song Nhon Thang Thang Nguoi Dom Mu Kou Wei Guan Ji Zun Huo Xie Sui Ruan Te Zheng Kun Xiang Mian Xi Caang Sa Tre Ngoanh Trung Trom Saau E Mie Zhu Zou Meng Xi Tang Jia Chang Ji Zhuo Lem Coi Ngam Him Lam Liec Soi Ngay Dom Guom Trao He'; + case 595: + return 'Cha Qi Mian Zhen Ku Ye Zhou Jian Pan Hui Seon Ming Liu Jeoi Cyu Shui Nho Mai Li Shuo Yi Li Khoe Len Lo Xie Te Xiu Tron Nhin Xuan Li Meng Wei Meng Hieng Dim Ngam Yao Lan Ling Ying Ying Li Jian Gui Guan Xie She Zui Lom Ngong Gheo Cham Kan Lei Trom Nheo Bian Ngom Shu Nu Xu Hao Gui Zhai Lang Cuan Zhi Feng Qin Ze Na Niu Yi Cong Shi Jian Zong Yan Ying Ruan Mem Rong Xi Guan Kai Wu Qin Cong Ze Xie Yu Zan Chuang Li Li Xu Mi Xu Ruan Gui Rong Zyun Mao Qin Cuan Cuan Cuan Wu Fa Ba Ji Qia Zhi Tiao Zhi Zhi Huan Chou Zhi Ten Ten Ten Ying Wu Bei Hong Shen Jue Kui Yi Ya Bi Kua Qian Zhao Kai Shang An Zhe Zhi Zhi Jiao Ji Van'; + case 596: + return 'Si Pu Ou Van Ngan So Ngan Zhuo Ngui Ngan Coc Ngun Ying Cut Huan Van Ya Shi Pa Pu Mang Chai Faan Dia Loi Dia Yun Gu Taan Keoi Dan Nao Zhe Hu Chai Ben Keng Gaa Die Ting Guai Qiong Shi Jia Ao Na Pin Jia Mo Cuom Zhe Bu Wo Cha Nao Kan Caak Xach Du Guai Qiong Ran Rong Yi Dui Lei Zhou Kua E Xian Dian Nuo E Yong Wu Keng Dia Gai Waak Zhi Zhi Xun Zheng Yang Huo Ji Nao Da Dia Ya Lu Fu San Chu Wei Fu Keng Si Kang Yi Hua Yu Li Mai Vo Lin Du E Sanh Qiang Du Jie Chuo Xian Gao Dao Hong Be Mai Dia Vo Canh Som Loi Zong Qi Tuo'; + case 597: + return 'Hong Pi Geng Nie Kong Zhi Saki Xiao She Yu Jiang Voi Chong Qi Chen Sang Suo Qian Hui Shan E Ci Qiu Ke Ham Weng Zi Ji Mai Da Cuo Manh Chom Lou Kang Kuo Di Qie Mo Guo Hong Chao Hei Gei Zaat Zoeng Cao Zhe Hap Keoi Gun Xu Peng Jue Gan Si Sui Que Wu Yan Peng Xiao Pan Zyun Sin Taan La Gun Doi Vo Quanh Vo San Lo Vo Beng Zhen Ji Jin Lian Ken Zhou Zao Cuoi Le Qi Bing Yin Pin Oe Tung Me Sou Lu Di Du Liao Zhuo Chang Gach Re Ghe Quanh Soi Chen Ta Jin Que Dao Cin Chen Rang Po Lai Zhong Xie Nen Gach Jiang Qu Lei Ca Que Gach Xiang Lei To Lan Lan La'; + case 598: + return 'Nang La Ben Yu Si Jiao Qin Ji Gan Va Yi Yi Zhi Biao Sheng Jiu Ngo He Fu Ju Mei Taan Tre Tre Zuo Yi Xian Yi Si Chui Mo Gwong Tray Rung Zhan Xun Ru Nhe Huo Lay Ruoi Shao Shou You Yu Jun Leoi Lay Nhe Nhin Luoi Zi Lu Coeng Chi Kun Zhun Tho Lai Hou Xu De Zong Ying Zhu Liu Lay Nu Nhom Bi Chi Zu Feng Lu Pu Daai Zhuan Zhe Shi Yu Lu Liang Le Jue Liao Beng Sin'; + case 599: + return 'Vai Yi Guan Lau Ao Gui Min Yan Lan Bo Zan You Kit Nhe Re Yi Ni Ni Guo Jun Shi Xian Qian Que Kui Sit She Huo Wan Fei Fei Ji Yu Gat Zhi Gua Jie Mang He You Du Si Li Jie Niu Ba Yu Zhi Wan He Ke Cay Du Jia Chen Chui He Zhai Mei He Zi Zhu Tuo Giong Zun Ru Duo Jiang Jia Heng Beng Mo Zu Bie Ku Jia Zhuo Xiu Loi He Qiao Kau Thoc Thoc Ngo Bong Fei Sheng Zhui Kuan Ze Xian Bi Yi Chang Muk Gaai Zung Mao Wan Lui Bap Wu Ku Wo'; + case 600: + return 'Xing Ke Jiu Duan Huan Zhi Ce Rou Ji Ye Jing Yang Zong Can Trau Giong Rom Rom Si Li Gu Chang Fei Liu Jie Yun Zhi Chou Bie Ji Maa Vua Luo Jian Chuang Shuang Lu Jun Jiao Ti Zha Yi Cong Nei Jia Jiao Jung Ji Ai Ma Nanh Mam Rieng Rieng Jian Thoc Ben Fan Sui Zun Dian Gao Gao Lao Zhuo Tui Bi Ju Gat Ve Hua Cheng Chua Kuai Dang Ge Xie Jie Can Zu Pu Shu Bu Vung Trong Gio Ning Yan Zhou Meng Bian Dek Xiang Leon Lu Li Ji Mie Lei Zhi You Bian Mu Ran Chuoi'; + case 601: + return ' Niao Jau Quan Zhe Lei Dang Jue Ling Ling Yan Yao Zhen Qi Ai Nu Mang Tu Kan Jiu Yan Mian Yin Wan Yao Wa Pi Sui Kong Miu Hong Ming Ling Yi Shen Zuo Gu Tu Yong Wa Gui Hong Shi Xiong A Cheng Keng Yi Yang Ting Dou Cha Liu Qiu Xuan Shen Kuan Tong Qian Chou Wen Long An Kan Yao Fu Beng Lan Qia Dian Jiao Gui Xiong Ke Coeng Xian Wong Gong Ou Ke Ku Mei Hang Tian Gou Ma Liu Wei Wen Gong Tu Ning Mi Nup Rong Lang Qian Man Zhe Hua Yong Jin Mei Fu Tam Qu'; + case 602: + return ' Lung Liu Fu Dan Gong Cui Xing Tu Shou Xo Trong Qiong Rong Li Ji Tuo Hoam Chui Tong Xo Tan Ling Yi Ruan Pa Ca Yue Que Zhu Hai Dung Sap Fa Hai Lie Bu Ping Lie Xoi Kui Fu Tian Wo Ju Bing Zhen Fu Ting Trong Trong Long Xi Tian Ji Zoeng Yao Cu Pang Qie Dung Long Ji Tong Yi Chang Gong Troi Dong Xiang Zuk Ting Zhuan Yi Yi Zi Qi Cha Yu Zoek Dun Nua Chong Lu Dun Fang Shi Ti Ji Qiu Shui Chen Huang Shi'; + case 603: + return 'Yun Long Man Gou Can Se Xian Mo Shen Po Yao Qu Ran Ju Yin Bai Nie Chou Chom Khau Nia Rong Chuan Nie Li Jiang Kao Ce Chong Zhua Zi Yang Wen Ji Ji Dam Mang Mau Lu Qiu Dun Bao Chan Bo Chi Zhe Mang Ji Miao Yuan Wu Zhi Ping Chong Mi Fei Cuo Meng San Na Mang Lu Buong Hum Pou Dua The Yin Mang Dian Diao Qian Hang Zhi Ju Nian Mi Gu Zhua Nie Zhuo Ye Cong Xu Xi Bo Dung Can Yan Sung Ro Van Do Ra Manh Tre Mui Xom Cong Jin Toi Trum Ju Dang Du Seon Ye Jing Ke Luo Wei Tu You Pai Pi Ding Wei Che Jian Si Zhuo Sou Ruan Yu E Ku Zhu Xia'; + case 604: + return ' Zing Cau Dai Ke Sieng Thap Fu Tao Xi Chou Yuan Lu Ce Shan Liu Xi Ji Yi Tan Hu Cuo Ge Shi Sao Hong Xian Xia Mu Suo Zhai Fu Se Nu Yi Zik Zaan Ceoi Qin Qing Cot Sao Ghi Gianh Noi Thoi Gio Chom Ken Vo Hui Shuang Dan Ou Mo Qian Chi Pai Juan Chao Lie Bing Kou Dan Chou Tong Dan Man Hu Liao Xian Cao Lu Chuan Wu Man Zi Du Shuang Fu Ju Zhou Diao Wang Chuang Qian Tui Heoi Lian Biao Li Li Zhuan Wai Geoi Luoc Khai Gian Ra Bi Fu Cui Du Zan Long Xun Qiong Ji Qian Jian Shao Duo Shu Bu Xu Dong Ran Yang Rui Lin Jian Di Fen Dian Zui Ning Suan Tian An Ce Ding Shen Du Ti Jiao Zui Zhang Jian Dan Dan Song Gwan'; + case 605: + return ' Zhan Ting Zhi You Pai Thung Mui Dau Gau Choi Chieu Zyun Li Tri Qian Sui Ju Ai Ge Ju Tun Bi Qia Bo Hui Zing Jian Gou Suan Ci Qiang Yan Zaan Dian Mie Chieu Toi Hom Ray Giau Lak Nong Po Ling Jie Zhu Gu Duan Zhao Shao Qin Mi Ping Cong Chou Sa Tian Chong Mung Thung Lat Gay Mung Non Liu Lu Lu Zou Zhuan Lu Huan Tiao Tui Qiang Lin Bei Pao Zhan Li Ti Hu Lie Toi Coi Nung Phach Choi Dam Hui Qu Xuan Jing Die Sui Wei Yan Yan Ban Jiang Ni Li Hu Qi Zhong Bi Lach Noi Yu Die Lin Li Zhuo Ji Ju Feng Yu Trac Lie Za Qian Jie Guan Zhuo Fu Se Mo May Cu'; + case 606: + return ' Nan Hui Giam Liep Dang Long Yi Sieng Tang Nan Nip Sa Yue Di Trum The Gan Zan Shan Yu Bo Ding Fan Yu Shen Gong Mie Tun Xoi Lie Ba Tam Zha Pei Mi Ming Fan Na Si Yi Jia Zhu Ban Yu Po Banh Chao Huan Can Jiao Dai Tan Zhi Mi Kao Doi Lau Yao Dui Quan Bu Chu Qiao Liu Bo Kang Fen Zong Gwing Zi Dao Sen Dou Ge Boi Xoi Thinh Tam Thinh Lo Xoi Ba Ba Ling Xi Ni Zhou Zhou Chou Dim Nian Ji Qu Oan Xep Com Aa Suong Khan Ia Kai Xian He Lin Zi Ou Cu Cha Leon Me Nam Zhong Bu No Deo May Thinh Day Chou Xi Sa Xian Se Mian Fan Zhi Cui Xia Bun Che Khe Nep U Cut Nuo Li'; + case 607: + return 'Zu Cui Ze Li Lep Man Qi Zhuo Cui Pu Fan Tan Zi Zu Zhou Rong Lin Tan Keo Ham U Shi Cui Zi Fu Xiao Thung Cam Feng Cim Gao Com Hem Xian Jian Fen Men Li Mo You Phan Phen Xia Huo Qu Xay Duc Niang Mi Qi Nhao He Lian Zuo Ling Men Zhu Niao Ji Reng Jie Gan Yi Zhou Wu Diu Soi Geng Cu Mie Xun Zhi Xiao Fu Hu Di Jue Diao Phang Shou Wang Ben Buoc Ngo Vit Vuong Tim Na Di Shi Ci Shu Wa Che Fan Gu Yuan Guan Giay Qie Zhan Dai She Bua Ni Wang Chao Khau Soi Zhou Xiang Ming Zi Huang Mi Xi Zhi Pai Duo Ci Mou Chao Yi Gou'; + case 608: + return ' Nien Jing Dai Buong Nho Rach Riet Thua Chang Troi Zeng Ping Ye Jie Xich Pi Gieng Sha Zhuang Jiong Liu Yu Ju Nuo Dyun Va Yem Mang Chuoi Mao Thun Xe Cui Noi Keo Rang Vai Boi Nuoc Ban Chen So Zhuan Nian Kong Jie Hua Xin Zuo Yan Jue Hu Zhou She Yan Xie Die Chen Chang Go Nim Jian Ji Chuo Hong Mang Ro Mon Nit May Vuong Ung Go Da Doi Ting Kai Xing Hui Jian Zhou Zha Fu Chi Beng Nuo Ji Qian Wan Ou Bi Shuo The Jing Ye Ping Dam Jin Uom Luot Giam Dot Det Buoc Chai Fei Li Li Pi Tao Sui Liu He Hun Tan Shuo Zhi Bo Xi Po Qun Mu Gai Toi Yong Luot Vai'; + case 609: + return 'Ma Thun Dai Chit Quan Det May Nit Xuyen Qi Diao Nie Shuang Shao Kun Sui Dou Die Gong Van Nut Maan Cuon Zhuan Guo Chai Dut Ria Thong Xung Chao Rang Quan Xu Qu Voc Xun Jiao Zhe Dian Sang Beng Suo Qian Xu Xun Mo Man Jau Cam Cyu Dui Tan Nhang Dum Thua Vot Vo Sui La Zhu Zhou Li Dan Ju Yun Chan Luo Se Lian Zuan Lai Shuang Qie Dou Soi Neo Wu Meng Ji Chi Ni Cyu Fai Ban Liu Yao Dui Linh La Lu Sui Fu Lei Wei Nhao Cong Roi Li Pin Jun Ju La Jing Ji Mie Yao Bian Chung Cong Si Si He'; + case 610: + return ' Nhau Nang Die Che Yun Xiu Shu Chan Min Lian Yin Xing Wei Gu Tou Ta Fei Da Nie Cu Zuo Jie Xuan Bo Jin Yin Xu Yu Xiong Qi Bei Xing Gong Zui Jie Kai Xing Bei Shu Yu Zhou Zhan Chau Zhong Cha Chui Liu Sui Zhu Caang Bian Xin Ya Taam Ling Ya Sei Ting 4 Bay Di Pi Hu Cen Tian Mou Juan Mou Ju Liu Ling Liu Hu Gu Bon Tu Gu Fu Hu E Gong Gu Gua Lue Fan Lu Meng Fu Liu Xie Gu Xian Bo Ji Coek Quan Lu Bay Shuo Mou Yu Han Ra Yue Dan Yu Jian Gang Cao'; + case 611: + return 'Shen Liu Jiao Su Su Zhong Liao Xuan Lu Ji Yan Lu Min Ti Huan Yi Tan Wu Ji Leoi Du Kun Jun Shi Nan Po Shu Quan La Me Ren Fen Goeng Ta Tun Yang Dang Lik Duo Ci Gu Fen Rou Gao Xiang Xiang Hou Tao Shan Yang Zi Yuan Su Chuan Xiang Ban Man Gion Fu La Li Jie You Yu Chi Guong Chuan Yi Shan Xinh Ji Yan Wu Chun Mang Tanh Fu Jia Gou Gu Jia Xian Jin Zi Lou Gou Sai Ren Shan Dom Jue Tong You Mieu Bon Jian Du Hu Sao Yu Mai Zhi Yan Gao Huai Quan Yang Zui Jik Xiao Yi Yan Hong Yu Chi'; + case 612: + return ' Chi Jik Hang Se Pa Ta Fen Chi Hong Xue Man Ci Ngai Zhi Qu Xi Fu Shu Hai Po Ci Chai Hong Pao Shen Xiao Xuan Ci Ting Po Canh Luon Ta Cha Zing Zu Huo Xu Yan Chai Tuo Quat Xian Xuan Hou Huan Ge Chong Bi Hong Hong Chi Cha Fai Zha Zhai Ta Po Ta You Fu Ci Da Ta Liu Ci Hong Wai Han La Shi Jap Tong Hui He Pie Yu Cin Xian Han Po La Huo Long Tai Lao Khu Shu Bou Sau Dao Dian Gia Khu Xiong Lu Coi Wang Che Nai Jue Er Er Nu Nu Lau Zhuan Ma Nuo Lie Lei Ba Cheng Gui Quan Ge Gong Shao Lai Zheng Yi Gun Wei Lun Cay'; + case 613: + return ' Shi Ying Sheng Tu Bi Ze Zhong Rong Qi Fu Ce Zi Li Man Lian Biao Cay Chuang Yi Pai Yi Kuai Biao Chi Qu Mo Zhe Sha Sha Yao Gong Nai Xie Tian Daam Ye Miu Sha Sao Dian Xu Qu Venh Hong Sheng Ting Duo Gaap Lau Liao Hong Li Xiang Shen Fu Bit Yan Wang Qi Duo Hua Qian Xie Nghe Ci Sheng Sim Diec Er Xing Tui Yan Lie Mi Jyu Zong Zi Tai Hu Ying Lian Da Tian Tian Rong Ai Lang Ai Zhe Guo Lu Zhao Mi Liao Zhe Qu Cong Lom Ghe Ting Tan Zhan Hu Pie Da Rong Nao Nang Dang Jiao Ju Er Diec'; + case 614: + return ' Li Guo Wai Nie Jin Siu Ve Pi Chi Voc Pi Yi Du Wa Xun Qi Shan Xu He Pan Pei Xiong Chi Tan Zui Zuan Qi Du Nguc Shui Na Xi Moc Mao Hong Tim Chao Yi Zheng Ju Dai San Zhu Wan Gu San Ban Jia Mai Ci Tuo Qi Zhuang Tuo Ping Chao Cam Zaap Top Peng Kuang Yi Xie Yue Hen Hou Zheng Chun Shi Wa Xie Truong Jan Lou Sai Geng Geng E Deo Chon Gat Ruot Tai Ku Na Ju Xuan Qu Che Lu He Sheng Nan He Cha Yan Geng Nie Guo Yan Guan Zhi Lao Du Qi Qu Jue Bet Thon Bing Ngom Nuc Mang'; + case 615: + return 'Phi Feng Xu Tui Han Ku Shen Zhi Pang Zheng Li Wan Fan Xin Ya Vu Ju Shen Ron Mang Tun Zhuo Xi Yin Jing Tun Geng Ji Kei Dit Rom Rang Phen San Dit Ngac De Tron Mun Mep San Phop Zhuan Tie Zhi Ji Ying Wei Huan Ting Chan Luo Jim Kui Qia Ban Cha Tuo Nan Jie Yan Tu Wen Cong Xu Yin Beng Luon May Lu Zai Da Nie Ju Hou Geng Cay Nghen Oi Nguc Voi Day Phay Hoan Hou Kan Gong Hui Xie Xi Han Mi Weng Hun Sao Xin Zhe Huo Gong Sai Jin Wa Dui Chi Jung Jim Xi Mi Zang Sang Com Phoi Bo Zin Gay Suoi Khu Ma Ia Gion Tun Zhi Wen Mo Nem Yin Tun Chong Ze Xiao Mo Cu Bian Xiu Yi Luon Huang Zha Suo Hun Ju Beu Nem Boi Nach Lon Ngoai Nac Be Mat Khu Dui'; + case 616: + return ' Cu Ji Xun Sun Ceng Yi Biao Jue Li Pao Vai Za Ye Bi Zhe Zhe Jiu Zhe Shu Xi Nhon Vac Phet U Suon Cam Roi Seo Xu Nai Xian Gun Wei Voi Ji Sa Dong Nuo Du Zheng Ku Ming Ron Bao Hui Zong Gam Lung Song Ngay Rau Bam Chun Nach Dong San Teng Yi Cam Yu Pou Dit Yao Ning Chou Hun Lom Dui Qi Ying Bing Ning Huang Buoi Ying Ji Mat Bao Duk Guang Lei Zun Mak Chan Cho Phich Rang Noc Noc Jian Meng Xiao Xin Li Vai Lot Rom Dui Ma Qiao Gay Wei Na Pang Lei Luo Luan Geng Nan Luan Qu Pheo Luo Nhau Nang Nang Luo Yue Ji Ji Shui Mi Wang Ce Jian Wang Jia Nam Zak Huan Lian Zi Bai Shou Wan'; + case 617: + return 'Chou Shu Gui Xi Ru Yao Gao Gou Yue Yong Wa Bo Xin Hoi Pi Bo Hai Zhai Wo Ye Bi Hai Let Thoi Kham Thum Khan Zhi Chi Zi Zhi Ni Den Wu Ai Den Zeon Ai Yu Chi Jing Zhi Zhi Zhi Ju Han Ping Caap Yao You Ping Mo Zuo Po Xue Kuang Yi Po Zhui Ni Qiu Cou Yao Fen Xia Jiang Cha Kyo Xiao Cha Cheng Cui Qiong Jim Yu Yu Wen Cha Yu Cung Zuo Dao Juan Dao Ying Feng Lau Weng Jin Qi Qin Kuo Tan Xian Tian Kuo Tian Hu Zhu Zhan Ta Luoi Tian Ta Ta Hua Yan Tie Tie Ta Huai Jia Qi Ta Loe Tan Hua Liem Zhuan Hua Laai Lan Luoi'; + case 618: + return ' Mua Zun Yi Fu Wu Fu Ding Ta Chai Chao Ri Quan Ge Fu Di Diao Yong Jia Long Yong Pi Doi Huo Qiong Fan Wu Tong Hang Tan Khoang Heng Syun Tiao Zhou Bai Xie Dao Jin Loi Hu Bei Ding Mui Gu Nuo Wei Yu Xing Fu Xian Qi Tu Ji Ying Deng Wei Xi Pai Xuong Sheng You Gia Ai Jian Gou Ruo Gong Sha Tang Do Song Lu Ao Qi Xiu Dai Thong Song Fa Wei Dun Liao Fan Huang Jue Ta Zun Rao Can Teng Hua Xu Zhan Xuong Gan Tray Peng Can Xie Da Ji Ghe Li Pan Khoang Ghe Long Li Xi Teng Ling Li Ran Ling Gun Po Mo Pai Bot Ba Qi Yan Wa Ang Ming Min Xun Meng Guai Jiao Gai'; + case 619: + return ' Cai Wu Zhe Ren Kou Zi No Jau Zhao Zhong Qiu Guo Gong Pu Hu Mian Tian Wang Cek Ngo Zhu Da Xiong Na Juan Nian Hu Sha Cik Ting Zing Sai Cin Zhi Ta Si Yi Tro Tup Hung Qiong Zhi Lu Ru Qi Yu Zhou Yang Xian Mou Chou Hui Jiu Jiu Piao Jiao Si Guai Mo Xi Pu Jau Mong Ji Re Kei Nen Wen Bei Yi Fu Si Juan Ji Ni Ben Xu Qin Bo Wang Zhe Wo Shao Zao Yang Song Nie Bi Cu Qiang Xiao Zhi She Zhi Peng Miu'; + case 620: + return ' Diao Wo Zhi Bi Fen Ngon Ong Na Nua Day Lau Bang Cai Gaan Qiu Ni Bo Dun Shi Xu Chang Xu Ye Mi Xin Zhuo Fu Pi Xue Yu Xian Yu Yu Gu Ju Ta Kong Zheng Meng Gang Mu Xi Bi Fu Xiao Jiu Gou Chi Jiu Jiu Sha Fei Ping Diu Ji Geoi Nhai Ji Fu Wan Xu Bo Chenh Lei Jyu Ra Sa Rom Ngo Jan Muop La Mui Hao Xie Pian Yu Yan Tian Pi Shi Kuai Ji Zha Nai Mou Fu Du Sheng Cha Tre Chi Gui Min Tang Bai Qiang Zhuo Wei Xun Miao Zai You You Shan He Lu Zhi Shu Jing Zhen Meng You Wo Ba Juan Ru Cou'; + case 621: + return 'Zhi Qiong Hu Yang Mong Jun She Kou Qian Meng Tiao Ci Ji Jing Seon Haak Fei Kwan Seon Nei Zong Nie Geoi Ke Sa Nhua Nu Dot Ray Chi He Xiong Hun Di Lang Zao Ce Suo Zu Sui Xia Xie Jie You Gou Geng Jun Huang Ji Pou Wu Yi Nai Rong Nan Ping Shan Diao Ji Hua Dui Kong Ta Hong Shu Heng Fen Gan Hou Hong Lit Jyun Gwan Wan Kou Nian Haa Chu Qiang Che Bom Seoi Hoi Bi Coi Ngo Mai Fau Xi Hu Song Wo Hai Ru Meng San Wu Day You'; + case 622: + return 'Kei Tan Shen Kau Qi Seot Guo Qia Xian Sui Lu Ji Qi Diao Qi Jia You Xi Chao Mi Lou Bi Pei Zhen Shen Chan Fu Qu Si Zui Bou Fau Siu Jyun Zhao Coi Co Mam Gung Wan Thom Bim Co Voi Pui Den Nhai Rac Dam Pi Cou Hing Gao Du Syun Fu Guan Sao Sou Jian Pou Can Beng Mou Zhao Xiao Ju Shu Jian Li Chuan Lao He Hu Gu Zhang Jie Xiang Du Han Jia Xiang Ji Shu Lang Ji Shan Tao Zi Shuan Ji Chu Ji Shen Lin Liao San An Ruan Ti Dan Huan Sa Zaau Wing Mou Cing Fei Jan Hyun Zeon'; + case 623: + return ' Sang Rui Wu Ju Huan Leng Lu Tan Zeng Qian Leu Xi Lum San San Nau Dua Khay Sung Ci She Dua Sing Sa Cu Mao Qu Bo Gan Zuk Qie Juan Dang Chang Yang He Ji Bing Mei Dun Ao Jing Lu Mian Dian He Jian Hua Gou Lu Fu Hui Zei Jin Si Qun Dan Wan Bian Jia Dan Jiu Xian Bo Tranh Jyu Zing Xia Biao Po Sao Bei Sha Wei Cang Lu Zaan Dua Mei Ram Choi Do Vung Dan Gu Za Bang Gan Chao Ji Lie Qiong Jian Lu Duan Suan Yao Yin Ta Yao Jing Chu Fu Yuan Shao Bing Dang Shi Lu Qie Luo Po Meng Jie Ji Lu Cung Ji'; + case 624: + return ' Chang Mie Meng Jian Cai Su Gou Sung Goi Giong Non Ru He Sa Zi Keng Geng Si Sam Trai Day Ti Zhan Xie Shui Chi You Lu Meng Lie Si Xi Fan Fu Shen Ti Chai Yue Fu Jian Di Zhe Xie Dan Zhi Xu Nie Fan Meng Min Joeng Ghem Vo Gien Kho Vung Kho Ruom Lou Du Zhan Jian Han Dan Sen Jian Tan Jiao Po Ping Zhuan Liao Zi Zhuo Hu Xi Meng Ju Mie Xian Kui Meng Jian Nou Di Sao Zing Wan Dua Rap Kwai Chu Zhi Qian Lu Zhuo Zuo Han Sui Gou Chou Ji Yi Yu Nou Ni Ruo Lin Kwai Ning Dang Muong Khoai Fai Ung'; + case 625: + return ' Reu Zung Han Dan Qiao Yao Fu Shuang Kui Qu Dong Shu Li Ju Rui Zha Xiao Fuk Wan Mo Kieu Ngong Rap Men Shi Dian Li Deng Zan Luo Can Ao Gi Jian Diao Ying Rap Yi Dang Nou Yue Bou Hing Rac Men Muong Li Li Hu You Pan Nang Chen Thuoc Feng Bie Man Gan Huo Cu You You Xu Xu Hu Lu Xia Yi Hu Hu Zi Hei Gong Tui Wu Ling Gu Zhong Lu Zu Tong Xia He Yue Nan Bo Hu Qi Shu Qiang Zhou Yao Gu Ban Kan He Ji Hu Yan Chun Ding Qiu Hou Hao Zu'; + case 626: + return ' Xian Xia Xi Se Ge Xi Ge Lu Ge Ke Shou Zhu Si Teng Ya Ni Nai Luo Sui Chan Wu Yu Zao Yi Xi Hong Quan Wang Chi Xi Tian Yun Yi Ji Hui Fou Fu Ji Xuan Shuang Tai Du Can Yuan Trun Vat Di Cay Zhu Tai Rong Xue Yu Fan Bei Qu Bu Jia Zha Nu She Li Bang Gaa Gui Guai Dai Buom Nhong San Chao Vat Gai Trut Ci Yan Song Shi Ku Zhi Tong Qu E Xing Ru Yu Yi Yi Xu Fou Ge He Yin Hong Duo Cyun Gong Doe Xing Fan Chau Nhai Vo Chuon Cong Ran Doi Chach Qi Sha Du Di Li Yi Xi Geng Tong Kao Hong Kun Nie Chi Ti Tong Moi Li Na Mei Zhan Bei Cuong Mot Ghe Tranh Gioi Chay Lan Nhong Mang Op Khoai'; + case 627: + return 'Than Tiao Bo Za E Shou Kong Peng Fu Lu Xie Xie Xiu Lu Tian Ta Ci Qu Fu Zhi Xie Zou Fei Min Xing Tong Qi Piao Sui Er Hu Song Bie Ding Ban Shi Xie Xiao Fei Sua Cua Sua Dom Dia Gioi Ngai Chau Ray Hon Cua Ray Chuan Shuai Yao Jue Sheng You Fan Kui Di Mao Jie Yan Wei Sang Jie Yu Wei E Quan Jiong Feng Long Die Pian Lian Hu Lu Dian Cui Mou Wang Juan Ke Yan Jiao Haa Dot Oc Chau Ran Gong Rong Sun Shan Chi Qi Suo Ye Zao Que Zhan Ba Zu Suo Zhe Xi Chu Jiao Zui Ge Wu Lue Ji Xie Xie Dou Qiu Ping Liu Pan Ci Jie Hui Sha Nhuc Sam Dom Ret Bo Choi Rong Ran Nhuc Zhi Ai Xu Bi Ye Ni Zhu'; + case 628: + return ' Su Xie Yu Qu Zu Zhi Zhang Lue Wei Chong Mi Ji Su Ye Xi Tuan Lian Xuan Wu Mao Hou Hong Lue Du Cong Chan Lu Su Diu Doi Thuong Nhoi Chau Rom Bo Sung Lue Sam Cay Ngao Zung Vet Zhong Li Fei Jing Kui Yi Hua Cui Zuk Yu Beng Tun Shu Dai Wu Ci Ning Dang Zu Han Pi Chuan Du Pa Zhu Xie Zhe Qie Xuan Sao Bi Fu Gaan Buom Zyun Sau Li Rua Ray Rom Rua Rua E Ye Shu Se Qi Guo Se Fu Mao Lei Zhan Chai Wei Lei Zei Ying Ai Xie Bi Nong Chuon Rien Chan Ban Pi Cong Lie Qi Ji Jing Dong Fei Yi Tuan Meng Can Ya Men Vich Ngoe Sam Yang Ting Zhi Xie Lu Li Mao'; + case 629: + return ' Xia Sou Su Xue Bau Cong Nhang Ram Li Yuan Zhan Ta Xuan Wei Ye Pang Mao Ti Pin Du Qiu Yi Tuo Chai Jin E Gioi Diu Vich Chan Ying Ling Xian Qi Yue Lue Ying Qu Sit Fei Zi Qing Trai Ning Wei Shuang Fu Mo Mo Tuo Chai Zang Re Ram Li Li Xia Juan Nan Mi Huang Shuang Xu Fei Xie Hen Ta Yong Zhan Rom Qiang Nang Lin Luan Xian Fu Ling Sao Hui Maan Moi Ting Qing Huang An Mau Mau Man Ni Guo Ou Xiang Jin Mu Zheng N San Hu Zu Hui Ji Ye Jiku Jin Hon Xing La Yu Jue Shu Zheng Yong Ge Jutsu Jian Xin Hui Hang Hang Shuai'; + case 630: + return ' Chong Hang Ay Liao Jing Jiang Gong Zhuo Qi Qian Dou Po Hu Niu Qi Diao Diao Li Xiong Zi Xon Taai Na Zheng La Zhi E Bo Po Xu Yong Ci Li Pao Xiu Mei Wu Jau Pu Che Qi Yi Ti Duo Long Jian Zhan Yuan Yu Geng Hou Lot Rach Truong Qi Mu Huan Long Xi E Lang Fei Wan Cun Peng Cuo Weng Tung Vay Song Gao Xong Cui Qi Li Qie Qian Kong Beng Shou Wei Shan Dup Trang Lun May Rach Nem Vat Zi Ti Qian Du Tu Wei Hu Xing Shan Zhi Chi Day Toi Zhou Weng Chi Suo Xie Ke'; + case 631: + return 'Ming Shai Shi Shou Jie Gao Lu Pui Tre Xie Chan Maa Vien Xong Zhi Man Shuai Ke Diao Yi Su Chuang Suk Cui Tuo Xie Gin Xuoi Bau Dung Xuan Hyun He Jue Ti Fei Zhi Shi Tui Chong Ti Zhan Heng Qu Wei Dun Bao Liao Laai Gei Si Rach Chen Cheo Toang Biao Xie Bie Cong Ju He Kui Yong Shu Jyut Daat Dai Rem Nie Yu Zhuo Meng Hu Ke Lie Jie Xiong Yan Toac Noi Jie La Shu Jie Lei Zu Shi Diu Wei Du Su Mac Rach Chen Vien Xie Rang Luo Qian Nang Ling Ji Vat Ming Gu Xuan Xu Bo Bo Wei'; + case 632: + return ' Ku Up Wan Cha Mao Ke Ci Xian Mo Hun Chan Shi Zhen E Mi Shi Qu Shu Ci Yan Hu Qi Zhi Huang Zhi You Gao Yao Pou Yi Cheng Ji Thay Ai Dong Sui Jiu Qi Lian Xuan Liao Tin Yun Xuan Cou Pian Kui Ti Huan Dan Gui Chen Shang Ji Tai Lian Kan Sheng Dou You Qi Xiao Yi Lou Chuang Lao Gao Zeng Don Wei Jian Ying Fan Li Qian Nghien Yao Kui Wei Que Xiao Que Hu Gok Duo Chu Shen Zhuo E Ji Tan Pa Caau Jie Qiao Qian Ju Qiu Tuo Nuo Si Yi Chanh Gu Hun Pa Zi Jiao Dia Xi Shao Yi Zhi Canh Goc Jren Lun Zhou Jue Tan Nuo Ju Hu Zhi'; + case 633: + return ' Sung Sung Bi Chi Xuan Ji Gua Ju Wo Tuo Qiu Wei Duan Shou Zhen Ne Xi Zhe Zhi Na Kwai Ken Jian Ba Yao Guo Di Huo Jing Mam Thoi Jue Yue Choi Ji Kwai Su Coi Jian Kun Wo Kuang Biao Jue Bi Chan Va Zi Li Fo Qian Yan Tan Mo Kou Xi Jiu Hu Hu Fu Yang Guo Ren Yin Feng Jun Yun Xun Xi Xia Hang Ghe Ke Don Hu Hu Pu Fan Aak Jia Yi Tuo Na Yin Yin Beng Ngoa Ji Wang Shi Dui Duo Tuo Wa Li Re Ci Xu Zhou Zi Wang Ya Ji Chao Ji Khoang Shan Tu Bie Xi Pi Zha Fung Hui'; + case 634: + return 'Suo He Yue Wu Ling Zha Hua Jyun Chan E Chen Sui Tian Zhi Ti Ao Zhuo Zi Ke Se Tian Lu Shan Zha Chong Yan Seo Mu Hu Daan Chi Su Nao Ji Duo Hou Cong Zha Yin Xiao Bian Beng La Chi Qia An Shi Chi Gei Nu Ji Ou Xia Chai Ai Sheng He Ji Chi Xi Zheng Ta Ma Pi Xu Qian Xia Zeon Syun Yu Jie Xia Lu Qie Cha Yang Ji Sha Lou Ji Zhi Wang Bi An Yi An Li Gan Xian Mo Jiu Tan'; + case 635: + return ' Hao He Zha Zhan Yi Xi Xi Fa Yan Mu Gu Gaan Yun Zhong Chan Chuang Hui Za Gun Jian Ya Xiang He Tang Lai Dai Dan Mian Ning Meng Lie Zhou Pu Tai Ying Teng Guo Qiang Lu Sa Lie Chi Xie Guo Bao Luo Juan E He Mei Xie Pin Han Chen Shan Hui Ying Jian An Ta Yi Tui Liu Zuo Li Pin Xue Nen Dou Lan Zhan Jue Zhen Ji Qian Han Fen Han Hong He Hou Zhan Chou Tai Qian She Ying Qin Hang Hang Huo Xi He Xi Xia Hao Lao Li Cheng Jun Xi Han Dou Dou Wan Dou Zai Juan Lou Chu Zheng Qi Kan Huo Lai Lam Phong Ha Gai Shou Dong'; + case 636: + return ' Lou Tuan Yu Wu Tian Lou Guo Nanh Tan Qi Chong Lie Li Xun Ut Shuu Geng Ting Han Chu Tun Xiong You Mo Chi Hu Du Mu Na Ling Zoeng Ai Xian Kan Si San Yi Yi Xiao Zhi Dou Mai Lun Jue Qiang Ling Pian Cou Duo Yu Zhuo Xi Huai Ming Tang Pu Y Mi Man Guai Qian Lin Min Wei Ceng Hu Sui Ju Sha Meng Wei Xi Ling Bi Wei Li Zhe Yong Hu Wan Ba Jian Cop Zuo Zhan Bo Qiu Yang Dong Qu Pi Zhai Beo Shan Gou Biao Yi Fu Xin Shi Tong Cop Ding Tu Xiao Wu Pei Hui Lai Hum Si Cui Sha Zhou Zhao Wei Lai Bi Dong Nao Xie Rao Tuan Wei You Mei Yuan Zhong Jeo Sou Gu Shao Zhao Pi Tong'; + case 637: + return ' Chi Peng Chan Yong Shuang Wu Pi Huan Beo Fu Biao Nao Biao Wei Yong Nao Guai Li Xin Yan Po Pei Suo Ren Shan Me No Suo Dan Men Shou Gan Gou Han Shi Yang Gu Ziu Bui Ke Ju Qua Pai Ce Bao Xiong Cai Fong Lin Ai Mi Lai Xiao She Huo Ni Zheng Lin Zha Yun Xu Fau Cheng Wo Xi Loi Bei Shang Yu Mi Coeng Bieu Dat Buon Cua Cong Duan Cha Fan Ze Cheng Ting Ci Yi Zeon Yao Ku Fen Xie Cheng Kui Jung Xoe Bin Lou Yi Mi Xie Gui Luo Shan Mua Tau Tron Ju Du'; + case 638: + return ' Xian Zhi Bin Vui Chua Zhi Zhuan Xue Lian Sui Ban Lan Ju Mian Xun Zhan Gun Khenh Zhi Cong Bui Wei Quan Chai Ngheo Reng Yue Vay Zi Zaan Zaan Luo Gui Maai Cheng Zoeng Ju Tian Wan Zhi Nan Da Han Do Do Xi Lin Son Lom Yan Xu Huong Tham Hu Gan Xu Xi Cui Do Do Xi Hu Tim Tham Tham Do Do Yan Ziu Yi Chi Jue Zu Ruot Jiao Yi Tan Chi Ba Tou Zong Qiu Chi Xi Ni Cu Wu Chu Su Yong Ju Ba Ci Di Pan Chi Qiu Yan Zhai Duoi Xian Beng Kuang Qi Zhou Ju Qie Mo Yuan Gui Zui Qie Rao Nhong Day Hu Qiu Hai Fu Lang Sha Xi Bu Shi Yong Guang Nie Hou'; + case 639: + return ' Mi Chay Chay Lanh E Xian Yun Xu Qin Dong Leng Qi Lan Fu Qi Chong Lae Cu Mo Bei Dao Jie Chong Chi Yu Cui Su Ti Shu Zha Fu Che Fo Hou Zha Jie Zha Zhan Day Day Yan Hai Wu Hua Dian Yao Sou Qian Ji Xiong Qi Jun Hai Yan Jie Cui Tuan Zhang Piao Lu Zhi Chu Mi Qiang Lian Li Zong E Su Jue Ju Tan Liao San Dong Za Zhi Xuan Ling Deng Tron Zhan Xuan Qin Jiao Pi Han Yu Guo Xun Xun Chan Jie Ju Yan Du Hong Xian Xun Ling Jie Yi Qu Gan Feng Jue Qu Zuk Jiu Ji Ji Treo Xi Pang Kuang Ku Ku Zha Ba Chen Nhac Chen Hu Nu E Xiong Dun Sheng Wan Fen Zung Xi Zi Hu Bie Tuo Ban Ge Ke Nhon Vet Zhui Fu Mo Jia Tuo Yu Mu Jue Ju Gua Po'; + case 640: + return 'Ni Lung Cuk Wa Yan Buoc Cyu Dang Say Lanh Dung Lop Den Rong Ngoay Vo Chou Kuang Hai Xiang Xi Cun Tong Ruo Leot Duo Che Kei Lei Zi Zheng Zuo Kang Zai Yuan Qiong Bang Fa Xun Ji Cha Giang Let Nhong Rao Riu Nho Cang Shu Xuan Xie Ti Han Xian Shan Tun Hang Kun Cen Dou Nuo Yan Cheng Pu Qi Yue Fu Tiao Ting Choai Buot Wo Sheng Tuo Du Long Noi Cuong Ba Dau Lia Duoi Rao Lan Xech Xui Va Ap Tan Ya Zhi Lu Yan Ju Bon De Chu Zu E Zhi Peng Bie Di Lai Ye Doc Lom Khap Co Ram Ghenh Ron Hao Pan Tan Kang Xu Zou Ji Wu Chuan Po Yan Tuo Du Pian Chi Hun Ping Cong Zha Wan Re Dam Naam Wai E Wei Bai Jiang Cang Giay Nhom Riu Giay Tot Lom Xam Giay Khoeo Cha Chu Kua Teng Zou Li Ta Sa Pan Pan Sao Qiao Sin Nhao Zu Zhi Yan Jie Neng Gwat Chom Ghech Chuc Xong Lang Nap Let To Nhuc Xung'; + case 641: + return ' Dam Lung Luan Qu Deng Liang Chan Qie Lou Die Cui Ji Bac Chao Shuan Zu Kang Qiang Li Chong Dui Tat Shuai Yu Zhang Lei Bo Sup Sao Dang Sung Dinh Dao Chui Dan Doi Hom Ghe Giong Lep Sup Mop Xong Nhon Po Toi Lung Zhe Xiao Tan Cui Lan Que Xu Shu Zha Can Bi Peng Zuk Cheng Nhap Qiao Ji Bay Zhai Lan Dua Waa Chung Doi Dung Treo Chom Kheo Lay Lon Sum Vuot Tian Sa Jin Zhu Duo Cha Juan Tang Beng Fan Lie Zei Sui Choang Cam Se Cui Long Dung Quay Dep Loi Von Quan Tuon Zhi Tui Qing Chuo Buk Ta Bing Wen Po Bo Duoi Ngoen Giat Veu Cyu Mo Ca Gac Khieng Kuang Cuo Rao Bao Lai Leo Nian Li Bai Lui Guom Jiao Lu Li Long Gui Du Du Chan Lom Xian Chan Xie Zhan Som Shuang Nhao Khuy Ngoeo Chom Ong Mi Luan Luo'; + case 642: + return 'Dian Laam Die Wan Yue Luan Luan Voc Leng Wai Din Nen Shao Xie Pi Mao Yin Bo Zhu Chong Mu Tuo Tong Ye Huang Ren Ye Pei Tuo Rinh Minh Zuan Yu A Zhou Wan Lung Minh Ban Duo Zhong Ha Huang Mian Chun Qie Gong Ting Mei Tang Rong Rong Qi Guo Wu Xiang Tian Xiao Zhan Cui May Lan Lan Shen Lei Li Chan Nie Luan Ting Hui Gong Qi Yu Xin Yue Ba Dai Ji Xuan Jue Niu Du Ji Gwang Wan Pa Gong Ben Keng Yang Liu Ni Zha Yin Nian Pao Gong Bu He Rong Gui Lip Banh So Bi Xi Ju Hun Bi Tiao Zheng Hong Yi Ci Bing Gong Fa Yang Xu'; + case 643: + return 'Nhe Hong Zang Chai Hong Tian Zhi Xing Xu Zhen Wan Jun Wo Lu Zheng Rong Cheng Fu E Tao Tang Juan Chao Ta Di Juk Zong Keng Tui Keng Hon Co Rong Yun He Zong Cong Qiu Mu Duo Xu Keng Xian Du Kan Ying Zi Jyun Sau Huang Peng Li Bo Ge Ju Ke Hu Yao Tang Qiong Rong Liu Hui Ji Gwan So Zhi Gwan Tang Zhi Kang Yang Tang Hong Liang Cao Ngao Truoc Truoc Nai Zong Deng Jiao Peng Guang Er Jian Jiao Nuo Zao Peng Dang Qu Lian Mu Lan Fen Hun Nhe Kuang Yin Shuan Jian Luo Lu Ge Rang Pin Long Zhen Xian So Lin Lian Shan Bo Li Xie Ge Min Lian Jue Zhou Ke'; + case 644: + return ' Die Zhe Shu Ji Long Guang Zao Xian Qian Shen Yin Jie Ci Shen Shen Sa Xi Ku Qu Ge Ban Bi Qian Cay Bin Ban Zuo Pi Huo Chat Dang Nong Ban Chat Nong Chen Peng Fu Tu Tren Pi Po Chi Xue Qi Wu Zhi Di Cong You Muoi Ting Cong Dem Di Zhuo Zou Cong Jin Pan Yan Qi Rong Jia Zhi Qiu Yue Shi Hao Muoi Tuo Bie Kan Dong Chuo Ci Yin Shi Hai Ruan Yang Chi Ci Gong Mi Ji Chuon Bach Quanh Duoi Gen Zao Beng Xin Kuo Die Ting La Nghenh Shui Il Dai Lung Ngot Li Yong Jiao Ta Qu Yin Yuan Jie Qian Yao Ya Qing Pei'; + case 645: + return ' Jau Choi Go Suot Co La Jia Tou Ti Dun Chan Jia Chi Jian Shu Ta Jau Ke Cho Chuc Dit Zhi Yuan Hu Lie Ze Chu Qiu Beng Ngok Tren Huan Kua Sheng Jie Wang Hu Sang Ze Zan Yang Chi Jiu Liao Yu Bian Kuang Mau Roi Quynh Chou Ya Zhuo Qie Xian Len Yuan Wu Jiao Xiang Sha Zhi Chong Bian Wei Seoi Do Dao Chau Nhanh Yu Tui Chao Hui Qian Wei Man You Cim Dit Di Da'; + case 646: + return 'Juk You Jiu Tui Zan Hui Sha Jiu Huo Yao Duoi Va Xian Xian Zou Di Jiu Nhanh Hui Kao You Li Jyun Chuan Chi Huo You Yue Tit Keo Ta Zan Nie Zhu Suot Chong Lui Xian Xoang Shi Kou Qi Tu Fan Cun Tun Cha Cai Xiang Pei Jing Qi Shao Niu Na Qin Bi Bi Bao Bian Zi Na Wei Hao Jin Zheng Qie Lap Koek Hao Tong Zao Sheng Cun Huang Ru Zai Nian Juk Xian Quan Ji Yin Li Mang Shao Han Cuo Jun Ji Bu Long Fou You Kuai Sing Xiang Yun Qin Hui Pu Gwan Li Pei Shu Ju Yi Zheng Chong Xi Hu Rou'; + case 647: + return ' Huan Qiao Zhi Ying Xi Qiao Ji Zheng Huang Yu Zou Mei Sheng Quan Jiang He Tong He Wen Yi Pang Weng Qian Li Yi Chuang Xu Wei Ge Yu Zhai Gan Qian Kang Li Shen Guan Piao Gai Li Hu Tu Shun Hu Li Lou Dang Zuo Shan She Feng Ju Tong Jiao Qiao Gao Zi Huang Shan Tan Tuo Ling Cheng Weng Zuo Yu Zhu Qun Xi Qu Ge Qi Xu Gai Que Chou Meng Shen Qiao Can Li Wan Lei Xing Lang Shi Zheng Fan Zhi Yin Li Mo Wei Ying Rang Quan Luo Dai Yin Bi Ge Wen Yan Mian Gang Qiu Zhi'; + case 648: + return ' Jau Tam Gu Tong Ling Ti Ci Yi Fan Po Bi Bao Peng Suan Chuenh Song Wei Xiao Ji Jau Hao Yan Giam Gay Sua Xoang Yi Zao Ying Nan Za Tian Xi Jiao Yan Choang Dam Miet Nei Tan Yan Tian Zhi Chou Tao Zha Dan Mian Wu Yin Yan Lao Choang Gay Po Hun Hai Mu Cong Ku Chou You Zhuo Kui Sou Giam Yin Zui Sang Liu Han Wei Meng Hu Li Mi Bang Jian Que Cay Meng Mu Hong Hu Mi Shai Shang Chao Zhuo Zhi Nian Ji Ke Zheng Mien Men Dan Liao Zhan Gong Lao Hua Chuai Jian Kui She Chen Tan Hu Meng Pao Zhan Chang Gan Yi Sui Giam Dau Xu Ji Lan Yi Mi Mie Cuan Lan Yan Mi'; + case 649: + return ' Yong Cang Jian Sou Ling Yan Juan Ve E Fen Fen Guang Mai Lie Le Chong Li Dam Chong Nhe Zhi Lei Xie Dam Chou Ji Nhe Nang Pi Jie Zhou Gei Saan Xiong Kuang Jam Jing Hu Qian Cen Syu Qi Wan Mao Dou Pik Kou Dai Nao Hong Ping Chao Keo Sa Lai Duo Qian Yin Ci Lou Hui Le Fu Mao Zhou Yong Chi Vo Nen Pui Vong Joeng Jyu Lao Ji Yi Liu Cong Nan Zan Jin Rang Du Bua Tun Xiang Bian Chuang Wu Ju Bong Dan Jing Nhan Gang Gwan Bit Hok Hang Xie Pi Zhuo Rui Sao Zi Zheng Mi Zu Qu Chi Zhi Ming Bing Jin Fan'; + case 650: + return ' Hoat Bo Saam Kam Quan Qian Ya Chao He Ru Ju Wu Khep Sam Mai Thep Chieng Zung Che Hai Chi Kuang Cou Ruan Kuo Chi Zu Jiao Yu Tu Meng Da Shuo Juk Hung Wai Bui Wun Jau Wai Linh Jing Bou Tin Feng Gou Dong Cha Mao Chan Bian Yu Wan Zu Zi Chuan Wan Wa Quan Wan Xia Mo Jiu Seoi Ting Ying Jian Wei Ti Sao Qi Sha Yu Ji Dou Chan Tuan Liu Zhui Hin Jyun Jan Ken Thuong Ruan Yan Gu Li Cha Di Liu Zhan Po Bam Lon Ting Chum Choc Thia Sat Gung Zeon Zan Lou Zhi Ci Loeng Zoek Gin Soeng Kau Coeng Hon Cuoc Ngou'; + case 651: + return ' Lian Luo Ma Dui Giao Mieng Kwan Duo Jue Li Lan Jyut Ruan Gu Chan Xu Zhi Keoi Sin Hoi Fu Zok Sai Xue Bo Cheng Zhu Hei Ban Bay Xi Choang Daan Thuong Choang Die Zhan Guo Biao La Thau Co Jip Jyun Maan Jin Gai Bung Hom Cun Dam Giua Rua Vam Lap Caan Nhon Thoi Meng Yu Ban Hou Zim Deoi Xi Piao Si Deng Muong Veu Chuo Di Ji Chan Zhuo Zan So Lai Cai Leoi Jing Kem Hing Wai Am Jiang Jin Hei Zaam Hon Jyun Tou Hing Dang Dui Duc Li Gaam'; + case 652: + return ' Qian Jing Chuo Kem Kieng Zaap Ta Diao Jian Zhi Jue Gaan Mo Luo Lai Bao Sung Thiec Jim Zuan Bou Lom Nen Zhe Yu Gaam Ben Bao Ma Xi Hu Yi E Gu Tu Zhen Mou Qiu Su Liang Qu Ling Guan Lang Tou Da Lou Huang Shou Jiao Zun Gai Wei Kun Duan Song Qi Yang Shi Gai Dao Yao Duon Qian Shao Chang Miu Mo Nao Cong Nie Zhao Cen Dai Dai Song Nie Ci Jun Nhang Shao Zhu Duo An Bi Ti Pi Xia Qiu Sheng Ngong Tang Man Pian Ti Rong Cong Ji Feng Wu Jiao Lao Zeng Peng Can Nong Chan Duon Man Gui Niao Chong Chan Nang Xia Jiu Ji Zhen Cat Ting Diu Men Yue Zhong Tun Rui Xie Xi Ting Niu Wang Jian Fen Suong Ngo Bian Yi Die Ji Gan Jian'; + case 653: + return 'Jiong Kai Que Nan Mou Xu Song Shen Kuang Que Wei Die Nan Ruo Gong Dou Nian Chao He Yan Cua Tu Bu Hu Yong Shi Chu Bing Xiao Men Li Ti Jian Zhi Gua Guan Qi Fei Yu Zhe Wei E Chan Xi Gu Que Hui Xie Ying Ta Wai Fu Jie Pi Cua Sheng Yu Kua Pi Xie Nue Xian Jian Xu Bi Nan Liang Pian Jing Gwaan Ta Yan Ai Xiao Qiang Wu Tang Jun Kuo Lang Neng Cong Dou Shu Jiao Nie Eun Yu Ce Jiao Hua Wen Ye E Guang Hua Jiao Gwaan Lei Shang Yong Deng Guan Niu Sui Xiang Sa Chang Muon Run Yun Mo Fen Jian Xu Xi Shu Xie Li Tou Mi Chan Huo Cua Zhuan Yue Cua Lan Yan Dang Xiang'; + case 654: + return 'Yue Ting Beng San Xian Die Pi Pian Mo Ta Jiao Ye Cup Yue Fau Reng Qiao Qi Diao Qi Han Yuan You Ji Gai Hai Shi Qu Wen Zhen Po Yan Gu Ju Tian Ping E Pei Ya Lin Bi Bac Zi Hong Duo Dui Xuan Shan Shan Yao Ran Tuo Bing Xu Tun Cheng Dou Yi Che Dai Lo Juan Ji Zhao Beng Tian Peng Fu Long Tuo Dau Xian Ni Long Zhuo Zheng Shun Zong Feng Duan Pi Yan Sou Qiu E Qian Qian Gaai Ca Xun Jyu Jung Zhui Mao Jiao Zhan Pi Xi Yan Fei Nie Zhi Suo Yi Lei Xu Yi Wei Ji Chen Die Fong Yuan Xi Liu Suo Luong Xo Ven Beng Xia Yan Cui Gwik Kang Qing Lou Bi'; + case 655: + return ' Zhan Cuan Wu Xu Chen Hao Jue Chen Cha Chan Zhi Xun Be Ge Chen Ye Chu Qu Xie Zhan Ken Jue Nho Qu Meng Ye Zou Pu Shi Shu Chan Jan Du Guo Lu Yan Niao Bin Tui Ni Huan Qian Xia Ling Lian Yi Li Si Dai Wei Ci Jiu Hong Yu Kui Hang Ge Fang Kui Gui Chi Jiu Sui Die Sui Qin Gui Zhui Tiao Yue Lok Zui Wu Cui Zhi Shui Dong Wei Seoi Chong'; + case 656: + return ' Run Ji Diao Cang Kou Wei Can Ma Ou San Song Wei San Jin Wei Cai Li Loi Yue Nhom Yun Ngat Cheng Shan Con Ngut Hu Shai Tun Fou Qin Xu Gan Chuan Fu Che Ram Bung Yi Dong Fu Fu Ze Pu Ling Shai Pao Mu Day Yin Luo Hua Yin Beng Yu She Xie Chu Jau Dou Ji Rei She Dian Set Yi Che Geng Long Ping Yun Yan Mo Sui Jing Song Pang Ya Se Duo Chuang Xie Tuan Gong Xuan La Ling Dai Zha Kei Pui Yin Song Yu Tuo Tuo Bong Ba Ran Bo Dai Zha Hou Hui'; + case 657: + return ' Lu Ling Ru Cau Mua Bung Gong Nom Um Rop Xang Dan Meng Xia Weng Han Zi Zhen Se Cuo Li Dian Lian Gou Peng Guot Ying Hou Dui Wu Set Dong May Tanh Bong Nap Xoi Piao He Long Mo Fei Lu Ze Bo Dian Mang Zhuang Lu Pang Dui Bu Chen Man Xi Toc Sam Doi Fung Rang An Zhong Nan Tuo He Dui Wan Zhong Cen Li Shuang Cen Si Dui Hun May Rau Zyu Jian Nong Dan Fu Huo Hui Ci Yong Sa Ting Rao Rao Liu Rop Sam Suan Ling Man Dian Pao Ling Ling Li Nou Mong Rao Am Lie Shan Fei Fung Mit Shan Mong Ling Zhan Bin Li Lo Si Rang Jian Zhuo Ling Ling Meng Khuya Shuang Ling Mu Sam Hun Loa Ling Jian Qu Leoi Nong Jing Chen Cing Zhen Qing Qing E Xanh Se Bei Fei Fei Fei Fang Ku Za Hui Fei'; + case 658: + return ' Dui Bay Pa Niu Pang Dan Dan Ai Tian Chao Ao Mei Nan Bo Yu Xian Mai Mat Ping Dui Dao Xing Ni Han Chu Shua Man Na Tran Wan Yi Diao Yan Wo Suan An Lan Nan Qiu Mian Nuo Can Can Lan Tian Ye Nian Shua Ci Jian Gan Jian Guo Zhan Luo Ji Gui Jia Ji Xuan Feng Bi Qi Yuan Ang Di E Fen Ju Ni Tuo Shen Fu Xia Qu Po Wan Ling Ma Zhou Bao Yu Beng Mai Jia Yang Kua Jiao Bing Luo Gui Duo Zhi Zhen E Zhu Ba Zhen Feng Dou Nian Bu Dui Sha Se Bi Zhi Zhe Bu Jue Xun Hia Don Xi Zhuo Bai Yao Chou Ta Qian Nao Yu E Jian Yi Xiao Nie Bing Haai Guo Xie Diao Ju Suo Die Fu Mian Shi Xuan Ti Yu Xie Fu Zhi Ni Xuan Yang Feng Zong Zhou Xuan Zhu La Ying Gao Kuo E Wei Mei'; + case 659: + return ' Giay Huai Chou Suo Ta Suo Ta Xue Gong Jia Bo Ta Yuan Ta Chui Xiong He Suo Mo Chong Sui Ze Lu Zhang Luo Xu Jian Shan Xu Jiang Bao Mai Tong Xi Rong Sheng Zhou Jian Fu Deng Yong Ju Yi Bang Se Sui Duo Xie Huan Roi Dep Ru Ni Zhou Gui Luo Zhi Xu Zhi Jue Ju Yuan Lu Bo Rong Xie Xi Luo Ge Zuan Han Jiao Sa Qin Qun Pao Yue Che Fu Pei Mei Tao Ken Xi Duo Yi Sui Xia Juan Wei Yi Yu Bai Tuo Ta Pao Bing Yun Yun Duan Ruan Wei Wei Gui Da Xia Hun Juan Sui Sui Lou Bai Yu Zheng Gui Kui Gao Dan Xian Zhai Se Ke Bu Bo Sui Via Yu Bu Jiu Jiu Juan Jue Na Zhai Tao Wei'; + case 660: + return 'Xia Xie Sa Ji Xie Dui Zi Yuan Qin Fu Peng Pao Wan Yin Hong Zu Gong Dong He Wo Pang Su Kan Nie Hao Feng E Ye Wan Ting Dong Zhe Sang Mo Su Le Hoeng Pu E Zhuo Ye Xiang Guang Ren Ling Ao Chai Duo Qiong Ku Xu Huan Yao Zhen Ting Beng Ang Kan Che Ku Pei You Ao Men Mo Fu Qing La Dou Tan Qian Yao Wei Hu Mo He Xuan Jim Bi Po Di Zhen Shi Kan Ce Xu Zhen Zhu Hui Chi Hong Nou Nie Yan Chong Fu Guang Qi Gen Ting Tan Qian Jiu Xu Qi Zhen Qiu E Hui Hong Qing Che Fu Hong Xi Wu Mang Ti Hong Bo Qin Gen Fu Kui Wing Kwai Ngup Mang Bie Jing Kan Gui Gao Xu An Yue Wu Yi Jing Lu Quan Tui Ji Jiong Jue Pie Kun'; + case 661: + return 'Wai Hui Dun Yuan Jie Gui Gao Po Men Zhuan Hang Yong Qiu Leoi Lei Ang Pi Weng Qin Qin Mie Dou Mi Zhan Qing Yi Ban Juan Ze Xu Lan Ma Ma Ou Bei Pou Xu Ao Seon Hong Hong Zhan Sen Gao Po Liao Wai Xuan Kui E Han Se Dan Xuan E Gai Dao Meng Yi Ning Pin Cang Yuan E Nie Yin So Qiao Hong Ling Chan Ying Guan Niao Xu Tan Jin Peng Liao Laam Bei Xin Tun Chao Gan Hu Wang Vuong Fu Pei Nao Xun Xue Liu Ling Xue Qu Hao Yi Han Fu Ba Yi Bo Mat To Hong Li Sa Xi Shi Piao Hua Yi Bo Bo Nei Qiu Geoi Wei Che You Wei Hui Sa Tao Hong Sou Han Pao Fang Liu Zhou Pi Li Chui Xi Zheng Beng Zheng Sui Yan Qing Wu Liang'; + case 662: + return 'Zhao Liang May Jie Hong You La Hou Yuan Hong Ye Ying Xuan You Quan Tang Suo Li Sou Li To Yu Yi Dong Thoi Giong Hay Thoi Xiu Ao Tuan Su Shuai Yu Feng Su Tui Yu Zheng Zheng Tao Liu Cheng Sui Sao Gio Gio Gio Gu Feng Lie Piao Bao Li Long Chu Xiao Hong Xie She Long Hou Xuan Feng Ba Bo Tao Su Zhao Biao Sou Tui Suo Xiao Heng Sao Fei Lieng Niu Mang Bong Bay Huan Zhi Yi Yu Yi Yue Chi Nhu Yin Niu Rong Na Tian Ba Thet Qua Co Er Zheng E Pou Ji Ni Jiong Jia Gan Ling Zui Bei No Qua Banh Shu Yi Pai Nao Shi Man Shi Ti Gong Doi Lei Bao Yuan Zuo Lang Xiu Zai Cheng Jian Mao Jia Yu Yu Yi Mang Zai Zhui Ti Bua Moi Xi Ju Zan Lu Tao'; + case 663: + return 'Zhui Ling Ju Ji Juan Zi Yue Dong Nang Chong Ang Geng Bo Ding Wei Nhay Moi Quan Ke Pi Kan Fu Yong Tuan Tou You Yao Ye Yan Moi Xian Ti Sui Ci Xu Wu Can Yu Chan Xia Kao Cang Cha Qiu Da Su Hua Wu Yuan Nuoi Chan Jiang Xiang Zhai San Mo Shang Cao Sui Chuang Mi Zhu Chong Ji Chong Lian Mem Hai Dun Xiang Cheng Shang Li Huang Deng Liang Za Huo Lin Du Han Yong Yuan Guo Ling Ci Lian Ao Dang Yi Nong Shan Xin Da Yu Can Wo Cha Bo Jian Meng Wei Mo Doi Bo Shui Jie Shuo Huo Chuo Soi Long Huai Tuo Yu Duc Chan Yong Huo Lan Nang Nuoi Na'; + case 664: + return 'Ba Gan Yi Jia Da Ding Xun Ren Juan Tuan Xu Song Cao Cheng Sau Ding Gat Mao Ngoai Hai Wu Cui Qi Guc Ji So Oc Kui Wei Chui Chui Cui Choi Shou Fu Noc Tuan Bie Tan Hang Pie Yu Tan Thom Xiang Xiu Weng Hai Peng Yi Cau Lung Tan Bie Xiang Yi Piao Huan Mu Ba Fan Ding Fen Jie Suo Wan Ge Fen Tuo Wen Gua Duo Zhe Ci Yao Ban Bu Mo Po Ge Liu Ran Juk Giong Gan Hu Mou Lua Xiu Huang Fu Hui Sai Qu Jie Tuo Yu Mo Zhou Jiu Shu Kuang Qiong Lie Fu Xu On Lin Nie Pi Fu Bu Yi Bo E Zhe Hang Li Tu Da Lu Yan Dong Qie Wan Ming Zui Fu Qu Ben Ao Qiang'; + case 665: + return ' Qun Geoi Que Hua Xian Kun Cui Yi Biu Chi Zong Nao Cheng Duan Yong Zhe Tan Yang Xie Xuan Duan Shua Xian Xian E Jing La Wei You Yu Ti Jin Tang Qi Dian Tao Lu Zhan Wen Ji Ao Ou Qia Shi Ta Mo You Zi Zha Yao Fung Chong Li Yu Chan Yi Chi Li Tu Zu Xian Xi Bie Han Qi Sang Fei Shan Mo Huan Sing Bang Yu Yu Ji Kuai Zong Xian Meng Li Zhi Fan Lie Cai Du Guang Xiong Li Qi Ruoi Jue Tuo Ju Xiao Qu Zhuan Jue Cheng Jie Zhou Xian Long Yang Ran Yi Lie Bo Hun Ji Dong Zhou Quan Jie Li Ju Wan Ben Bi'; + case 666: + return 'Ge Chun Qian Sou Wei Cheng Lou Yu La Qian Dian Ta Zhan Ji Fan Lie Ting Ji Qian Hu Yu Qi Yu Wa Ba Qi Sa Qiao Ya Xian Ci Fan Kun Gun Que E Qiong Ma Ku Yao Que Chu Jia Zhu Kheo Dui Wa Nao Yan Tong Song Kui Xing Gun Ping Yu He Zhuo Song She Yu Ji Qiang Shui Chuo Zu Leng Ni Wa Zha Dan Veu Xuong Xuong Xac Du Bian Jie Qia He Chong Yan Yan Song Teng Yao Kao Hom Zhui Gui Ai Hai Suo Xu Biao Feng Qu Mang Guo Bi Jue Chuang Pu Sun Yi Qian Yi E Ling Bi Huo Mo Ban Xun Yan So Li Tan Cut Luan Kai Mao Xiao Ai Ta Mei Guo Gao Nao Hao Chot Que Cao Sao Pi Xie Xiao Ju Cheng Nao'; + case 667: + return 'Nei Jim Gay Mu Shao Dian Ling Zhen Yao Fu Qian Qiong Ju Bing Mao Zha Tai Chong Bop Zhai Shi Yong Qiong Dao Ti Zhui Yin Nao Bo Kuang Zhi Duo Cong Bao Ya Cop Li Ju Wen Lie Wo Shi Niao Mang Jiu Xiu Xui Wo Dao Xi An Da Zong Han Chui Bi Dong Zhang Ya Di Huo Quan Rau Min Saam Fu Bao Ke Mao Re Zong Qia Xia Sou Xiu Na Man Zha Chan She Wo Quan Xom Ai Bang Hao Sao Suo Ti Ya Bing Rong Sha Weng Ria Ao Zhuang Piao Sui Yi Sou Dou Sou Luo Chop Toc Rau Gay Fei Zun Nao Deng Zhi Cuo Liao Ji Bo Cong Cheng Bu San Zan So Jiao Yao Lu Can Ni Ban Mon Xoam Jie Pu Zhuang Zan Soi Li La'; + case 668: + return 'Chong Zhan Nheo Bian Weng Hong Pin Jiu Se Ni Fen Xu Shi Ju Jue Yu Guo Guo Hu Jing Li Xie Er Yuan Hai Jing Ke Zong Fei Peng Geng Jian Ni Xian Li Chao Er Geng Yu Hu Fei Ao Er Ke Ku Bo Ye Jiao Chao Geng Ru Yue Lin Yu Yue Zhai Xiao Mie Gui Jiu Tuo Xi Wei Zhuo Wei Kui Mei Hao Hang Fang Niu You Hua Lang Zhu Gui Bi Jia Tiao Troi Lu Kong Zui Ling Qi Zhu Jung Gu Zu Yang Su Kui Chang Yao Yu Shu Lai Yi Dou Ranh Wu Ying Fu Zhuan Fu Su Li Yao Tui Gui Lu Yan Qi Lang Zhu Gui Hu Jing Chi Troi Que Ju Zha Miao'; + case 669: + return 'Zhu Gan Xiong Ji Via Shai Mei Yun Gan Shou Lu You Jiang Nuo Ju You Troi Yi Teng Wei Che Lin Gu Li Liao Jiao Yang Biao Qi Via Yi Bin Meng Cha Gan Qu Di Lei Mit Ling Troi Huan Qu Luo Kui Ju Qiu Yu Hua Lei Ren Xiao Si Du Bie Ca Chai Thien Niu He Pei Fei Mu Fu Hu Wang Sha Jiao Wu Fu Jau Tom Tre Ngu Bing Zhu Zhu Chi Shen Hu Bu Ran Mu Li Jia Chinh Ma Buop Meng Mou Zhou Xian Hui Guai Jiu Mu Chay Ru Si Wu Ru Zha Nuo Xie Jiang Goi Hung Liet Giec Thu Li Shu Yi Di Qing Ju Zhi Lang Bu Kuang Yi Bo Giec Chi Jiang Wo Xun Vay Tun Mang Fang Zhuo Qia Ta Qi'; + case 670: + return 'Peng Bie Fen Tu Hua Jip E E Ding Ru E Quan Yan Si Ying Ni Ni Yi Leoi Bong Chuoi Go Ghim Sua Moi Tre Chinh Nham Roi Thia Mi Ye Po Cou Wei Hai Ying Ting Zhi Fei You Kui An Ba Han Nan Nai Jing Thu Wei Dyun Nau Me Tep Kho Chay Mu Tuoi Tranh Chu Bo Suo Tao Qi Tang Wei Gan Giec Ge Han Na Ge Zheng Ngo Giai Ta Si Ni Sang Bon Chach Trau Sat So Thon Chay Bong Vay Bon Xie Zeoi Zu Yu Ni Qi Shen Gay Bu Sung Kun Li Gua Mam Lep Sop Dua The Tram Yan Bu Jian Wu Cen Lin Zhuan Hui Tong Zha Hei Guo Jing Die Ying Dai Cheo Vay Leo Zhi'; + case 671: + return 'Vay Ro Wei Ji Rong Ao Dang Luo Ye Wei Qiang Ge Ji Vich Gwo Tram Zou Yi Zha Lie Ci Ye Duoi Duoi Zhan Chou Biao Xu You Sau Lui Su Xie Wei Li Ruoc Quynh Bo Jian Chan Kun Qing Sau Luon Shuang Xi Qu Luo Dang Nian Li Ba Nheo E Fu Fu Hun Zha An Qiu Chou Mian Xun Tu Ni Hu Shu Xu Zhong Kang You Xiao Xiao Ci Chi Diao Yi Ding Han Wan Yi Bao Yi Xun Xiang Tri Bi Jie Ge Ze Zhen Hu Xi Xin Xiao Fu Zhong Mao Xin Qiang Fen Ban Huan Jiao Bao Ya Yao Mao Qua Khuou Xi Ju Caa Qu Yue Tai Tou Mo Zha Qu Fu Khuou Qu Chi You Mo Ti Wa Tuo Chu'; + case 672: + return ' Ge Chim Qua Se Ge Qu Sa Ju Bip Die Yi Shi Yi Gui Jiang Song Qiong E Huang Hui Xun Ju Zhai Chi Lao Qi Xiu Hui Tong Fu Xun Jie Mi Yu Diec Chien Ket Sac Hau Song Zhuang Jiao Zhi Cheng Jie Xiao Chen Li Yue Zhi Lao Wo Qu Wang Yi Yi Lang Tou An Jue Yan Ju Zhen Zhi Mang Xiu Chuang Chu Tra Coc Coc Qua Qiang Fei Chang Mian Su Ao Fu Wei Zhi Min Chang Yan Yu Fu Ta Ji Fei Hu Ju Yu Qi Mei Bie Guo Ming Wan Wan Co Go Gie Vac Co Cun Jing Yu Xian Chun Ji Xiang Pen Fu Liu Sai Xue Zou Jie Zhan Yu Yu Mei Miao Mao Duo Fu Cha Jian Hung Miao Ao Ke Hau Cha Jing Ga Tra Hou Jip Gou Xi Rong Ge'; + case 673: + return 'Pan Yuan Xia Sha Pi Fu Qing Yong Qu Gong Ge Xian Su Ban Qi Hou Xi Wu So Huk Sao Cut Choe Hich Sao Qi Hu Gui Di Shang Mai Min Ji Xi Xian Ji Chang Kou Chong Zhang Piao Su Lue Li Meng Chong Tian Ling Chi Mok Chong Chi Niao Yong Ken Vac Cuoc Choi Ri Sam Quach Vac Yeng Tu Mi Shu Xi E Zi Cong Jie Ji Hou Sheng Li Qi Zhou Si Qu Xie Si Si Xu Fu Yeng Dui Khuou Tu Vet Keoi Nong Ya Liu Jia Gui Kui Chi Can Chu Guo Dan Loi Jian Dang Hou Kou Chu Qian Ai Pi Cui Nong Qua Quam Cuong Sao Xun Jing Meng Bin Lan Gu Chou Yong Gua Yu Zhou Juk Bo Ngan Chich Cui Cai Liu Bu Luo Jie Zhen Mie Guang Jia La'; + case 674: + return 'Shou Guo Meng Qian Lai He Tuan Hui Hong Lu Jia Jing Gui Yi Huan Luo Lei Jue Guan Quan Niao Nhan Man Yun Wen Chi Chi Zhi Ci Zhuang Hua Jie Qu Tu Min Mei Yu Ao Ban Pi Zhen Lu Chi Tou Jie Zhan Jin Lu Muoi Jian Tan Chang En Ci Wai Cou Kan Bian Muoi Wen Qian Man Man Gan Hui Gan Mam Ji Gan Huai Si Fu Leon Pi Ca Ben Sang Shi Huan Gui Ou Lin Leon Pao Syun Ying Ting Xiao Zhu Leon Yu Gwan Jian Qu Wan Kun Zhui Yu Guo Ping Zui Zu Zhu Nuan Zhu Piao Mi Bi Su Zoeng Pu Mi Ye Yu Yu Zhu Ling Nou Ling Buk'; + case 675: + return 'Liao Tuo Bi Na Qu Pi Dou Nie Tun Ji Ling Ku Su Tou Nai Ze Tong Ge Dui Jie Tian Tiao Chi Qu Sha Bo Li Luo Liao Shu Deng Chi Mie Tao Hun Nie Jun Hu Lu Ye Mo Chao Suo Ke Fu Chao Suo Qiu Su Yun Suo Ku Bo Lou Mo Lian Xuan Suo Man Bi Ti Lian Tan Shan Qu Du Huan Sao Kuang Nie Nie Luo Zuo Yi Xian Chao Tie Loi Shuo Mi Mi Wan Ben Qiang Mo Liu Wo Mei Tou Waa Mu Mei Zuo Tun Kang Tun Che Zheng Chong Tian Zhi Chan Chan Qing Tun Hui Que Zhan Jian Chan Huang Hui Chi Huang Heng Yun Tuan Bian Huang Yun Mo Gong Gong Gui Chan Que Rui Kuang Piao Lai Ru Niu Hu Jin Ni Bao Ni Bi Hu Li Zhu'; + case 676: + return 'Na Quan Feng Bi Li Bie Nian Dong Lian Ni Lian Ma Zhe Jia Yi Long Yi Dai Du Si Yi Tai Hang Shu Wan Su Yao Er Zhen Zyu Dou Jian Si Pang Hui Cha Shan Lu Wei Yu Yan Wan Qiao Luo Yu Tu Wei Ngam Tun Hun Ben Qie Jin Lai Mei Zhi Yu Ci Ye Die Cha Dian Man Deng Wei Nian Lei Bing Wu Zhen Rou Wai Mi Jie Hou Zhai Ru Zi Pan Mo Mi Qi Mo Zhi Ban Mie Lu Qi Chong Li Yi Tham Deng Cuo Dui Ma Yan Zeng Yan Dui Pu Yue Huo Mai Jian Nong Qin Qin Ye Ngon Tai Ngom Jian Cha Trui Dan Teng Li Niang Chan Zang Den Nghit Yu Zui Bian Chu Ran Ran Yang Bo Cu Tranh Sam Mi Ke Cu Xi Ma Shi Dian Shi'; + case 677: + return ' Ding Jiong Yuan Gan Hui Ji Peng Deng Beng Pang Ta Yuan Gao Yuan Dung Jia Trong Boi Kong Dong Xian Qi Sang Yin Long Teng Long Ren Yin Ping Pu Yuan Rong Fang Hang Mi Hu Zi Ling Jiong Rong Ping Guang Er Cu Jun Xiu Er Ti Yang Ai Hu Xi Hu Si Li Yi Gu Tang Que Zong Li Jiao Fan Pu Si Jie Lu Li Chan Yao Hui Hou Dian Qiu Jue Pi Seo Kui Xi Ti Xu Mui Mui Ngui Bian He Lian Su Liao Ngay Jin Hit Li Chan Qi Qi Zi Zi Qi Qi Zi Zhai Zhai Pa Ju Yan Hang Na Yan Zhan Shi Zhi Zha Rong Zha Yi Ming Ya Zhi Kuo Xia'; + case 678: + return 'Pian Ta Yi Xiu Zhai Duo E Loi Yin E Suan An Cuo Tuo Tuo Xia Chuo Suan Ji Qian Zu Zhai Yun Zhan Yi Ya Yue Rang He Qia Cha Ou Hu Yan Qie Bo Qiang Jie Ni Chan Qin Zao Yin Xie Qi Jian Xu Zeng E Zu Yi Zhi Li Li Yin Lian Chan Jue Za Zhai Pian Long Long Long Trong Long Long Mang Trong Zhe Gwi Gan Gou Ran Cu Jiao Bo Zhu Qiu Yang Xiao Hui Qu Rua Rua Ling Yin Pi Lian Wing'; + case 679: + return ' Qiao Duo Jian Ji'; + case 680: + return 'Ku Jim Zhen Sa Ce Leon Huk Dong Kiu Maai Bai Jim Zhan He Kui Lai Sau Laan Laai Shu Zyut Laan Luan Dung Waan Lou'; + case 681: + return ' Bai Liao Leon Reng Soeng Ning Duk Min Jing Geoi'; + case 682: + return ' Teoi Song Jue Leon Ya Qu She Ngaam Tuo Lou Jing Yan Nie Fan Qiao Yong Coeng Yi Lung Li Cau Ji Cim'; + case 683: + return ' Pin Wei Cung Mei Guai Loeng Haan Can Sok Zyut Maan Laai Sim'; + case 684: + return ' Fai Fan Bui Zai Lai Gai Fai Sip You'; + case 685: + return ' Cyun Ngap Hiu Hei Lai Si Luo Qing Zaan Wing'; + case 686: + return ' Hei Wai Yi Zuk Ta Dao Lung Kiu Cong Nu Nung Ngan Cong Duk Kwan Gwai'; + case 687: + return ' Bat Boi Zoeng Jian Lou She Ji Xu Xian Lou Pan Ya Paau'; + case 688: + return ' Shi Min Jian Chu Dang Baa Zyun Li Mou Wai Soeng Man Gwok Fei Ai Su Sa Jiu Kou'; + case 689: + return ' Gau Wu Gam Mou Diao Bi Si Gang Dung Fuk Nung Daat Saai Jie Yan Chi Faan Sang Lit Sit Fuk Ting Bong Sik Mou Si Leot Beng Koeng Yi Xun Zeoi Ji Fan Pin Lian Zim Be Laai Jing Gang Wei Co Nung Thuoc'; + case 690: + return ' Gaan King Can Qia Zyut Oi Syu Chang Lou Gaan Giu Cing Giu Te Gong Au Zaak Jiu Kui'; + case 691: + return 'Ji Zip Shu Luo Mik Lian Mei Jiao Pin Yi Jiu Fan Heoi Hu Yi Jyun To Nao Tong Giu Tiu Nung Ci Zan Faa Gei Yan Mong Wat Xian Xi Zyun Xiao Zung Lau Ngou Chi Kwai Sin Ze Sha Hei Zhong Xuan Ning Zin Zung Geoi Lung Gau Lian Cam Can Taam Gam Cing Lik Bat Can Coeng But Jue Leoi Zaam Luo Jaang Sin'; + case 692: + return ' Yue Sim Kuai Naap Bat Ling Faan Zhi Ping Tian Ji Zau Ni Gun Gwang Rou Ke Wai Gaau Buk Ham Leoi Lau Zyun Meng Jim Han Baat Zi Fu Gwo Cong Jyun Zaap Joeng Liu Ji Seot Kiu Gwan Mau San Xuan Faan Ji Lou Nip He Zung Juk'; + case 693: + return 'Lin Fan Dik Lom Jau Sok Bei Bai Sok Jing Sau Fun Sin Fan Jue Chan Zhan Kwai Nong Hoi Dau Bin Lan Xiao Leon Zi Nie Wan Sam Fui Lung Hoe Qin Bat Bing Bai Gau Zheng Ku Zam Zhen Yi Fu Duo Gan Wan Yun Ze Ngok Haan Jyun Cuk Fan Yu Bo Bung Am Sat Jian Zin Yuan Zhang Co Zok Bit Shi Wan Bu Su Lang Lo Wai Wu Nyun Wai Huang Hau Deoi Lian Jiang Zhan Hoeng'; + case 694: + return ' Hon Wen Jue To Po Zi Gwing Han Ai Kwan Tao Lu Ti Wong Yuan Aan Xi Soeng Zaak Cang Zin Kwai Kut Rau Xu Hong Joeng Zyun Saa Fan Bing Kiu Yang Bit Fu Lit Hui Shi Ci Gap Pu Zip Dyut Kwai Hua Lei Gyun Zau Jin Bin Zi Haa Jung Cau Bu Wat Sou Lie Gin Zhi Fau Fun Jue Lung Zha Fuk Ning Wat Gaa Gaap Wu Pei Aan Jyu Jyun Tou Kuang Bit Fong Kei Zok Diu Fuk Ti Gwat Chi Wu Ti Hou Duo Kwai Leot Chu'; + case 695: + return 'San Bai Zhang Jam Zeon Huan Wen Fung Tuo Pei Ku Ying Cu Baa Ngit Ngaau Zaak Co Yan Jie Ngaa Lung Nan Lam Dan Shou Hua Ke Hun Shu Bui Syu Fai Cau Gong Loi Wui Jing Laan Dou Xun Man Zi Zyu Kyut Ling Wing Zhi Caan Bui Zai Lou Laam Men Kuai Jam Wang Liang Cung Liu Ling Kei Zi Pun Cin Cung Tan To Keng Sui Li Zhi Kau Zi Fan Wan Saan Li Sik Hong Hoi Zau Da Zu Zu So'; + case 696: + return 'Cou Hap Ling Gaak Kui Cam Bik Xuan Luk Bang Mu Haam Sou Zoeng Ni Lou Yin Wo Dan Cin Lung Gui Dui Dung Lin Lou Wai Dan Chong Caam Laam Oi Qian Su'; + case 697: + return ' Mou Gan Yan Li Li Dyut Ye Ya Suo Siu Lou Zyut Cim Loeng Dyut Buk Sit Duk'; + case 698: + return ' Xia Gwang Mun Gang Cung Ye Gau Nip Chu Ye Hai Ngai Zeon Hong Baan Go Loi Yan Lai Jian The Zam Sam Baan Ou Zaam Ning Hiu Zhi Saa Ti Jin E Ngaap E Bap Daam Ban Zeon Lu Pan Ling'; + case 699: + return 'Doe Waa Bok Coi Saat Zoeng Baa Gun Zeon Die Ne So Ang Hoi Ke Gaam Tian Zyun Ou Lun Baat Haau Ce Xun Ngaam Lao Shan Cam Yin Jiang Nong Tian Kut Wan'; + case 700: + return ' Do Wai Xing Dong Waa Wai Re Maai Cim Kwai Laam Qia Zaan Fung Aa Dam'; + case 701: + return ' Be Cat Joeng Wai Li Keng Die Lan Wing Keng Kun Xu Hin Lan Sanh Loi Jam Xin Lau Jing'; + case 702: + return ' Kou Jyu Wai Sung Dong Soeng Hip Hip Waa Cai Gung Mun Wit Lou Joeng Chanh Naan Xi'; + case 703: + return ' Mo Diao Cau Pie Ze Goi Waa Bi Nong Kang Lay Lou Suo Jaap Kap Na Lin Waak Gaau Lyut Jian Niu Kang Duk Zoeng Hin Fei Dang Niao Bi Yan Xiao Li Shu'; + case 704: + return ' Huo Wei Xian Dui Hoi Shang Trua Ma Au Ngaa Sun Jeon Lo Daan Sing Shi Mou Jia Saat Nung Khay Kwai Zhi Ji Jian Hin Fei Lin Yan'; + case 705: + return ' Jib Chua Jan Xia Gwaa Pan Nao Gik Kau Mou Jian Bin Dip Wan Tyun Bei Men Guo'; + case 706: + return ' Taan Fai Gip Po Hua Fan Saap Wai Laan Jeoi Hon Ou Caau Xun Daat Cau Gung Mui Jian Lo Chan Sim Tong Laam Wui Ran Lian Lai'; + case 707: + return ' He Co Hiu Shan Zaan Li Dang Xun Jing Laan Cung Maa Gai Fai Wan Gwo Fen'; + case 708: + return ' Hai Yang Gwan Chang Cau Ying Kou Jip Zhong Gwan Gaan Mai Chou Min Jap Lan Que Cuoi Wan Hang Geng Suk Lan Xin Gei Cau Ben Jung Shai Tui'; + case 709: + return ' Wai Ou Long Sai Gaan Fu Au Ling Zyun Haan Chou Shi Lou Haam'; + case 710: + return ' Saa Xun Mie Kau Gaan Dan Yue Wa Keoi Zhan Zan Diao Sin Goi Yin Kwong Leoi Cyun Pai Cai Zik Ting Lim Huan Qian Chen Mik Zhun Jyun Yao Zha Xu Cau Gang Cau Ci Chi Tou Hat Sui Zhi Shuang Yan Yan Qian Zhu Faan Jin Leon Daan Mo Xiang Lou Bat Wai Suk Vai Nie Tong Jyu'; + case 711: + return ' Da Laam Faat Wai Man Liang Waai Haan Gwok Yu Lao Si Zit Zei Pan Ran Jian Laan Teoi Pin Sen Ham Yi Hun Gwik Cong Dong'; + case 712: + return ' Bi Dong Gong Wang Caak Moi Tuo Niu Diao Zhou Gaap Dip Shi Shai Lo Zaan Chan Cha Dong Ci Zi Tiu Zi Dou Dan Qi Jing Ming Dang Jren Zau Jing Cam Tap Wai Xu Kou Zi Hou Kwan Zhu Tau Gam Jian Tuo Zyu Gyun Tou Aau Fai Ngaa Wui Wai Fui Dong Ming Ren Fui Zau Pou Hen Zaa Cuk Hon Cuk Ting Long Lin Zaak Lou'; + case 713: + return 'Haak Tou Tam Cam Ji Gwan Yin Wui Shi Cong Zha Wong Hyun Duo Go Gaak He Chi Ta Gun Cat Fu Ying Cim Zha Hui Yi Liu Yan Ou Zyun Deoi Zang Zhuan Wai Cou Ngaai Daap Haak Tyun Wai Zaan Jian Fun Tui Zip Maau Cong Han Yi Bei Zaang Cyun Yan Ruan Duan Hau Lan Zhan Tang Tuan Naai Li Bui Leon Zou Duo Xie Bing Zhang Gwaan Laam Coeng Teng Nian Dian Nong Lung Lou Guo Ping'; + case 714: + return ' Mou Qi Ong Nian Gung Hoi Waan Tin Zang Pi Got You Xu Hui Song Guang Caau Bei Huo Xun Loi Mau Jyu Zaan Nong Guang'; + case 715: + return ' Zhe Hon Hua Yi Kau Pai Wai Lun Chang Jam Coeng Jin Pik Qi Cam Sek Shu Shen Co Lu Jip Zok Ning Zhao Zi Mu Hong Pei Xiang Do Guo Zaak Zai Du Hua Hon Hong Joeng Zi Tin Cuk Diu Paang Neoi Daan Chun Bo Leoi Saam Da Cou Caa Ziu Gwai Sin Hou Cung Nau Ceoi Weng Hat Zin Hui Cik Pie Ji So Xi Git Hei Cheng Lin Biao Giu Sui Bik Kai Hing Bok Zuan Jiao Wik Muon Leon Haa Jian Hung Kuang Gap Cuk Waak Qi Saa Kwai Que E Yin Jiu Baan Am Xian Deng Maa Wu Gai Ji Haap Tui'; + case 716: + return ' Mu Luo Jian Zhou Loeng Han Dip Ceoi Chan Yu Ye Kwai You Mo Di Daam Pun Zhuan Leoi Gen Wei Kut Wan Chen Hong Hei Ji Ding San Po Au Shou Pei Zhan Jyu Wai Hyut Xue Hoi Syun Gwok Fat Liu Yu Zan Cheng Zi Chuang Nian Ze Tai Gou Shang Ning Yi Man Ci En Guo Mang Bao Ti Jip Wu Ye Ngaau Zeoi Pi Sui Gin Da Tou Sik Qiu Tong Chong Ying Deng Yong Mo Fan Chan Faan Pei Pi Jiong Gua Ak Sai Kuang Shen Ci Tu'; + case 717: + return 'Long Ngon Fei Huo Paang Kei Chi Lin Tit Meng Biu Tuo Gin Fun Nao Nong Mat Git Jan Tou Diu Bang Gaai Wu Gang Ju Doi Tuo Zit Wei Zhao Ting Hou Tai Jip Lou To Wu La Lian Sing Zaa Tai You Jau Ji Ni Wong Keoi Ji Xi Guo Jing Zoeng Pu Gwaan Gun Ba Bu Zeon Jik Xiao Hung'; + case 718: + return 'Man Wa Ge Co Sang Ci Qiong Jam Sha Chou Li Lang Chuang Yue Kei Ang Yan Yan Miao Yue Wong Pin Am Leoi Ge Lan Gou Xian Piao Chong Zhuo Jin Qi Ou Fan Kou Ya Kwai Pik Hok Keoi Gaan Zhan Chang Cou Bian Gan Cai Coi Bo Wan Hun Nie Mo Shan Zhen Nung Lai Teng Zyu Ngaa Na Xie Hang Zha Zhi Nie Ngoi Kuo Chan Cuo Yi Ze Yun Zu Ji Gaam Ci Bo Yin Chu Gam Caat Jue Lung Yao'; + case 719: + return ' Jing'; + case 720: + return ' Li'; + case 721: + return ' Zin Ngoi Hon Put Dyut Lau'; + case 722: + return ' Mu Ying Bei Thin Huan Syu Zui Nan La'; + case 723: + return ' Zung Dou Oi Wai'; + case 725: + return ' Suo Ke'; + case 726: + return ' Fu Kwok'; + case 727: + return ' Ling Khan Oi'; + case 728: + return ' Pok Shen Rap Lan Din Jik'; + case 729: + return ' Lei Jyu Tong'; + case 730: + return ' Ngai Haan Fat Zaa Gwai Dik'; + case 731: + return ' Aa'; + case 732: + return ' Dong Sha Hung Zuk'; + case 733: + return ' Mou'; + case 734: + return ' Lo Lai'; + case 736: + return ' Lou Gun Geng'; + case 737: + return ' Nong Laan Aa Ling'; + case 738: + return ' Kau Lou Dit Zok Gwaa Riet Loeng Gwaa Zau Jeoi Ceoi Seoi Coi'; + case 739: + return ' Cha Du'; + case 740: + return ' Faan Jing'; + case 741: + return ' Zit Fu Loeng Soe Loeng Gin Kit'; + case 742: + return ' Jan Duk Tek'; + case 743: + return ' Dou Gu Ji Fan Ceon Waan Got'; + case 744: + return ' Coeng Cam Ke Gong Wang Sin Zyut Leoi'; + case 745: + return ' Mun Cyu Diu Rui Bei E Coeng Wai'; + case 746: + return ' Fung Lau Bat Hoi Aai Ji Mong Haai Zung Cou Deon Ning'; + case 747: + return ' Jyu Ngai Gwai Caan Huo Luk Hua Jung Haam Zam Gaai Jiu Mie Gong Chen Aan Soeng Gang Mau Kaa'; + case 760: + return 'Li Wan Yi Ni Wu Tui Bing Za Bei Seng Xiang Jun Suo Mian Tu Huang Ju Din Nei Zai Jung Yuan Bing Dong Kuang Qing Qian Ren Pi Ke Luo Ge Chan Ji Jung Mian Qin Shao Bao Cong Bei Hui Bei Bo Ji Ji Qing Qing Qing Hui Ji Sou Jiao Chi Jiu Xian Xi Cheng Zhou Ngok Mie Tang Qi Xian Shan Shan Hui Chi Zha Yao Tu Tan Tu Hao Pen Qie Zhuang Cheng Zhi Tu Xing Ci Bao Di Mai Hu Feng Duo Meng She Chi Ji Yu Tui Pin Fu Sao Cha Rao Lan Lan Yuan Zhi Ning Bao Lao Shou Jiang Dang You Yao Tu Cit Xiu Qian Wu Yan Dian Zi Chan Xun Chao Yi Xun Shui Mao Fen Man Yi Bing Bi Shu Lang Shuo Gong Yu Tou Tao Yi Xing Diao Shan Dong Ren Zhi Kuang Yuan Huang Jue Hui Dong Dun Ci Huang Shen Huang Lou Zeng Xian Fen Can Meng Cheng Lan Cheng Jia Ku Bao Ba Juan Wan Pin She Sao Ji Sau Jin Yan Yan Dou Mo Jiang Hui Jiao Hei Min Jing Ji Shu Zeon Wei Shu Wen Chang Mao Mian Zui Pu Na Tan Lang Wang Zong Qi Biao Hua Guai Gai Sang Mei Ao Ben Zi He Zha Yao Gai She Zhi Yi Ci Xu Kun Sui Wen Sha Qiao Juk Fan Yan Ben Qian Wu'; + case 761: + return 'Pai Hai Liu Hao Jin Nie Ben Baan Gang Yan Long Zi Dian Sha Yan Chao Fen Yue Jing Ying Shu Qian Zai Zhuan Tan Duan Cong Cuan Jue Zha Xi Bei Yan Ta Wang Gong Yue Ping Ping Dai Yu Zhen Suo Qiong Xing Rui Zai Yi Ping Yu Faa Yan Ji Zhi Da Zhen Zhen Zhen Juan Jie Chen Ye Shi Xing Lu Tian Hui Jiu Zu Chi Liu Fu Shu Jian Gu Ji Wen Tian Tian Ping Ping Zhuan Zhu Wei Chao Bei Xi Jiang San Ji Beng Yao Zi Zong Sao Luo Xing Mei Chao Yang Ao Zhe Ping Cong Ken Ren Yu Cui Cong Pi Ying Xuan Yu Xi Ci Beng Qi Yu Zhi Lao Hua Fong Ya Ku Ruo Chai Rong Jie Wu Mang Di Zhe Ping Ju Jun Cai Suo So Ping Jin Cuo Rui Cheng Lu Chao Lu Kui Nue Lu Kui Xi Chi Qian Yuan Ping Yun Sip Zhu Ci Ji Gui Xiang Ci Zhun Yi Jian Liu Shui Lu Yan Mao Nin Yuan Cheng Yu Bian Shi Jian Gun Bi Gan Qi Shu Zhao Ba Jian Pian Ren Shu Qi Ping Zi Chao Bo Xuan Hua Bing Qiang Zan Kai Peng Shai Wei Qian Xi Yun Pang Ping Lu Chan Bi Kun Yan E E'; + case 762: + return 'Ping Xue Ji Ban E Yun Bao Tui Gan Qiong Zhen Ji Jian Jiu Ji Pi Yu Ma Sha Ma Qian Zhi Mian Zhi Mi Fen Bi Pian'; + case 768: + return ' Haan Gaam Lyun Sung Dong Fu Haan Haan Juk Dai Teoi Leoi Ci Zaan Hok Cong Bi Duk'; + case 769: + return ' Shen Tyun Leoi Duk Dan Xia Wei Laam Haai Dung Gaap Hong Ji Gaa He Hei Taam Saam'; + case 770: + return ' Hei Soeng Dim Can Laam Aak Zaan Bok Yan Zaan Wei Gong Jin Jik Gaap Kok Jip Gaan Hok Dit Zhan Coeng Haam Kui Man Jim Cim Lou Dong Zyun Jim Bi'; + case 771: + return 'Jing Zing Cim Zaak Yun Laan Aa Wai Sung Lung Dung Lu Jip Jiu Zak Kuai Naau Ngaam Wei Ngok Jin Cyun Wu Zin Lou Laan Ma Kui Daai'; + case 772: + return ' Kong Tyun Leon Zap Jim Lau Gung Haan Caam Sing Luo Zi Dai Ai Tong Mun Cit Miao Caang Wu Sim Ep Jip Zit Za Syun Lai Hang Ruan Kwai Saam'; + case 773: + return ' Dai Gwai Tan Hin Yu Duk Cam Keoi Giu Xie Kui Jim Nan Lei Hui Fong Leon Chou Xie Sik Jim Caan Wan Zeon Si Cin Sam Suk Fan'; + case 774: + return 'Daai Guk King Jim Min Xiao Laai Sou Sau Wu Lim Siu Lou Ning Leoi Ran Ye Maa Cung Dung Sim Bat Zap Zit Ji Wai Sim Lyun Lou Lim Haan Am Ling Ding'; + case 775: + return ' Laam Can Joeng Ho Zin Eun Jing Jing Yin Fai Gaan Siu Sin Hin Chui Jik Dung Zit Gin Bik Zao Fan Jim'; + case 776: + return ' Zin Gong Hang Yao Bei Lou Hiu Hui Loi Wo Caam Ban Ying Kei Che Lou Nou Sau Suk Mou Aang Lau Wei Ning Zek Gaan Teoi Zik Lyun'; + case 777: + return ' Tang Lik Taat Du Duk Ham Cung Fan Ying Maan Saai Keng Gaan Kwai Meng Tong Kwai Baa Lik Wai Lung Zaak Aa Lou Ngaam To Gaan Jin To Zat Qin Laam Zyu Joeng Kui Nung'; + case 778: + return ' Tai Kong Zai Ci Lung Tiu Cang Seoi Tyun Lou Giu Dong Ak Zaa Zung Lou Jing Tyun Zoeng Tyun Mun Laan Zang Fau'; + case 779: + return 'Gai Wu O Lie Fu Keoi Zyu Jin To Wang Gang Haap Bat Zyu Hiu Zang Ci Goi Bang Sing Kau Fat Chen Wan Zi Man Cim Wik Waak Cap Cai Sik Bik Zung Hu Taam Sau Saam Zi Miu Beng Hin Zung Zung Sok Cyun Jik Zoi Syun Qi Saan Seoi Zuan Zeon Wat La Gaai Lian Fuk Jau Cong Gun Gyun Lou Saap Dou Lung Hoeng Fu Zo Hiu Sau Lom Nai Mun Gaam'; + case 780: + return ' Tan Soeng Zhou Daai Lau Zeoi Tang Jau Leon Kui Deoi Si Hei Saat Za Fu Lau Cit Gwo Gung Gaan Wing Mang Ung Naap Fan Zuk Jian Zung Xiang Fan Fu Leoi Leoi Bei Ci Zik Laai Teoi Tang Leoi Hiu Wu Zaan Mou Ce Hin Zung Leon Wai Zhan Lung Zaak Hing Ok Ngai Guo Daat Ji Zim Can Fei Ang Wai Lung Ngai Deoi Yan Nung Daat Si'; + case 781: + return ' Sam Pit Siu Li Gaan Gwan Leoi Dou Ceoi Lo Ceoi Luk Hok Daai Jing Giu Joeng Zeon Jau Caau Fan Ngo Sam Seot Jai Ngai Joeng Dit Ling Gau Tou Wo Wing Naau Hang Shan Hap Ngaak Ci Haau Zi Zim Bou Dou Bie Cim Ngo Saa Hang Cam Hei Zhuo Cuk Ngai Zeoi Zyut Daap Zip Jyun Xu Waak Tou Hai Hok Jyu Ji Cung Zaap Zaa Hao Ham To Ci Taan Ji Nau Gyun Sap Jiu Lung Duk Mi Lau Tik Ji Wun Ci Seoi Cung Fai Zeon Kui Sing Jat Biu Zhuan Zong Jyun Li Hiu Kiu Du'; + case 782: + return ' Shuang Dip Gwai Chan Saai Lin Zai Cai Teoi Do Wai Chun Faan Ngai Kwong Yue Tyun Faan Ba Zaan Paang Xian Fu Dai Keoi Pou Deoi Gung Guk Hong Wun Wan Sin Ling Zip Lu Gwo Paai Paang Ham Jyun Cyun Fuk Zong Duo Zeon Laam Keng Sik Er Lao Faan Cung Zaan Gik Nie Hat Luo Leon Min Huo Chen Dong Jiu Dai Biang Biang Heoi Wai Hiu Bei'; + case 783: + return ' Jik Lao Lan Mai Hing Gei Baat Hua Dai Kong Ciu Au Lik Aak Zi Jat Jin Jan Bing Lung Pei Zaai Kaa Sang Wo Ngau Fau Zyu Bun Fat Gat Ham Kwaa Gwong Tung Wai Pik Ci Gwai Ren Beng Yong Gwo Zip But Hung Zhuo Mui Ham Juk Tun So Cong Fu Zim Biu Pai Tou Fei Gam Gun Taap Jip Do Kim Zam Jyu Wui Gaai Dyun Seng Zung Fuk Gwang Se Haa Kwai Zuan Ngou Jip Aa Gaam Taap Oi Lim Tong Ceoi Cung Luk Lan Si Wai Zaam Ding Zyun Tin Cyun Suk Jit La Gaam Ou Seoi Mit Leoi Zyun Zha Zim Leoi Luo Zhen Gun Xia Xie Wai Peng Ni Saat Ngaat Yu Guang Tang Kap Pik'; + case 784: + return ' Zat Fan Deoi Wan Yi Duo Bat Cin Duk Gwai Lau Laan Laan Sa Mui Bei Gaap Hyun Wan Ciu Sip Duk Hu Dui Haai Wan Duo Ku Zhuo Jiu Fui Ngaak Ping Loi Aat Fu Jim Kwai Ceoi Pi Seoi Ham Ham Soi Gao Gong Fui Seon Zhan Ban Piu Ciu Biu Haa You Toi Lit Lau Li Rui Haau Yu Zaap Biu Xi Jyu Bok Faan Ying Ban Zhi En Tim Ban Ak Bau Daam'; + case 785: + return 'Fan Tou Gin Fui Ci Shang Mung En Zaan Zyu Tok Guang Duk Bou Zap Saap Geoi But Lung Can Bat Jung Zi Ji Xu Fu Tou Bok Cheng Bo Sung Loi Hyun Ngo Teoi Se To Jiu Pin Haa Jau Hon Gwai Sing Tou Pan Wong Heoi Zaap Tim Wat Jin Haau Haan Haan Kui Fei Laam Mun Zuan Soeng Chao Caau Kui Cau Dan Ya Tok Jyun Bei Pei Wu Naap Yu Baan Leon Hong Sam Mut Mei Keoi Pei Sin Haap Cau Sing Gwan But You Gang Fu Ji Suk Giu Lok Ru Yi Loi Mong Saau Ye Jau Fu So Na Zik Luk Cok Jing Zhi Gwai Haam Gau Guk Zung Suk'; + case 786: + return 'Ju Saan Jyu Wei Hau Zung Lou Gang Geng Kin Lau Hou Sau Joek Sang Zuk Zyun Fai Si Cam Cen Faan Lai Jyu Soeng Mit Ngok Meng Sin Jyut Dou Gon Han Ji Juk Fu Tyun Gwik Baan Huan Wu Kyut Go Pei Daan Zeoi Zi Tit Zi Fu Gip Mou Zaak Ging Bin Jiu Song Gui Gat Lou Yuan Aa Ji Ngaai Zyu Giu Gui Lok Joeng Jyu Kwan Mau Maai Joeng Loi Hon Yi Tou Hei Fu To Zik Gei Zeon Zeon Luk Kei Ming Lei Jik Zeoi Tou Guk Jik Hung Gin Geoi Zyut Zi Fuk Gaai Ceon Yuan Mo Tai Dat Jau Cyun Zan Tin Zeon Niao Tong Hat Tou Jiu Ji Yan Jung Shang Ji Kyut Keoi Tou Ling Jyu Shu Jyu Lo Gik Ji Dik Bu Leoi Joek Lu Lu Chuai Huai Saan Hat Kuang Mut Heoi Tou Hua Kuk Ge Bing Qu Fu Fu Sha Gwo Mo Bu Lou Ciu Zhi Kwong Lian Mung Fan Chan Lou Cuk Heoi'; + case 787: + return 'Yang Keoi Waa Zi Mi Man Bit Ma Bik Coeng Wan Nung Cai Zi Zi Jin Zaak Zau Ceot Ci Yao Sit Kyun Wan Zhai Zhan Cuk Yi Ji Jyu Din Jik Gung Daap Ran Gou Jiao Tung Bit'; + case 788: + return ' Ji Go Ceoi'; + case 789: + return ' Lo Paan'; + case 790: + return ' Me'; + case 791: + return ' Mit Wo'; + case 792: + return ' Jyun Lung'; + case 793: + return ' Naa'; + case 799: + return ' Bang'; + case 800: + return ' Bang Lai'; + case 3584: + return ' ! " # $ % & \' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~'; + } + return ''; +}; From 0f5bb2caa5b1c81460a10199a2bc51281f0be557 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Fri, 29 Dec 2023 18:21:55 -0700 Subject: [PATCH 221/233] Use AnyAscci to convert ActivityPub Unicode messages to ASCII-suitable Unicode to ASCII transliteration --- core/activitypub/util.js | 6 +- package-lock.json | 127 ++-- yarn.lock | 1554 +++++++++++++++++++------------------- 3 files changed, 854 insertions(+), 833 deletions(-) diff --git a/core/activitypub/util.js b/core/activitypub/util.js index 597710ddd..1fa4d09f3 100644 --- a/core/activitypub/util.js +++ b/core/activitypub/util.js @@ -7,6 +7,7 @@ const { WellKnownRecipientFields } = require('./const'); const Log = require('../logger').log; const { getWebDomain } = require('../web_util'); const Endpoints = require('./endpoint'); +const anyAscii = require('../anyascii/any-ascii'); // deps const _ = require('lodash'); @@ -220,8 +221,9 @@ function messageToHtml(message) { } function htmlToMessageBody(html) { - const res = stripHtml(decode(html)); - return res.result; + let res = stripHtml(decode(html)); + res = anyAscii(res.result); + return res; } function userNameFromSubject(subject) { diff --git a/package-lock.json b/package-lock.json index b9621b5df..b90e3978b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "@breejs/later": "4.1.0", "add": "^2.0.6", + "any-ascii": "zane-dmax/anyascii/#cjs", "async": "3.2.4", "avatar-generator": "^2.0.4", "binary-parser": "2.1.0", @@ -36,18 +37,18 @@ "minimist": "^1.2.6", "moment": "2.29.4", "nntp-server": "3.1.0", - "node-pty": "0.10.1", + "node-pty": "1.0.0", "nodemailer": "6.7.7", "otplib": "11.0.1", "qrcode-generator": "^1.4.4", "rlogin": "^1.0.0", "sane": "5.0.1", "sanitize-filename": "^1.6.3", - "sqlite3": "5.0.11", + "sqlite3": "5.1.6", "sqlite3-trans": "1.3.0", - "ssh2": "1.11.0", + "ssh2": "1.14.0", "string-strip-html": "8.4.0", - "systeminformation": "5.12.3", + "systeminformation": "5.21.7", "telnet-socket": "0.2.4", "temptmp": "^1.1.0", "uuid": "8.3.2", @@ -394,6 +395,10 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-ascii": { + "resolved": "zane-dmax/anyascii", + "link": true + }, "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -610,9 +615,9 @@ } }, "node_modules/buildcheck": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz", - "integrity": "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==", + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", + "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", "optional": true, "engines": { "node": ">=10.0.0" @@ -976,14 +981,14 @@ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" }, "node_modules/cpu-features": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz", - "integrity": "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==", + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.9.tgz", + "integrity": "sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ==", "hasInstallScript": true, "optional": true, "dependencies": { - "buildcheck": "0.0.3", - "nan": "^2.15.0" + "buildcheck": "~0.0.6", + "nan": "^2.17.0" }, "engines": { "node": ">=10.0.0" @@ -2960,9 +2965,9 @@ } }, "node_modules/nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" }, "node_modules/napi-build-utils": { "version": "1.0.2", @@ -3141,12 +3146,12 @@ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" }, "node_modules/node-pty": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz", - "integrity": "sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-1.0.0.tgz", + "integrity": "sha512-wtBMWWS7dFZm/VgqElrTvtfMq4GzJ6+edFI0Y0zyzygUSZMgZdraDUMUhCIvkjhJjme15qWmbyJbtAx4ot4uZA==", "hasInstallScript": true, "dependencies": { - "nan": "^2.14.0" + "nan": "^2.17.0" } }, "node_modules/nodemailer": { @@ -4299,9 +4304,9 @@ } }, "node_modules/sqlite3": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz", - "integrity": "sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.6.tgz", + "integrity": "sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==", "hasInstallScript": true, "dependencies": { "@mapbox/node-pre-gyp": "^1.0.0", @@ -4329,20 +4334,20 @@ } }, "node_modules/ssh2": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz", - "integrity": "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.14.0.tgz", + "integrity": "sha512-AqzD1UCqit8tbOKoj6ztDDi1ffJZ2rV2SwlgrVVrHPkV5vWqGJOVp5pmtj18PunkPJAuKQsnInyKV+/Nb2bUnA==", "hasInstallScript": true, "dependencies": { - "asn1": "^0.2.4", + "asn1": "^0.2.6", "bcrypt-pbkdf": "^1.0.2" }, "engines": { "node": ">=10.16.0" }, "optionalDependencies": { - "cpu-features": "~0.0.4", - "nan": "^2.16.0" + "cpu-features": "~0.0.8", + "nan": "^2.17.0" } }, "node_modules/sshpk": { @@ -4462,9 +4467,9 @@ } }, "node_modules/systeminformation": { - "version": "5.12.3", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.3.tgz", - "integrity": "sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A==", + "version": "5.21.7", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.21.7.tgz", + "integrity": "sha512-K3LjnajrazTLTD61+87DFg8IXFk5ljx6nSBqB8pQLtC1UPivAjDtTYGPZ8jaBFxcesPaCOkvLRtBq+RFscrsLw==", "os": [ "darwin", "linux", @@ -4940,7 +4945,8 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } - } + }, + "zane-dmax/anyascii": {} }, "dependencies": { "@breejs/later": { @@ -5177,6 +5183,9 @@ "color-convert": "^2.0.1" } }, + "any-ascii": { + "version": "file:zane-dmax/anyascii" + }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -5329,9 +5338,9 @@ "from": "buffers@github:NuSkooler/node-buffers" }, "buildcheck": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz", - "integrity": "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==", + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", + "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", "optional": true }, "bunyan": { @@ -5597,13 +5606,13 @@ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" }, "cpu-features": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz", - "integrity": "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==", + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.9.tgz", + "integrity": "sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ==", "optional": true, "requires": { - "buildcheck": "0.0.3", - "nan": "^2.15.0" + "buildcheck": "~0.0.6", + "nan": "^2.17.0" } }, "cross-spawn": { @@ -7084,9 +7093,9 @@ } }, "nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" }, "napi-build-utils": { "version": "1.0.2", @@ -7228,11 +7237,11 @@ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" }, "node-pty": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-0.10.1.tgz", - "integrity": "sha512-JTdtUS0Im/yRsWJSx7yiW9rtpfmxqxolrtnyKwPLI+6XqTAPW/O2MjS8FYL4I5TsMbH2lVgDb2VMjp+9LoQGNg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-1.0.0.tgz", + "integrity": "sha512-wtBMWWS7dFZm/VgqElrTvtfMq4GzJ6+edFI0Y0zyzygUSZMgZdraDUMUhCIvkjhJjme15qWmbyJbtAx4ot4uZA==", "requires": { - "nan": "^2.14.0" + "nan": "^2.17.0" } }, "nodemailer": { @@ -8064,9 +8073,9 @@ "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" }, "sqlite3": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz", - "integrity": "sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.6.tgz", + "integrity": "sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==", "requires": { "@mapbox/node-pre-gyp": "^1.0.0", "node-addon-api": "^4.2.0", @@ -8083,14 +8092,14 @@ } }, "ssh2": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz", - "integrity": "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.14.0.tgz", + "integrity": "sha512-AqzD1UCqit8tbOKoj6ztDDi1ffJZ2rV2SwlgrVVrHPkV5vWqGJOVp5pmtj18PunkPJAuKQsnInyKV+/Nb2bUnA==", "requires": { - "asn1": "^0.2.4", + "asn1": "^0.2.6", "bcrypt-pbkdf": "^1.0.2", - "cpu-features": "~0.0.4", - "nan": "^2.16.0" + "cpu-features": "~0.0.8", + "nan": "^2.17.0" } }, "sshpk": { @@ -8175,9 +8184,9 @@ } }, "systeminformation": { - "version": "5.12.3", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.12.3.tgz", - "integrity": "sha512-aPyTDzK/VjEheGEODprxFTMahIWTHGyWXxTsh9EOHjeekVltrIWrle4dOZouOlOYgtKM1pDoHkrR+IssgYCK/A==" + "version": "5.21.7", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.21.7.tgz", + "integrity": "sha512-K3LjnajrazTLTD61+87DFg8IXFk5ljx6nSBqB8pQLtC1UPivAjDtTYGPZ8jaBFxcesPaCOkvLRtBq+RFscrsLw==" }, "tar": { "version": "6.1.11", diff --git a/yarn.lock b/yarn.lock index e6272e827..6a14a4d4a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,27 +2,22 @@ # yarn lockfile v1 -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - "@breejs/later@4.1.0": version "4.1.0" - resolved "https://registry.yarnpkg.com/@breejs/later/-/later-4.1.0.tgz#9246907f46cc9e9c9af37d791ab468d98921bcc1" + resolved "https://registry.npmjs.org/@breejs/later/-/later-4.1.0.tgz" integrity sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA== "@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== + version "1.0.3" + resolved "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz" + integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== dependencies: exec-sh "^0.3.2" minimist "^1.2.0" "@eslint/eslintrc@^1.4.1": version "1.4.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz" integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== dependencies: ajv "^6.12.4" @@ -37,13 +32,13 @@ "@gar/promisify@^1.0.1": version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== "@humanwhocodes/config-array@^0.11.8": - version "0.11.11" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" - integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== + version "0.11.8" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz" + integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" @@ -51,18 +46,18 @@ "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@mapbox/node-pre-gyp@^1.0.0": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa" - integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ== + version "1.0.9" + resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz" + integrity sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw== dependencies: detect-libc "^2.0.0" https-proxy-agent "^5.0.0" @@ -76,7 +71,7 @@ "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -84,12 +79,12 @@ "@nodelib/fs.stat@2.0.5": version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -97,7 +92,7 @@ "@npmcli/fs@^1.0.0": version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== dependencies: "@gar/promisify" "^1.0.1" @@ -105,7 +100,7 @@ "@npmcli/move-file@^1.0.1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== dependencies: mkdirp "^1.0.4" @@ -113,46 +108,53 @@ "@tootallnate/once@1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + abbrev@1: version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== +acorn@^8.8.0: + version "8.8.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== add@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/add/-/add-2.0.6.tgz#248f0a9f6e5a528ef2295dbeec30532130ae2235" + resolved "https://registry.npmjs.org/add/-/add-2.0.6.tgz" integrity sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q== agent-base@6, agent-base@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" agentkeepalive@^4.1.3: - version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" - integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== + version "4.2.1" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" + integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== dependencies: + debug "^4.1.0" + depd "^1.1.2" humanize-ms "^1.2.1" aggregate-error@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" @@ -160,7 +162,7 @@ aggregate-error@^3.0.0: ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -168,68 +170,66 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-escapes@^4.2.1: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" -ansi-escapes@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" - integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== - dependencies: - type-fest "^1.0.2" - ansi-regex@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + version "4.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== dependencies: + "@types/color-name" "^1.1.1" color-convert "^2.0.1" -ansi-styles@^6.0.0, ansi-styles@^6.1.0: +ansi-styles@^6.0.0: version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== +"any-ascii@https://github.com/zane-dmax/anyascii.git#cjs": + version "0.0.0" + resolved "https://github.com/zane-dmax/anyascii.git#664b44b87f3718cfa454aa391eded418e5f16d22" + anymatch@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + version "3.1.2" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" aproba@^1.0.3: version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== "aproba@^1.0.3 || ^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== are-we-there-yet@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== dependencies: delegates "^1.0.0" @@ -237,7 +237,7 @@ are-we-there-yet@^2.0.0: are-we-there-yet@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== dependencies: delegates "^1.0.0" @@ -245,7 +245,7 @@ are-we-there-yet@^3.0.0: are-we-there-yet@~1.1.2: version "1.1.7" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz" integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== dependencies: delegates "^1.0.0" @@ -253,41 +253,46 @@ are-we-there-yet@~1.1.2: argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-union@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== + resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" + integrity "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==" dependencies: array-uniq "^1.0.1" array-uniq@^1.0.1: version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + integrity "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" asn1@^0.2.6, asn1@~0.2.3: version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + async@3.2.4: version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== avatar-generator@^2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/avatar-generator/-/avatar-generator-2.0.4.tgz#01d5db33b86ff32cf274f532ab9def0aaf49921a" + resolved "https://registry.npmjs.org/avatar-generator/-/avatar-generator-2.0.4.tgz" integrity sha512-1XH0LAO6QwtOvv9ImVKr6O0DUtH+QX4B6ReBcfjbUPnFVZMfSgM18jkP8MDsrPxk9UmCGMddxBCxdizU7lbwrw== dependencies: commander "^5.1.0" @@ -295,35 +300,35 @@ avatar-generator@^2.0.4: sharp "^0.25.2" balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + version "1.0.0" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + integrity "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" + integrity "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==" dependencies: tweetnacl "^0.14.3" binary-parser@1.6.2: version "1.6.2" - resolved "https://registry.yarnpkg.com/binary-parser/-/binary-parser-1.6.2.tgz#8410a82ffd9403271ec182bd91e63a09cee88cbe" + resolved "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz" integrity sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ== binary-parser@2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/binary-parser/-/binary-parser-2.1.0.tgz#425776c870c64ddb555d7cc0010ccbf9d9278234" + resolved "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz" integrity sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ== bl@^4.0.3, bl@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -332,7 +337,7 @@ bl@^4.0.3, bl@^4.1.0: brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -340,33 +345,33 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" bser@2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" buffer-crc32@~0.2.3: version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" + integrity "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" buffer@^5.5.0: version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" @@ -374,16 +379,16 @@ buffer@^5.5.0: "buffers@github:NuSkooler/node-buffers": version "0.1.1" - resolved "https://codeload.github.com/NuSkooler/node-buffers/tar.gz/cd0855598f7048b02f0a51c90e22573973e9e2c2" + resolved "git+ssh://git@github.com/NuSkooler/node-buffers.git#cd0855598f7048b02f0a51c90e22573973e9e2c2" buildcheck@~0.0.6: version "0.0.6" - resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.6.tgz#89aa6e417cfd1e2196e3f8fe915eb709d2fe4238" + resolved "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz" integrity sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A== bunyan@1.8.15: version "1.8.15" - resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.15.tgz#8ce34ca908a17d0776576ca1b2f6cbd916e93b46" + resolved "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz" integrity sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig== optionalDependencies: dtrace-provider "~0.8" @@ -393,7 +398,7 @@ bunyan@1.8.15: cacache@^15.2.0: version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + resolved "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== dependencies: "@npmcli/fs" "^1.0.0" @@ -417,24 +422,19 @@ cacache@^15.2.0: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== capture-exit@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + resolved "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz" integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== dependencies: rsvp "^4.8.4" -chalk@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== - chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -442,46 +442,47 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: chardet@^0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== chownr@^1.1.1: version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chownr@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cli-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" -cli-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" - integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== - dependencies: - restore-cursor "^4.0.0" - cli-spinners@^2.5.0: - version "2.9.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.1.tgz#9c0b9dad69a6d47cbb4333c14319b060ed395a35" - integrity sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ== + version "2.6.1" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" cli-truncate@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== dependencies: slice-ansi "^5.0.0" @@ -489,51 +490,51 @@ cli-truncate@^3.1.0: cli-width@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== clone@^1.0.2: version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + integrity "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" code-point-at@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== coffee-script@^1.12.4: version "1.12.7" - resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.12.7.tgz#c05dae0cb79591d05b3070a8433a98c9a89ccc53" + resolved "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz" integrity sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw== color-convert@^1.9.3: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== color-string@^1.6.0: version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== dependencies: color-name "^1.0.0" @@ -541,55 +542,50 @@ color-string@^1.6.0: color-support@^1.1.2, color-support@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== color@^3.1.2: version "3.2.1" - resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz" integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== dependencies: color-convert "^1.9.3" color-string "^1.6.0" -colorette@^2.0.20: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -commander@11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" - integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ== +colorette@^2.0.19: + version "2.0.19" + resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== commander@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== +commander@^9.4.1: + version "9.5.0" + resolved "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== + concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== -core-util-is@1.0.2: +core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - cpu-features@~0.0.8: version "0.0.9" - resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.9.tgz#5226b92f0f1c63122b0a3eb84cb8335a4de499fc" + resolved "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.9.tgz" integrity sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ== dependencies: buildcheck "~0.0.6" @@ -597,7 +593,7 @@ cpu-features@~0.0.8: cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -606,66 +602,66 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: dashdash@^1.12.0: version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== dependencies: assert-plus "^1.0.0" -debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" decompress-response@^4.2.0: version "4.2.1" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz" integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== dependencies: mimic-response "^2.0.0" decompress-response@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: mimic-response "^3.1.0" deep-extend@^0.5.1: version "0.5.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz" integrity sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w== deep-extend@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + version "0.1.3" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" + integrity "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==" deepdash@^5.3.9: version "5.3.9" - resolved "https://registry.yarnpkg.com/deepdash/-/deepdash-5.3.9.tgz#2aa92570d7b1787ed281e2fafe0be24df00ddfe4" + resolved "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz" integrity sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg== dependencies: lodash "^4.17.21" lodash-es "^4.17.21" defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + version "1.0.3" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" + integrity "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==" dependencies: clone "^1.0.2" del@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - integrity sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A== + resolved "https://registry.npmjs.org/del/-/del-3.0.0.tgz" + integrity "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==" dependencies: globby "^6.1.0" is-path-cwd "^1.0.0" @@ -676,46 +672,51 @@ del@^3.0.0: delegates@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + integrity "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" denque@^2.0.1: version "2.1.0" - resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" + resolved "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz" integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== +depd@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + detect-libc@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz" integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== detect-libc@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" - integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== + version "2.0.1" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" + integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" dtrace-provider@~0.8: - version "0.8.8" - resolved "https://registry.yarnpkg.com/dtrace-provider/-/dtrace-provider-0.8.8.tgz#2996d5490c37e1347be263b423ed7b297fb0d97e" - integrity sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg== + version "0.8.7" + resolved "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz" + integrity "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q==" dependencies: - nan "^2.14.0" + nan "^2.10.0" eastasianwidth@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== easy-table@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/easy-table/-/easy-table-1.2.0.tgz#ba9225d7138fee307bfd4f0b5bc3c04bdc7c54eb" + resolved "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz" integrity sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww== dependencies: ansi-regex "^5.0.1" @@ -724,7 +725,7 @@ easy-table@^1.2.0: ecc-jsbn@~0.1.1: version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== dependencies: jsbn "~0.1.0" @@ -732,89 +733,89 @@ ecc-jsbn@~0.1.1: emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== encoding@^0.1.12: version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + version "1.4.1" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== dependencies: once "^1.4.0" env-paths@^2.2.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== err-code@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-config-prettier@^8.5.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" - integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== + version "8.5.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== eslint-plugin-json@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz#251108ba1681c332e0a442ef9513bd293619de67" + resolved "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz" integrity sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g== dependencies: lodash "^4.17.21" vscode-json-languageservice "^4.1.6" eslint-scope@^7.1.1: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + version "7.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" eslint-utils@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== dependencies: eslint-visitor-keys "^2.0.0" eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + version "2.0.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== eslint@8.31.0: version "8.31.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.31.0.tgz#75028e77cbcff102a9feae1d718135931532d524" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz" integrity sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA== dependencies: "@eslint/eslintrc" "^1.4.1" @@ -858,66 +859,46 @@ eslint@8.31.0: text-table "^0.2.0" espree@^9.4.0: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + version "9.4.1" + resolved "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz" + integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== dependencies: - acorn "^8.9.0" + acorn "^8.8.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" + eslint-visitor-keys "^3.3.0" esquery@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + version "1.4.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + version "5.2.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -eventemitter3@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" - integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== - exec-sh@^0.3.2, exec-sh@^0.3.4: version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" + resolved "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz" integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== -execa@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" - integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^4.3.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - execa@^4.0.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== dependencies: cross-spawn "^7.0.0" @@ -930,120 +911,129 @@ execa@^4.0.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz" + integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^3.0.1" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + exiftool@^0.0.3: version "0.0.3" - resolved "https://registry.yarnpkg.com/exiftool/-/exiftool-0.0.3.tgz#f58a92bd77270adc54f3151ced61a4a3ab69d707" - integrity sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw== + resolved "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz" + integrity "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" expand-template@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + version "3.0.3" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz" + integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== dependencies: chardet "^0.7.0" iconv-lite "^0.4.24" tmp "^0.0.33" -extsprintf@1.3.0: +extsprintf@1.3.0, extsprintf@^1.2.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" fastq@^1.6.0: version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" fb-watchman@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + version "2.0.1" + resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== dependencies: bser "2.1.1" figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + version "3.1.0" + resolved "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz" + integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== dependencies: escape-string-regexp "^1.0.5" file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" find-up@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" path-exists "^4.0.0" flat-cache@^3.0.4: - version "3.1.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.1.tgz#a02a15fdec25a8f844ff7cc658f03dd99eb4609b" - integrity sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q== + version "3.0.4" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: - flatted "^3.2.9" - keyv "^4.5.3" + flatted "^3.1.0" rimraf "^3.0.2" -flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== +flatted@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" + integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== follow-redirects@^1.15.2: - version "1.15.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" - integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== + version "1.15.2" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== fs-constants@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== fs-extra@10.1.0: version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" @@ -1052,19 +1042,19 @@ fs-extra@10.1.0: fs-minipass@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" gauge@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" + resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== dependencies: aproba "^1.0.3 || ^2.0.0" @@ -1079,7 +1069,7 @@ gauge@^3.0.0: gauge@^4.0.3: version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== dependencies: aproba "^1.0.3 || ^2.0.0" @@ -1093,7 +1083,7 @@ gauge@^4.0.3: gauge@~2.7.3: version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + resolved "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz" integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== dependencies: aproba "^1.0.3" @@ -1107,38 +1097,38 @@ gauge@~2.7.3: get-stream@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" get-stream@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== getpass@^0.1.1: version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== dependencies: assert-plus "^1.0.0" github-from-package@0.0.0: version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" glob@8.0.3: version "8.0.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" + resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== dependencies: fs.realpath "^1.0.0" @@ -1149,8 +1139,8 @@ glob@8.0.3: glob@^6.0.1: version "6.0.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" - integrity sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A== + resolved "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz" + integrity "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==" dependencies: inflight "^1.0.4" inherits "2" @@ -1158,9 +1148,33 @@ glob@^6.0.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.3, glob@^7.1.3, glob@^7.1.4: +glob@^7.0.3, glob@^7.0.5: + version "7.1.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.1.6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.4: version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -1171,16 +1185,16 @@ glob@^7.0.3, glob@^7.1.3, glob@^7.1.4: path-is-absolute "^1.0.0" globals@^13.19.0: - version "13.23.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" - integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== + version "13.19.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz" + integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ== dependencies: type-fest "^0.20.2" globby@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw== + resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" + integrity "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==" dependencies: array-union "^1.0.1" glob "^7.0.3" @@ -1189,48 +1203,48 @@ globby@^6.1.0: pinkie-promise "^2.0.0" graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.6: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + version "4.2.10" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== grapheme-splitter@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-unicode@^2.0.0, has-unicode@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== hashids@^2.2.10: - version "2.3.0" - resolved "https://registry.yarnpkg.com/hashids/-/hashids-2.3.0.tgz#af92c9cdb093c0ed3542cf0dcbd6c289125df387" - integrity sha512-ljM73TE/avEhNnazxaj0Dw3BbEUuLC5yYCQ9RSkSUcT4ZSU6ZebdKCIBJ+xT/DnSYW36E9k82GH1Q6MydSIosQ== + version "2.2.10" + resolved "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz" + integrity sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA== hjson@3.2.2: version "3.2.2" - resolved "https://registry.yarnpkg.com/hjson/-/hjson-3.2.2.tgz#a5a81138f4c0bb427e4b2ac917fafd4b454436cf" + resolved "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" integrity sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q== html-entities@^2.3.3: - version "2.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" - integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== + version "2.3.3" + resolved "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz" + integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== http-cache-semantics@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + version "4.1.0" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== http-proxy-agent@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: "@tootallnate/once" "1" @@ -1239,7 +1253,7 @@ http-proxy-agent@^4.0.1: http-signature@^1.3.6: version "1.3.6" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" + resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz" integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== dependencies: assert-plus "^1.0.0" @@ -1248,7 +1262,7 @@ http-signature@^1.3.6: https-proxy-agent@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" @@ -1256,53 +1270,53 @@ https-proxy-agent@^5.0.0: human-signals@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== -human-signals@^4.3.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" - integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== +human-signals@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz" + integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== humanize-ms@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== dependencies: ms "^2.0.0" husky@^8.0.0: version "8.0.3" - resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" + resolved "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz" integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== iconv-lite@0.6.3, iconv-lite@^0.6.2: version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" iconv-lite@^0.4.24: version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" ieee754@^1.1.13: version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.2.0: version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -1310,35 +1324,35 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== infer-owner@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" dependencies: once "^1.3.0" wrappy "1" inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ini-config-parser@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/ini-config-parser/-/ini-config-parser-1.0.4.tgz#0abc75cb68c506204712d2b4861400b6adbfda78" + resolved "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz" integrity sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg== dependencies: coffee-script "^1.12.4" @@ -1347,13 +1361,13 @@ ini-config-parser@^1.0.4: ini@~1.3.0: version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== inquirer@^8.2.2: - version "8.2.6" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" - integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== + version "8.2.2" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz" + integrity sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow== dependencies: ansi-escapes "^4.2.1" chalk "^4.1.1" @@ -1369,165 +1383,159 @@ inquirer@^8.2.2: string-width "^4.1.0" strip-ansi "^6.0.0" through "^2.3.6" - wrap-ansi "^6.0.1" ip@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== is-arrayish@^0.3.1: version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" is-fullwidth-code-point@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-fullwidth-code-point@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== is-glob@^4.0.0, is-glob@^4.0.3: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-interactive@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-lambda@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-path-cwd@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - integrity sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw== + resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz" + integrity "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" is-path-in-cwd@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + resolved "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz" integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== dependencies: is-path-inside "^1.0.0" is-path-inside@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g== + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz" + integrity "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==" dependencies: path-is-inside "^1.0.1" is-path-inside@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-stream@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== isarray@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" js-sdsl@^4.1.4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" - integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== + version "4.2.0" + resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz" + integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" jsbn@~0.1.0: version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema@0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" jsonc-parser@^3.0.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + version "6.0.1" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== dependencies: - universalify "^2.0.0" + universalify "^1.0.0" optionalDependencies: graceful-fs "^4.1.6" jsprim@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz" integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== dependencies: assert-plus "1.0.0" @@ -1535,117 +1543,114 @@ jsprim@^2.0.2: json-schema "0.4.0" verror "1.10.0" -keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - levn@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" type-check "~0.4.0" -lilconfig@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== +lilconfig@2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz" + integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== lint-staged@^13.1.0: - version "13.3.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.3.0.tgz#7965d72a8d6a6c932f85e9c13ccf3596782d28a5" - integrity sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ== - dependencies: - chalk "5.3.0" - commander "11.0.0" - debug "4.3.4" - execa "7.2.0" - lilconfig "2.1.0" - listr2 "6.6.1" - micromatch "4.0.5" - pidtree "0.6.0" - string-argv "0.3.2" - yaml "2.3.1" - -listr2@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-6.6.1.tgz#08b2329e7e8ba6298481464937099f4a2cd7f95d" - integrity sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg== + version "13.1.0" + resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-13.1.0.tgz" + integrity sha512-pn/sR8IrcF/T0vpWLilih8jmVouMlxqXxKuAojmbiGX5n/gDnz+abdPptlj0vYnbfE0SQNl3CY/HwtM0+yfOVQ== dependencies: cli-truncate "^3.1.0" - colorette "^2.0.20" - eventemitter3 "^5.0.1" - log-update "^5.0.1" + colorette "^2.0.19" + commander "^9.4.1" + debug "^4.3.4" + execa "^6.1.0" + lilconfig "2.0.6" + listr2 "^5.0.5" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-inspect "^1.12.2" + pidtree "^0.6.0" + string-argv "^0.3.1" + yaml "^2.1.3" + +listr2@^5.0.5: + version "5.0.6" + resolved "https://registry.npmjs.org/listr2/-/listr2-5.0.6.tgz" + integrity sha512-u60KxKBy1BR2uLJNTWNptzWQ1ob/gjMzIJPZffAENzpZqbMZ/5PrXXOomDcevIS/+IB7s1mmCEtSlT2qHWMqag== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.19" + log-update "^4.0.0" + p-map "^4.0.0" rfdc "^1.3.0" - wrap-ansi "^8.1.0" + rxjs "^7.5.7" + through "^2.3.8" + wrap-ansi "^7.0.0" locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash-es@^4.17.21: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" is-unicode-supported "^0.1.0" -log-update@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09" - integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw== +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== dependencies: - ansi-escapes "^5.0.0" - cli-cursor "^4.0.0" - slice-ansi "^5.0.0" - strip-ansi "^7.0.1" - wrap-ansi "^8.0.1" + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" lru-cache@7.13.2: version "7.13.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.13.2.tgz#bb5d3f1deea3f3a7a35c1c44345566a612e09cd0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz" integrity sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA== lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" make-dir@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" make-fetch-happen@^9.1.0: version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== dependencies: agentkeepalive "^4.1.3" @@ -1665,21 +1670,21 @@ make-fetch-happen@^9.1.0: socks-proxy-agent "^6.0.0" ssri "^8.0.0" -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz" + integrity "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==" dependencies: - tmpl "1.0.5" + tmpl "1.0.x" merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -micromatch@4.0.5, micromatch@^4.0.2: +micromatch@^4.0.2, micromatch@^4.0.5: version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -1687,65 +1692,65 @@ micromatch@4.0.5, micromatch@^4.0.2: mime-db@1.52.0: version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.35: version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-fn@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== mimic-response@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz" integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== mimic-response@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -"minimatch@2 || 3", minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + version "5.1.0" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== dependencies: brace-expansion "^2.0.1" minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + version "1.2.6" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== minipass-collect@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== dependencies: minipass "^3.0.0" minipass-fetch@^1.3.2: version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== dependencies: minipass "^3.1.0" @@ -1756,40 +1761,35 @@ minipass-fetch@^1.3.2: minipass-flush@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: minipass "^3.0.0" minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" minipass-sized@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== dependencies: minipass "^3.0.0" minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + version "3.3.4" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" + integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== dependencies: yallist "^4.0.0" -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - minizlib@^2.0.0, minizlib@^2.1.1: version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== dependencies: minipass "^3.0.0" @@ -1797,78 +1797,73 @@ minizlib@^2.0.0, minizlib@^2.1.1: mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== mkdirp@~0.5.1: version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" moment@2.29.4, moment@^2.19.3: version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== -ms@2.1.2: +ms@2.1.2, ms@^2.0.0: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.0.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - mute-stream@0.0.8: version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== mv@~2: version "2.1.1" - resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2" - integrity sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg== + resolved "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz" + integrity "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==" dependencies: mkdirp "~0.5.1" ncp "~2.0.0" rimraf "~2.4.0" -nan@^2.14.0, nan@^2.17.0: +nan@^2.10.0, nan@^2.17.0: version "2.18.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554" + resolved "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz" integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== napi-build-utils@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" ncp@~2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" - integrity sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA== + resolved "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz" + integrity "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==" negotiator@^0.6.2: version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== nntp-server@3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/nntp-server/-/nntp-server-3.1.0.tgz#c48e71899385f5ba394888524f8a1bae024a9c75" + resolved "https://registry.npmjs.org/nntp-server/-/nntp-server-3.1.0.tgz" integrity sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw== dependencies: debug "^4.3.3" @@ -1878,31 +1873,31 @@ nntp-server@3.1.0: node-abi@^2.7.0: version "2.30.1" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" + resolved "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz" integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w== dependencies: semver "^5.4.1" node-addon-api@^3.0.0: version "3.2.1" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== node-addon-api@^4.2.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz" integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== node-fetch@^2.6.7: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + version "2.6.7" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" node-gyp@8.x: version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== dependencies: env-paths "^2.2.0" @@ -1918,55 +1913,55 @@ node-gyp@8.x: node-int64@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + integrity "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" node-pty@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/node-pty/-/node-pty-1.0.0.tgz#7daafc0aca1c4ca3de15c61330373af4af5861fd" + resolved "https://registry.npmjs.org/node-pty/-/node-pty-1.0.0.tgz" integrity sha512-wtBMWWS7dFZm/VgqElrTvtfMq4GzJ6+edFI0Y0zyzygUSZMgZdraDUMUhCIvkjhJjme15qWmbyJbtAx4ot4uZA== dependencies: nan "^2.17.0" nodemailer@6.7.7: version "6.7.7" - resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.7.7.tgz#e522fbd7507b81c51446d3f79c4603bf00083ddd" + resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz" integrity sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA== noop-logger@^0.1.1: version "0.1.1" - resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" + resolved "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz" integrity sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ== nopt@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== dependencies: abbrev "1" normalize-path@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== npm-run-path@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" npm-run-path@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz" integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== dependencies: path-key "^4.0.0" npmlog@^4.0.1, npmlog@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== dependencies: are-we-there-yet "~1.1.2" @@ -1976,7 +1971,7 @@ npmlog@^4.0.1, npmlog@^4.1.2: npmlog@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== dependencies: are-we-there-yet "^2.0.0" @@ -1986,7 +1981,7 @@ npmlog@^5.0.1: npmlog@^6.0.0: version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== dependencies: are-we-there-yet "^3.0.0" @@ -1996,50 +1991,55 @@ npmlog@^6.0.0: number-is-nan@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + +object-inspect@^1.12.2: + version "1.12.3" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" dependencies: wrappy "1" onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + version "5.1.0" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== dependencies: mimic-fn "^2.1.0" onetime@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== dependencies: mimic-fn "^4.0.0" optionator@^0.9.1: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + version "0.9.1" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" + word-wrap "^1.2.3" ora@^5.4.1: version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== dependencies: bl "^4.1.0" @@ -2054,109 +2054,109 @@ ora@^5.4.1: os-tmpdir@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + integrity "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" otplib@11.0.1: version "11.0.1" - resolved "https://registry.yarnpkg.com/otplib/-/otplib-11.0.1.tgz#7d64aa87029f07c99c7f96819fb10cdb67dea886" + resolved "https://registry.npmjs.org/otplib/-/otplib-11.0.1.tgz" integrity sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ== dependencies: thirty-two "1.0.2" p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" p-map@^1.1.1: version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + resolved "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz" integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== p-map@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" path-is-inside@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== + resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" + integrity "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-key@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== picomatch@^2.0.4, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pidtree@0.6.0: +pidtree@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz" integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== pify@^2.0.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity "sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" pify@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + integrity "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" pinkie-promise@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== + resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + integrity "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==" dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== + resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + integrity "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" prebuild-install@^5.3.4: version "5.3.6" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.6.tgz#7c225568d864c71d89d07f8796042733a3f54291" + resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz" integrity sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg== dependencies: detect-libc "^1.0.3" @@ -2177,27 +2177,27 @@ prebuild-install@^5.3.4: prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prettier@2.8.1: version "2.8.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz" integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== promise-inflight@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== promise-retry@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== dependencies: err-code "^2.0.2" @@ -2205,30 +2205,30 @@ promise-retry@^2.0.1: pump@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" once "^1.3.1" punycode@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + version "2.2.0" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz" + integrity sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw== qrcode-generator@^1.4.4: version "1.4.4" - resolved "https://registry.yarnpkg.com/qrcode-generator/-/qrcode-generator-1.4.4.tgz#63f771224854759329a99048806a53ed278740e7" + resolved "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz" integrity sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw== queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== rc@^1.2.7: version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" @@ -2238,7 +2238,7 @@ rc@^1.2.7: readable-stream@^2.0.6: version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" @@ -2250,9 +2250,9 @@ readable-stream@^2.0.6: util-deprecate "~1.0.1" readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -2260,118 +2260,105 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: regexpp@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== restore-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" signal-exit "^3.0.2" -restore-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" - integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - retry@^0.12.0: version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== reusify@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rfdc@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== rimraf@^2.2.8, rimraf@^2.6.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + version "2.6.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" + integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== dependencies: - glob "^7.1.3" + glob "^7.0.5" rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" rimraf@~2.4.0: version "2.4.5" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da" - integrity sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ== + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz" + integrity "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==" dependencies: glob "^6.0.1" rlogin@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/rlogin/-/rlogin-1.0.0.tgz#db07322b31219126625d9d0aa9872d7ebe8ac403" - integrity sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg== + resolved "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz" + integrity "sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==" rsvp@^4.8.4: version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + resolved "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== run-async@^2.4.0: version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" -rxjs@^7.5.5: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== +rxjs@^7.5.5, rxjs@^7.5.7: + version "7.8.0" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz" + integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== dependencies: tslib "^2.1.0" -safe-buffer@^5.0.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-json-stringify@~1: version "1.2.0" - resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz#356e44bc98f1f93ce45df14bcd7c01cda86e0afd" + resolved "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz" integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sane@5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/sane/-/sane-5.0.1.tgz#ae94cb06acf5ad158242ff23f563d8cbe0ec1e4b" + resolved "https://registry.npmjs.org/sane/-/sane-5.0.1.tgz" integrity sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q== dependencies: "@cnakazawa/watch" "^1.0.3" @@ -2386,48 +2373,48 @@ sane@5.0.1: sanitize-filename@^1.6.3: version "1.6.3" - resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" + resolved "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz" integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== dependencies: truncate-utf8-bytes "^1.0.0" seedrandom@^3.0.5: version "3.0.5" - resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7" + resolved "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz" integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg== semver@^5.4.1: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@^6.0.0: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@^7.3.2, semver@^7.3.5: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + version "7.3.7" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== dependencies: lru-cache "^6.0.0" serialize-error@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-8.1.0.tgz#3a069970c712f78634942ddd50fbbc0eaebe2f67" + resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz" integrity sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ== dependencies: type-fest "^0.20.2" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== sharp@^0.25.2: version "0.25.4" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.25.4.tgz#1a8e542144a07ab7e9316ab89de80182b827c363" + resolved "https://registry.npmjs.org/sharp/-/sharp-0.25.4.tgz" integrity sha512-umSzJJ1oBwIOfwFFt/fJ7JgCva9FvrEU2cbbm7u/3hSDZhXvkME8WE5qpaJqLIe2Har5msF5UG4CzYlEg5o3BQ== dependencies: color "^3.1.2" @@ -2442,29 +2429,29 @@ sharp@^0.25.2: shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7: version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== simple-concat@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== simple-get@^3.0.3: version "3.1.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.1.tgz#cc7ba77cfbe761036fbfce3d021af25fc5584d55" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz" integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA== dependencies: decompress-response "^4.2.0" @@ -2473,7 +2460,7 @@ simple-get@^3.0.3: simple-get@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz" integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== dependencies: decompress-response "^6.0.0" @@ -2482,14 +2469,32 @@ simple-get@^4.0.0: simple-swizzle@^0.2.2: version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== dependencies: is-arrayish "^0.3.1" +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + slice-ansi@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== dependencies: ansi-styles "^6.0.0" @@ -2497,12 +2502,12 @@ slice-ansi@^5.0.0: smart-buffer@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== socks-proxy-agent@^6.0.0: version "6.2.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz" integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== dependencies: agent-base "^6.0.2" @@ -2510,28 +2515,28 @@ socks-proxy-agent@^6.0.0: socks "^2.6.2" socks@^2.6.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + version "2.7.0" + resolved "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz" + integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== dependencies: ip "^2.0.0" smart-buffer "^4.2.0" split2@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + version "4.1.0" + resolved "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz" + integrity sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ== sqlite3-trans@1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz#903bd46a8cba935ce327774df62695cd1e093664" + resolved "https://registry.npmjs.org/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz" integrity sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg== dependencies: lodash "^4.17.15" sqlite3@5.1.6: version "5.1.6" - resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.6.tgz#1d4fbc90fe4fbd51e952e0a90fd8f6c2b9098e97" + resolved "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.6.tgz" integrity sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw== dependencies: "@mapbox/node-pre-gyp" "^1.0.0" @@ -2542,7 +2547,7 @@ sqlite3@5.1.6: ssh2@1.14.0: version "1.14.0" - resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.14.0.tgz#8f68440e1b768b66942c9e4e4620b2725b3555bb" + resolved "https://registry.npmjs.org/ssh2/-/ssh2-1.14.0.tgz" integrity sha512-AqzD1UCqit8tbOKoj6ztDDi1ffJZ2rV2SwlgrVVrHPkV5vWqGJOVp5pmtj18PunkPJAuKQsnInyKV+/Nb2bUnA== dependencies: asn1 "^0.2.6" @@ -2553,7 +2558,7 @@ ssh2@1.14.0: sshpk@^1.14.1: version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== dependencies: asn1 "~0.2.3" @@ -2568,42 +2573,42 @@ sshpk@^1.14.1: ssri@^8.0.0, ssri@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + resolved "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== dependencies: minipass "^3.1.1" -string-argv@0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" - integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== +string-argv@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" + integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== string-strip-html@8.4.0: version "8.4.0" - resolved "https://registry.yarnpkg.com/string-strip-html/-/string-strip-html-8.4.0.tgz#3baf7fc56ef566393077a6941e8ba13c91b43d0b" + resolved "https://registry.npmjs.org/string-strip-html/-/string-strip-html-8.4.0.tgz" integrity sha512-ajjEpk0V1G0+/RrX08I2pSj/kfsYU5wkUKWEKPQJXVQpdahZNSljiuWVqf8UgrB2E9DvFcougbl1gPwHzkuEDg== string-width@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.3: +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^5.0.0, string-width@^5.0.1: +string-width@^5.0.0: version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" @@ -2611,75 +2616,75 @@ string-width@^5.0.0, string-width@^5.0.1: strip-ansi "^7.0.1" string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + version "1.2.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz" + integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== dependencies: - safe-buffer "~5.2.0" + safe-buffer "~5.1.0" string_decoder@~1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: ansi-regex "^2.0.0" strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + version "7.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== dependencies: ansi-regex "^6.0.1" strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-final-newline@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strip-json-comments@~2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + version "7.1.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== dependencies: has-flag "^4.0.0" systeminformation@5.21.7: version "5.21.7" - resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-5.21.7.tgz#53ef75daaf5d756d015f4bb02e059126ccac74f2" + resolved "https://registry.npmjs.org/systeminformation/-/systeminformation-5.21.7.tgz" integrity sha512-K3LjnajrazTLTD61+87DFg8IXFk5ljx6nSBqB8pQLtC1UPivAjDtTYGPZ8jaBFxcesPaCOkvLRtBq+RFscrsLw== tar-fs@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz" integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== dependencies: chownr "^1.1.1" @@ -2689,7 +2694,7 @@ tar-fs@^2.0.0: tar-stream@^2.1.4: version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== dependencies: bl "^4.0.3" @@ -2699,20 +2704,20 @@ tar-stream@^2.1.4: readable-stream "^3.1.1" tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" - integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== + version "6.1.11" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" - minipass "^5.0.0" + minipass "^3.0.0" minizlib "^2.1.1" mkdirp "^1.0.3" yallist "^4.0.0" telnet-socket@0.2.4: version "0.2.4" - resolved "https://registry.yarnpkg.com/telnet-socket/-/telnet-socket-0.2.4.tgz#b0704f25aad6ce40cb9ddc5363459088f6e5b533" + resolved "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz" integrity sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ== dependencies: binary-parser "1.6.2" @@ -2720,145 +2725,145 @@ telnet-socket@0.2.4: temptmp@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/temptmp/-/temptmp-1.1.0.tgz#bfbbff858d7f7d59c563fbf069758a7775ecd431" + resolved "https://registry.npmjs.org/temptmp/-/temptmp-1.1.0.tgz" integrity sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ== dependencies: del "^3.0.0" text-table@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" thirty-two@1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/thirty-two/-/thirty-two-1.0.2.tgz#4ca2fffc02a51290d2744b9e3f557693ca6b627a" - integrity sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA== + resolved "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz" + integrity "sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==" -through@^2.3.6: +through@^2.3.6, through@^2.3.8: version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + integrity "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" tmp@^0.0.33: version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" -tmpl@1.0.5: +tmpl@1.0.x: version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" tr46@~0.0.3: version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== truncate-utf8-bytes@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" - integrity sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ== + resolved "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz" + integrity "sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==" dependencies: utf8-byte-length "^1.0.1" tslib@^2.1.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + version "2.3.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + integrity "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-fest@^1.0.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - unique-filename@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== dependencies: unique-slug "^2.0.0" unique-slug@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== dependencies: imurmurhash "^0.1.4" +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + universalify@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" utf8-byte-length@^1.0.1: version "1.0.4" - resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" - integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA== + resolved "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz" + integrity "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" uuid-parse@1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/uuid-parse/-/uuid-parse-1.1.0.tgz#7061c5a1384ae0e1f943c538094597e1b5f3a65b" + resolved "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz" integrity sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A== uuid@8.3.2: version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== verror@1.10.0: version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== dependencies: assert-plus "^1.0.0" @@ -2867,7 +2872,7 @@ verror@1.10.0: vscode-json-languageservice@^4.1.6: version "4.2.1" - resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz#94b6f471ece193bf4a1ef37f6ab5cce86d50a8b4" + resolved "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz" integrity sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA== dependencies: jsonc-parser "^3.0.0" @@ -2877,47 +2882,47 @@ vscode-json-languageservice@^4.1.6: vscode-uri "^3.0.3" vscode-languageserver-textdocument@^1.0.3: - version "1.0.11" - resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz#0822a000e7d4dc083312580d7575fe9e3ba2e2bf" - integrity sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA== + version "1.0.8" + resolved "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz" + integrity sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q== vscode-languageserver-types@^3.16.0: - version "3.17.5" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz#3273676f0cf2eab40b3f44d085acbb7f08a39d8a" - integrity sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg== + version "3.17.2" + resolved "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz" + integrity sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA== vscode-nls@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.2.0.tgz#3cb6893dd9bd695244d8a024bdf746eea665cc3f" + resolved "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz" integrity sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng== vscode-uri@^3.0.3: - version "3.0.8" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.8.tgz#1770938d3e72588659a172d0fd4642780083ff9f" - integrity sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw== + version "3.0.7" + resolved "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz" + integrity sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA== walker@~1.0.5: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + version "1.0.7" + resolved "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz" + integrity "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==" dependencies: - makeerror "1.0.12" + makeerror "1.0.x" wcwidth@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + integrity "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==" dependencies: defaults "^1.0.3" webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" @@ -2925,74 +2930,79 @@ whatwg-url@^5.0.0: which-pm-runs@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.1.0.tgz#35ccf7b1a0fce87bd8b92a478c9d045785d3bf35" + resolved "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz" integrity sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA== which@^2.0.1, which@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" wide-align@^1.1.0, wide-align@^1.1.2, wide-align@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: string-width "^1.0.2 || 2 || 3 || 4" -wrap-ansi@^6.0.1: +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrap-ansi@^6.2.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" ws@7.5.9: version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" - integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== +yaml@^2.1.3: + version "2.2.1" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz" + integrity sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw== yarn@^1.22.19: version "1.22.19" - resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.19.tgz#4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447" + resolved "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz" integrity sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ== yazl@^2.5.1: version "2.5.1" - resolved "https://registry.yarnpkg.com/yazl/-/yazl-2.5.1.tgz#a3d65d3dd659a5b0937850e8609f22fffa2b5c35" + resolved "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz" integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw== dependencies: buffer-crc32 "~0.2.3" yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 51ee6647f13a315efc180ce086b8a4d85824cf8f Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 30 Dec 2023 17:47:18 -0700 Subject: [PATCH 222/233] Properly display Actor info --- core/activitypub/social_manager.js | 18 ++++++++++++++++-- core/word_wrap.js | 11 ++++++++--- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/core/activitypub/social_manager.js b/core/activitypub/social_manager.js index d842a1df1..3d538c136 100644 --- a/core/activitypub/social_manager.js +++ b/core/activitypub/social_manager.js @@ -15,6 +15,7 @@ const { } = require('./follow_util'); const { Collections } = require('./const'); const EnigAssert = require('../enigma_assert'); +const { wordWrapText } = require('../word_wrap'); // deps const async = require('async'); @@ -251,14 +252,27 @@ exports.getModule = class activityPubSocialManager extends MenuModule { const selectedActorInfoFormat = this.config.selectedActorInfoFormat || '{text}'; - const s = stringFormat(selectedActorInfoFormat, actorInfo); + let s = stringFormat(selectedActorInfoFormat, actorInfo); if (view instanceof MultiLineEditTextView) { + // word wrap individual lines to prevent losing the original LFs + let lines = s.split('\n'); + let wrapped = ''; + for (let line of lines) { + wrapped += + ( + wordWrapText(line, { + width: view.dimens.width, + pipeCodeSupport: true, + }).wrapped || [] + ).join('\n') + '\n'; + } + const opts = { prepped: false, forceLineTerm: true, }; - view.setAnsi(pipeToAnsi(s, this.client), opts); + view.setAnsi(pipeToAnsi(wrapped, this.client), opts); } else { view.setText(s); } diff --git a/core/word_wrap.js b/core/word_wrap.js index f88ef2f46..9b4997fe6 100644 --- a/core/word_wrap.js +++ b/core/word_wrap.js @@ -1,7 +1,7 @@ /* jslint node: true */ 'use strict'; -const { ansiRenderStringLength } = require('./string_util'); +const { renderStringLength, ansiRenderStringLength } = require('./string_util'); // deps const assert = require('assert'); @@ -52,11 +52,16 @@ function wordWrapText(text, options) { // sequence if present! // // :TODO: Need to create ansi.getMatchRegex or something - this is used all over + const pipeGobble = options.pipeCodeSupport + ? `|.{0,${options.width}}\\|[A-Z\\d]{2}` + : ''; const REGEXP_GOBBLE = new RegExp( - `.{0,${options.width}}\\x1b\\[[\\?=;0-9]*[ABCDEFGHJKLMSTfhlmnprsu]|.{0,${options.width}}`, + `.{0,${options.width}}\\x1b\\[[\\?=;0-9]*[ABCDEFGHJKLMSTfhlmnprsu]${pipeGobble}|.{0,${options.width}}`, 'g' ); + const lenFunc = options.pipeCodeSupport ? renderStringLength : ansiRenderStringLength; + let m; let word; let c; @@ -72,7 +77,7 @@ function wordWrapText(text, options) { function appendWord() { word.match(REGEXP_GOBBLE).forEach(w => { - renderLen = ansiRenderStringLength(w); + renderLen = lenFunc(w); if (result.renderLen[i] + renderLen > options.width) { if (0 === i) { From 1a2030c6f35a9b42ba9677645df0ffb5c22b03c4 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 30 Dec 2023 20:05:14 -0700 Subject: [PATCH 223/233] Update defaults a bit for AP --- core/config_default.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/config_default.js b/core/config_default.js index ede061a60..266cd9f46 100644 --- a/core/config_default.js +++ b/core/config_default.js @@ -923,8 +923,8 @@ module.exports = () => { alwaysExportExternal: true, subjectOptional: true, addressFlavor: 'activitypub', - maxAgeDays: 365 * 2, - maxMessages: 100000, + maxAgeDays: 365, + maxMessages: 10000, }, }, }, From c93941275ef6cb007bd72d5cfb61a0c058a23897 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 30 Dec 2023 20:05:52 -0700 Subject: [PATCH 224/233] Don't bail if we can't fetch just one --- core/scanner_tossers/activitypub.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/core/scanner_tossers/activitypub.js b/core/scanner_tossers/activitypub.js index 8664f17b4..280851953 100644 --- a/core/scanner_tossers/activitypub.js +++ b/core/scanner_tossers/activitypub.js @@ -309,7 +309,14 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule 4, (actorId, nextActorId) => { Actor.fromId(actorId, (err, actor) => { - return nextActorId(err, actor); + if (err) { + this.log.warn( + { error: err.message, actorId }, + 'Failed to fetch actor from ID; skipping' + ); + return nextActorId(null, null); + } + return nextActorId(null, actor); }); }, (err, followerActors) => { @@ -317,6 +324,8 @@ exports.getModule = class ActivityPubScannerTosser extends MessageScanTossModule return cb(err); } + followerActors = followerActors.filter(v => v); // drop any missing actors + const sharedInboxEndpoints = Array.from( new Set( followerActors From e0cbcc1ec3eb09017e5e999e3dba34ff326bca1e Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 30 Dec 2023 20:33:37 -0700 Subject: [PATCH 225/233] Force AP in AP area --- core/fse.js | 5 ++++- core/mail_util.js | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/core/fse.js b/core/fse.js index 35f361efb..5e32abcbf 100644 --- a/core/fse.js +++ b/core/fse.js @@ -30,6 +30,7 @@ const FileArea = require('./file_base_area.js'); const FileEntry = require('./file_entry.js'); const DownloadQueue = require('./download_queue.js'); const EngiAssert = require('./enigma_assert.js'); +const MessageConst = require('./message_const'); // deps const async = require('async'); @@ -458,7 +459,9 @@ exports.FullScreenEditorModule = // Append auto-signature, if enabled for the area & the user has one // const msgInfo = messageInfoFromAddressedToInfo( - getAddressedToInfo(headerValues.to) + Message.WellKnownAreaTags.Private === area.addressFlavor + ? { flavor: MessageConst.AddressFlavor.ActivityPub } + : getAddressedToInfo(headerValues.to) ); if (false !== msgInfo.autoSignatures) { if (false !== area.autoSignatures) { diff --git a/core/mail_util.js b/core/mail_util.js index 1e9525559..23cac6081 100644 --- a/core/mail_util.js +++ b/core/mail_util.js @@ -181,7 +181,7 @@ function messageInfoFromAddressedToInfo(addressInfo) { const maxMessageLength = get(config, 'activityPub.maxMessageLength', 500); const autoSignatures = get(config, 'activityPub.autoSignatures', false); - // Additionally, it's ot necessary to supply a subject + // Additionally, it's not necessary to supply a subject // (aka summary) with a 'Note' Activity return { subjectOptional: true, maxMessageLength, autoSignatures }; } From 81e1b47c026685a7ff2334e7ca2b6c2f5e59ebb0 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 30 Dec 2023 20:42:13 -0700 Subject: [PATCH 226/233] Durp, really do it this time --- core/fse.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/fse.js b/core/fse.js index 5e32abcbf..05f357e98 100644 --- a/core/fse.js +++ b/core/fse.js @@ -459,7 +459,7 @@ exports.FullScreenEditorModule = // Append auto-signature, if enabled for the area & the user has one // const msgInfo = messageInfoFromAddressedToInfo( - Message.WellKnownAreaTags.Private === area.addressFlavor + MessageConst.AddressFlavor.ActivityPub === area.addressFlavor ? { flavor: MessageConst.AddressFlavor.ActivityPub } : getAddressedToInfo(headerValues.to) ); From db5298b453632d7c96d6f830e90a3c24a2a1bfa5 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 30 Dec 2023 23:00:58 -0700 Subject: [PATCH 227/233] Fill missing subjects when loading message lists Add filter option to generate a subject field if it's currently empty; subjects are generated using the first few characters of the message --- core/message.js | 16 ++++++++++++++-- core/msg_list.js | 13 +++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/core/message.js b/core/message.js index 8a2e5078b..c05256ab7 100644 --- a/core/message.js +++ b/core/message.js @@ -295,6 +295,9 @@ module.exports = class Message { - areaTags filter ignored - if NOT present, private areas are skipped + filter.resultType == messageList only: + - genMissingSubjects: generate missing subject lines by inspecting the message contents + *=NYI */ static findMessages(filter, cb) { @@ -329,11 +332,20 @@ module.exports = class Message { sql = `SELECT COUNT() AS count FROM message m`; } else { - sql = `SELECT DISTINCT m.${field}${ + let additionalFields = filter.extraFields.length > 0 ? ', ' + filter.extraFields.map(f => `m.${f}`).join(', ') - : '' + : ''; + + if (true === filter.genMissingSubjects) { + additionalFields += `, CASE WHEN LENGTH(m.subject) > 0 THEN + m.subject + ELSE + REPLACE(REPLACE(SUBSTR(m.message,1,32),CHAR(10),""),CHAR(13),"") || "..." + END gen_subject`; } + + sql = `SELECT DISTINCT m.${field}${additionalFields} FROM message m`; } diff --git a/core/msg_list.js b/core/msg_list.js index 4dc4931f6..ddce451f8 100644 --- a/core/msg_list.js +++ b/core/msg_list.js @@ -284,9 +284,18 @@ exports.getModule = class MessageListModule extends ( ); } + const filter = { + areaTag: self.config.messageAreaTag, + resultType: 'messageList', + sort: 'messageId', + order: 'ascending', + genMissingSubjects: self.config.genMissingSubjects, + }; + messageArea.getMessageListForArea( self.client, self.config.messageAreaTag, + filter, function msgs(err, msgList) { if (!msgList || 0 === msgList.length) { return callback(new Error('No messages in area')); @@ -345,6 +354,10 @@ exports.getModule = class MessageListModule extends ( self.initialFocusIndex = index; } + if (!listItem.subject && self.config.genMissingSubjects) { + listItem.subject = listItem.genSubject || ''; + } + listItem.text = `${listItem.msgNum} - ${listItem.subject} from ${listItem.fromUserName}`; // default text }); return callback(null); From c6c457a6ef8460ea45a1ed25045db0a940fb8bbc Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 31 Dec 2023 11:19:56 -0700 Subject: [PATCH 228/233] Fix default menu flow & fallback --- misc/menu_templates/activitypub.in.hjson | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/menu_templates/activitypub.in.hjson b/misc/menu_templates/activitypub.in.hjson index e3107b8ea..95fdf7e38 100644 --- a/misc/menu_templates/activitypub.in.hjson +++ b/misc/menu_templates/activitypub.in.hjson @@ -39,7 +39,7 @@ } { value: {command: "Q"} - action: @menu:mainMenu + action: @systemMethod:prevMenu } { value: { command: "E" } From 122b5e9666c0935d208dcd2c0bde2ea51450745e Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 1 Jan 2024 12:10:21 -0700 Subject: [PATCH 229/233] Provide contentMap::en such that messages don't all show up on Mastodon with a 'translate' option --- core/activitypub/note.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/core/activitypub/note.js b/core/activitypub/note.js index cb751528e..c77fcccd5 100644 --- a/core/activitypub/note.js +++ b/core/activitypub/note.js @@ -126,6 +126,8 @@ module.exports = class Note extends ActivityPubObject { ? 'text/x-ansi' // ye ol' https://lists.freedesktop.org/archives/xdg/2006-March/006214.html : 'text/plain'; + const htmlMessage = messageToHtml(message); + // https://docs.joinmastodon.org/spec/activitypub/#properties-used const obj = { id: ActivityPubObject.makeObjectId('note'), @@ -134,7 +136,11 @@ module.exports = class Note extends ActivityPubObject { to, attributedTo: fromActor.id, summary: message.subject.trim(), - content: messageToHtml(message), + content: htmlMessage, + contentMap: { + en: htmlMessage, // English only, for now + }, + // original message source source: { content: message.message, mediaType: sourceMediaType, From 5dd3bc52435bc5a24756739da9c960d60eed3787 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 14 Jan 2024 15:52:24 -0700 Subject: [PATCH 230/233] Add missing function --- core/events.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/events.js b/core/events.js index 717b5c183..3b6ed8448 100644 --- a/core/events.js +++ b/core/events.js @@ -23,6 +23,10 @@ module.exports = new (class Events extends events.EventEmitter { return super.addListener(event, listener); } + listenerCount(event, listener) { + return super.listenerCount(event, listener); + } + emit(event, ...args) { Log.trace({ event: event }, 'Emitting event'); return super.emit(event, ...args); From 0b1dee714bcb8206cb2f743358134465e7caea3b Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 15 Jan 2024 11:39:29 -0700 Subject: [PATCH 231/233] Fix door crash --- core/door.js | 49 +++++++++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/core/door.js b/core/door.js index 0aae5da10..41ee1d1c2 100644 --- a/core/door.js +++ b/core/door.js @@ -161,16 +161,42 @@ module.exports = class Door { 'External door process spawned' ); + const exitHandler = () => { + if (this.sockServer) { + this.sockServer.close(); + } + + // we may not get a close + if ('stdio' === this.io) { + this.restoreIo(this.doorPty); + } + + if (this.doorPty) { + this.doorPty.removeAllListeners(); + delete this.doorPty; + } + + return callback(null); + }; + + this.doorPty.on('error', err => { + this.client.log.warn( + { error: err.message }, + 'Door exited with error' + ); + }); + if ('stdio' === this.io) { this.client.log.debug('Using stdio for door I/O'); this.client.term.output.pipe(this.doorPty); - this.doorPty.onData(this.doorDataHandler.bind(this)); + // dumb hack around node-pty; under nix, if we bail at the + // right time, listenerCount will be referenced, but does + // not exist! + this.doorPty.listenerCount = () => 1; - this.doorPty.onExit((/*exitEvent*/) => { - return this.restoreIo(this.doorPty); - }); + this.doorPty.onData(this.doorDataHandler.bind(this)); } else if ('socket' === this.io) { this.client.log.debug( { @@ -184,20 +210,7 @@ module.exports = class Door { this.doorPty.onExit(exitEvent => { const { exitCode, signal } = exitEvent; this.client.log.info({ exitCode, signal }, 'Door exited'); - - if (this.sockServer) { - this.sockServer.close(); - } - - // we may not get a close - if ('stdio' === this.io) { - this.restoreIo(this.doorPty); - } - - this.doorPty.removeAllListeners(); - delete this.doorPty; - - return callback(null); + exitHandler(); }); }, ], From 06800ae136d68624b0dc0f2789f4d67d9ff05c73 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Mon, 4 Nov 2024 21:58:29 -0700 Subject: [PATCH 232/233] Fix up Yarn.lock --- yarn.lock | 4 ---- 1 file changed, 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6a14a4d4a..1b0550c3e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -205,10 +205,6 @@ ansi-styles@^6.0.0: resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== -"any-ascii@https://github.com/zane-dmax/anyascii.git#cjs": - version "0.0.0" - resolved "https://github.com/zane-dmax/anyascii.git#664b44b87f3718cfa454aa391eded418e5f16d22" - anymatch@^3.1.1: version "3.1.2" resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" From 1b6ce1a7e84f13d9e7152a35847da1ad1dc164df Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Wed, 27 Nov 2024 09:50:24 -0700 Subject: [PATCH 233/233] Bump versions, update eslint --- .eslintignore | 2 - .eslintrc.json | 25 - eslint.config.mjs | 39 + package-lock.json | 6982 +++++++++++++-------------------------------- package.json | 5 +- yarn.lock | 1659 +++-------- 6 files changed, 2551 insertions(+), 6161 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.json create mode 100644 eslint.config.mjs diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index b1342397b..000000000 --- a/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -# ACS parser is generated -core/acs_parser.js diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 005148ec7..000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "env": { - "es6": true, - "node": true - }, - "extends": ["eslint:recommended", "plugin:json/recommended"], - "rules": { - "indent": [ - "error", - 4, - { - "SwitchCase": 1 - } - ], - "linebreak-style": ["error", "unix"], - "quotes": ["error", "single"], - "semi": ["error", "always"], - "comma-dangle": 0, - "no-trailing-spaces": "error", - "no-control-regex": 0 - }, - "parserOptions": { - "ecmaVersion": 2020 - } -} diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000..32b153eb3 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,39 @@ +import globals from "globals"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import js from "@eslint/js"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all +}); + +export default [{ + ignores: ["core/acs_parser.js"], +}, ...compat.extends("eslint:recommended", "plugin:json/recommended"), { + languageOptions: { + globals: { + ...globals.node, + }, + + ecmaVersion: 2020, + sourceType: "commonjs", + }, + + rules: { + indent: ["error", 4, { + SwitchCase: 1, + }], + + "linebreak-style": ["error", "unix"], + quotes: ["error", "single"], + semi: ["error", "always"], + "comma-dangle": 0, + "no-trailing-spaces": "error", + "no-control-regex": 0, + }, +}]; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index b90e3978b..ab8305b51 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7 +1,7 @@ { "name": "enigma-bbs", "version": "0.0.14-beta", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -11,7 +11,6 @@ "dependencies": { "@breejs/later": "4.1.0", "add": "^2.0.6", - "any-ascii": "zane-dmax/anyascii/#cjs", "async": "3.2.4", "avatar-generator": "^2.0.4", "binary-parser": "2.1.0", @@ -46,15 +45,14 @@ "sanitize-filename": "^1.6.3", "sqlite3": "5.1.6", "sqlite3-trans": "1.3.0", - "ssh2": "1.14.0", + "ssh2": "1.16.0", "string-strip-html": "8.4.0", "systeminformation": "5.21.7", "telnet-socket": "0.2.4", "temptmp": "^1.1.0", "uuid": "8.3.2", "uuid-parse": "1.1.0", - "ws": "7.5.9", - "yarn": "^1.22.19", + "ws": "8.18.0", "yazl": "^2.5.1" }, "bin": { @@ -62,9 +60,12 @@ "oputil": "oputil.js" }, "devDependencies": { + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "^9.15.0", "eslint": "8.31.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-json": "^3.1.0", + "globals": "^15.12.0", "husky": "^8.0.0", "lint-staged": "^13.1.0", "prettier": "2.8.1" @@ -77,14 +78,16 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/@breejs/later/-/later-4.1.0.tgz", "integrity": "sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA==", + "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/@cnakazawa/watch": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", - "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "license": "Apache-2.0", "dependencies": { "exec-sh": "^0.3.2", "minimist": "^1.2.0" @@ -97,15 +100,16 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", - "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -113,26 +117,83 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.15.0.tgz", + "integrity": "sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "license": "MIT", "optional": true }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -144,6 +205,7 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -153,15 +215,18 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", - "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "license": "BSD-3-Clause", "dependencies": { "detect-libc": "^2.0.0", "https-proxy-agent": "^5.0.0", @@ -177,11 +242,69 @@ "node-pre-gyp": "bin/node-pre-gyp" } }, + "node_modules/@mapbox/node-pre-gyp/node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -195,6 +318,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -204,6 +328,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -216,6 +341,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "license": "ISC", "optional": true, "dependencies": { "@gar/promisify": "^1.0.1", @@ -227,6 +353,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", "deprecated": "This functionality has been moved to @npmcli/fs", + "license": "MIT", "optional": true, "dependencies": { "mkdirp": "^1.0.4", @@ -240,6 +367,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", "optional": true, "bin": { "mkdirp": "bin/cmd.js" @@ -252,26 +380,24 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "license": "MIT", "optional": true, "engines": { "node": ">= 6" } }, - "node_modules/@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "license": "ISC" }, "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -284,6 +410,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -291,12 +418,14 @@ "node_modules/add": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/add/-/add-2.0.6.tgz", - "integrity": "sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q==" + "integrity": "sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q==", + "license": "MIT" }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", "dependencies": { "debug": "4" }, @@ -305,13 +434,12 @@ } }, "node_modules/agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "license": "MIT", "optional": true, "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", "humanize-ms": "^1.2.1" }, "engines": { @@ -322,7 +450,8 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "devOptional": true, + "license": "MIT", + "optional": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -336,6 +465,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -351,6 +481,7 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -365,6 +496,7 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -376,16 +508,17 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" }, "engines": { @@ -395,14 +528,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/any-ascii": { - "resolved": "zane-dmax/anyascii", - "link": true - }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -412,32 +542,76 @@ } }, "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "license": "ISC" }, "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "deprecated": "This package is no longer supported.", + "license": "ISC", "dependencies": { "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" + "readable-stream": "^2.0.6" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/are-we-there-yet/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/are-we-there-yet/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" } }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "license": "MIT", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -446,6 +620,7 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "license": "MIT", "dependencies": { "safer-buffer": "~2.1.0" } @@ -454,28 +629,22 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "license": "MIT", "engines": { "node": ">=0.8" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "license": "MIT" }, "node_modules/avatar-generator": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/avatar-generator/-/avatar-generator-2.0.4.tgz", "integrity": "sha512-1XH0LAO6QwtOvv9ImVKr6O0DUtH+QX4B6ReBcfjbUPnFVZMfSgM18jkP8MDsrPxk9UmCGMddxBCxdizU7lbwrw==", + "license": "MIT", "dependencies": { "commander": "^5.1.0", "seedrandom": "^3.0.5", @@ -489,18 +658,11 @@ "npm": ">=6.0" } }, - "node_modules/avatar-generator/node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "engines": { - "node": ">= 6" - } - }, "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", @@ -519,12 +681,14 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "license": "BSD-3-Clause", "dependencies": { "tweetnacl": "^0.14.3" } @@ -533,6 +697,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz", "integrity": "sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ==", + "license": "MIT", "engines": { "node": ">=12" } @@ -541,6 +706,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -551,17 +717,19 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -571,6 +739,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } @@ -593,6 +762,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -601,7 +771,8 @@ "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", "engines": { "node": "*" } @@ -630,6 +801,7 @@ "engines": [ "node >=0.10.0" ], + "license": "MIT", "bin": { "bunyan": "bin/bunyan" }, @@ -644,6 +816,7 @@ "version": "15.3.0", "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "license": "ISC", "optional": true, "dependencies": { "@npmcli/fs": "^1.0.0", @@ -673,6 +846,8 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", "optional": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -693,6 +868,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", "optional": true, "dependencies": { "yallist": "^4.0.0" @@ -705,6 +881,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", "optional": true, "bin": { "mkdirp": "bin/cmd.js" @@ -718,6 +895,7 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -726,6 +904,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "license": "ISC", "dependencies": { "rsvp": "^4.8.4" }, @@ -737,6 +916,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -751,12 +931,14 @@ "node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "license": "MIT" }, "node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", "engines": { "node": ">=10" } @@ -765,7 +947,8 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "devOptional": true, + "license": "MIT", + "optional": true, "engines": { "node": ">=6" } @@ -774,6 +957,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -782,9 +966,10 @@ } }, "node_modules/cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", "engines": { "node": ">=6" }, @@ -797,6 +982,7 @@ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, + "license": "MIT", "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^5.0.0" @@ -809,10 +995,11 @@ } }, "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -824,13 +1011,15 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cli-truncate/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -844,10 +1033,11 @@ } }, "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -862,6 +1052,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "license": "ISC", "engines": { "node": ">= 10" } @@ -869,7 +1060,8 @@ "node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", "engines": { "node": ">=0.8" } @@ -878,6 +1070,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -887,6 +1080,7 @@ "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", "deprecated": "CoffeeScript on NPM has moved to \"coffeescript\" (no hyphen)", + "license": "MIT", "bin": { "cake": "bin/cake", "coffee": "bin/coffee" @@ -899,6 +1093,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "license": "MIT", "dependencies": { "color-convert": "^1.9.3", "color-string": "^1.6.0" @@ -908,6 +1103,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -918,12 +1114,14 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, "node_modules/color-string": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -933,6 +1131,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "license": "ISC", "bin": { "color-support": "bin.js" } @@ -941,6 +1140,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -948,56 +1148,62 @@ "node_modules/color/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" }, "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" }, "node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "license": "MIT", "engines": { - "node": "^12.20.0 || >=14" + "node": ">= 6" } }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "license": "ISC" }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "license": "MIT" }, "node_modules/cpu-features": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.9.tgz", - "integrity": "sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ==", + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", + "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", "hasInstallScript": true, "optional": true, "dependencies": { "buildcheck": "~0.0.6", - "nan": "^2.17.0" + "nan": "^2.19.0" }, "engines": { "node": ">=10.0.0" } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1011,6 +1217,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" }, @@ -1019,11 +1226,12 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1038,6 +1246,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -1052,38 +1261,46 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==", - "dev": true + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" }, "node_modules/deepdash": { "version": "5.3.9", "resolved": "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz", "integrity": "sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg==", + "license": "MIT", "dependencies": { "lodash": "^4.17.21", "lodash-es": "^4.17.21" } }, "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "license": "MIT", "dependencies": { "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/del": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==", + "integrity": "sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==", + "license": "MIT", "dependencies": { "globby": "^6.1.0", "is-path-cwd": "^1.0.0", @@ -1096,70 +1313,44 @@ "node": ">=4" } }, - "node_modules/del/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/del/node_modules/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" - } - }, - "node_modules/del/node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/del/node_modules/p-map": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/del/node_modules/rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", "dependencies": { - "glob": "^7.0.5" + "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" @@ -1168,31 +1359,28 @@ "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "license": "MIT" }, "node_modules/denque": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "license": "Apache-2.0", "engines": { "node": ">=0.10" } }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "optional": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, "engines": { - "node": ">=8" + "node": ">=0.10" } }, "node_modules/doctrine": { @@ -1200,6 +1388,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -1208,13 +1397,14 @@ } }, "node_modules/dtrace-provider": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz", - "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q==", + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", + "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", "hasInstallScript": true, + "license": "BSD-2-Clause", "optional": true, "dependencies": { - "nan": "^2.10.0" + "nan": "^2.14.0" }, "engines": { "node": ">=0.10" @@ -1224,12 +1414,14 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/easy-table": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -1241,29 +1433,39 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "license": "MIT", "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, + "node_modules/ecc-jsbn/node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "license": "MIT" + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, "node_modules/encoding": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", "optional": true, "dependencies": { "iconv-lite": "^0.6.2" } }, "node_modules/end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", "dependencies": { "once": "^1.4.0" } @@ -1272,6 +1474,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", "optional": true, "engines": { "node": ">=6" @@ -1281,6 +1484,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "license": "MIT", "optional": true }, "node_modules/escape-string-regexp": { @@ -1288,6 +1492,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -1299,7 +1504,9 @@ "version": "8.31.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz", "integrity": "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, + "license": "MIT", "dependencies": { "@eslint/eslintrc": "^1.4.1", "@humanwhocodes/config-array": "^0.11.8", @@ -1352,10 +1559,11 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", "dev": true, + "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -1368,6 +1576,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz", "integrity": "sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==", "dev": true, + "license": "MIT", "dependencies": { "lodash": "^4.17.21", "vscode-json-languageservice": "^4.1.6" @@ -1377,16 +1586,20 @@ } }, "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-utils": { @@ -1394,6 +1607,7 @@ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^2.0.0" }, @@ -1408,41 +1622,78 @@ } }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10" } }, "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/eslint/node_modules/@eslint/eslintrc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1452,10 +1703,11 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -1468,6 +1720,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -1476,10 +1729,11 @@ } }, "node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -1489,32 +1743,43 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" + }, "node_modules/exec-sh": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", + "license": "MIT" }, "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=10" + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" }, "funding": { "url": "https://github.com/sindresorhus/execa?sponsor=1" @@ -1523,20 +1788,22 @@ "node_modules/exiftool": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz", - "integrity": "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" + "integrity": "sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" }, "node_modules/expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", "engines": { "node": ">=6" } }, "node_modules/external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "license": "MIT", "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -1550,6 +1817,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -1563,58 +1831,69 @@ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "engines": [ "node >=0.6.0" - ] + ], + "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } }, "node_modules/figures": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", - "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/figures/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -1624,6 +1903,7 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -1632,9 +1912,10 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1647,6 +1928,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -1659,12 +1941,14 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, + "license": "MIT", "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { @@ -1672,21 +1956,23 @@ } }, "node_modules/flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true, + "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -1699,12 +1985,14 @@ "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" }, "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -1718,6 +2006,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -1728,36 +2017,81 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" }, "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", + "aproba": "^1.0.3", "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/gauge/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "license": "MIT", "dependencies": { - "pump": "^3.0.0" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -1767,6 +2101,7 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" } @@ -1774,12 +2109,15 @@ "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" }, "node_modules/glob": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1799,6 +2137,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -1810,14 +2149,16 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/glob/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -1826,35 +2167,82 @@ } }, "node_modules/globals": { - "version": "13.19.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", - "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", + "version": "15.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.12.0.tgz", + "integrity": "sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" + } + }, + "node_modules/globby/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" }, "node_modules/grapheme-splitter": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -1862,36 +2250,52 @@ "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "license": "ISC" }, "node_modules/hashids": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz", - "integrity": "sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/hashids/-/hashids-2.3.0.tgz", + "integrity": "sha512-ljM73TE/avEhNnazxaj0Dw3BbEUuLC5yYCQ9RSkSUcT4ZSU6ZebdKCIBJ+xT/DnSYW36E9k82GH1Q6MydSIosQ==", + "license": "MIT" }, "node_modules/hjson": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz", "integrity": "sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==", + "license": "MIT", "bin": { "hjson": "bin/hjson" } }, "node_modules/html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" }, "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "license": "BSD-2-Clause", "optional": true }, "node_modules/http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "license": "MIT", "optional": true, "dependencies": { "@tootallnate/once": "1", @@ -1903,13 +2307,14 @@ } }, "node_modules/http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", + "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^2.0.2", - "sshpk": "^1.14.1" + "sshpk": "^1.18.0" }, "engines": { "node": ">=0.10" @@ -1919,6 +2324,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -1928,17 +2334,20 @@ } }, "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=8.12.0" + "node": ">=14.18.0" } }, "node_modules/humanize-ms": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "license": "MIT", "optional": true, "dependencies": { "ms": "^2.0.0" @@ -1949,6 +2358,7 @@ "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", "dev": true, + "license": "MIT", "bin": { "husky": "lib/bin.js" }, @@ -1963,6 +2373,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -1987,13 +2398,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -2003,6 +2416,7 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -2017,8 +2431,9 @@ "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -2027,7 +2442,8 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "devOptional": true, + "license": "MIT", + "optional": true, "engines": { "node": ">=8" } @@ -2036,12 +2452,15 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "license": "ISC", "optional": true }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -2050,17 +2469,20 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" }, "node_modules/ini-config-parser": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz", "integrity": "sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg==", + "license": "MIT", "dependencies": { "coffee-script": "^1.12.4", "deep-extend": "^0.5.1", @@ -2068,36 +2490,44 @@ } }, "node_modules/ini-config-parser/node_modules/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/ini-config-parser/node_modules/rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", "dependencies": { - "glob": "^7.0.5" + "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "node_modules/inquirer": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz", - "integrity": "sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "license": "MIT", "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", @@ -2112,38 +2542,54 @@ "rxjs": "^7.5.5", "string-width": "^4.1.0", "strip-ansi": "^6.0.0", - "through": "^2.3.6" + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" }, "engines": { "node": ">=12.0.0" } }, - "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "optional": true + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "license": "MIT", + "optional": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } }, "node_modules/is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-glob": { @@ -2151,6 +2597,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -2162,6 +2609,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "license": "MIT", "engines": { "node": ">=8" } @@ -2170,12 +2618,14 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "license": "MIT", "optional": true }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -2183,7 +2633,8 @@ "node_modules/is-path-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==", + "integrity": "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2192,6 +2643,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "license": "MIT", "dependencies": { "is-path-inside": "^1.0.0" }, @@ -2199,10 +2651,11 @@ "node": ">=0.10.0" } }, - "node_modules/is-path-inside": { + "node_modules/is-path-in-cwd/node_modules/is-path-inside": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", + "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", + "license": "MIT", "dependencies": { "path-is-inside": "^1.0.1" }, @@ -2210,12 +2663,24 @@ "node": ">=0.10.0" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2225,6 +2690,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -2235,18 +2701,21 @@ "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" }, "node_modules/js-sdsl": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", - "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.2.tgz", + "integrity": "sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/js-sdsl" @@ -2257,6 +2726,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -2265,52 +2735,58 @@ } }, "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "license": "MIT", + "optional": true + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" }, "node_modules/json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" }, "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" }, "node_modules/jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", "dependencies": { - "universalify": "^1.0.0" + "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, - "node_modules/jsonfile/node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/jsprim": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", @@ -2318,6 +2794,7 @@ "engines": [ "node >=0.6.0" ], + "license": "MIT", "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -2325,11 +2802,22 @@ "verror": "1.10.0" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -2339,221 +2827,200 @@ } }, "node_modules/lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/lint-staged": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.1.0.tgz", - "integrity": "sha512-pn/sR8IrcF/T0vpWLilih8jmVouMlxqXxKuAojmbiGX5n/gDnz+abdPptlj0vYnbfE0SQNl3CY/HwtM0+yfOVQ==", - "dev": true, - "dependencies": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.19", - "commander": "^9.4.1", - "debug": "^4.3.4", - "execa": "^6.1.0", - "lilconfig": "2.0.6", - "listr2": "^5.0.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.2", - "pidtree": "^0.6.0", - "string-argv": "^0.3.1", - "yaml": "^2.1.3" + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.3.0.tgz", + "integrity": "sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "5.3.0", + "commander": "11.0.0", + "debug": "4.3.4", + "execa": "7.2.0", + "lilconfig": "2.1.0", + "listr2": "6.6.1", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.1" }, "bin": { "lint-staged": "bin/lint-staged.js" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": "^16.14.0 || >=18.0.0" }, "funding": { "url": "https://opencollective.com/lint-staged" } }, - "node_modules/lint-staged/node_modules/execa": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "node_modules/lint-staged/node_modules/commander": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", + "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=12.20.0" + "node": ">=16" } }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "node_modules/lint-staged/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/lint-staged/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "node_modules/lint-staged/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "node_modules/listr2": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", + "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", "dev": true, + "license": "MIT", "dependencies": { - "path-key": "^4.0.0" + "cli-truncate": "^3.1.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^5.0.1", + "rfdc": "^1.3.0", + "wrap-ansi": "^8.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=16.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } } }, - "node_modules/lint-staged/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "node_modules/listr2/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, + "license": "MIT", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/lint-staged/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/lint-staged/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "node_modules/listr2/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/listr2": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.6.tgz", - "integrity": "sha512-u60KxKBy1BR2uLJNTWNptzWQ1ob/gjMzIJPZffAENzpZqbMZ/5PrXXOomDcevIS/+IB7s1mmCEtSlT2qHWMqag==", + "node_modules/listr2/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.19", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.7", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" + "node": ">=12" }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/listr2/node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "node_modules/listr2/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/listr2/node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/locate-path": { @@ -2561,6 +3028,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -2574,23 +3042,27 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" }, "node_modules/lodash-es": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -2603,140 +3075,292 @@ } }, "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", + "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" + "ansi-escapes": "^5.0.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^5.0.0", + "strip-ansi": "^7.0.1", + "wrap-ansi": "^8.0.1" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "type-fest": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/log-update/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "license": "MIT", "dependencies": { - "semver": "^6.0.0" + "restore-cursor": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } + "node_modules/log-update/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" }, - "node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "optional": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, + "node_modules/log-update/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 10" + "node": ">=6" } }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "optional": true, + "node_modules/log-update/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=10" - } - }, + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lru-cache": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", + "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "license": "ISC", + "optional": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "license": "BSD-3-Clause", "dependencies": { - "tmpl": "1.0.x" + "tmpl": "1.0.5" } }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "license": "MIT", "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -2749,6 +3373,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2757,6 +3382,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -2765,17 +3391,23 @@ } }, "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mimic-response": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -2787,6 +3419,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2795,14 +3428,19 @@ } }, "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -2814,6 +3452,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "license": "ISC", "optional": true, "dependencies": { "minipass": "^3.0.0" @@ -2826,6 +3465,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "license": "MIT", "optional": true, "dependencies": { "minipass": "^3.1.0", @@ -2843,6 +3483,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "license": "ISC", "optional": true, "dependencies": { "minipass": "^3.0.0" @@ -2855,6 +3496,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "license": "ISC", "optional": true, "dependencies": { "minipass": "^3.0.0" @@ -2867,6 +3509,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "license": "ISC", "optional": true, "dependencies": { "minipass": "^3.0.0" @@ -2879,6 +3522,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -2891,6 +3535,7 @@ "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", "optional": true, "dependencies": { "minimist": "^1.2.6" @@ -2902,30 +3547,35 @@ "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" }, "node_modules/moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "license": "MIT", "engines": { "node": "*" } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "license": "ISC" }, "node_modules/mv": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "license": "MIT", "optional": true, "dependencies": { "mkdirp": "~0.5.1", @@ -2939,7 +3589,9 @@ "node_modules/mv/node_modules/glob": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", "optional": true, "dependencies": { "inflight": "^1.0.4", @@ -2955,7 +3607,9 @@ "node_modules/mv/node_modules/rimraf": { "version": "2.4.5", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", "optional": true, "dependencies": { "glob": "^6.0.1" @@ -2965,34 +3619,39 @@ } }, "node_modules/nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz", + "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==", + "license": "MIT" }, "node_modules/napi-build-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" }, "node_modules/ncp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "license": "MIT", "optional": true, "bin": { "ncp": "bin/ncp" } }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", "optional": true, "engines": { "node": ">= 0.6" @@ -3002,6 +3661,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/nntp-server/-/nntp-server-3.1.0.tgz", "integrity": "sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw==", + "license": "MIT", "dependencies": { "debug": "^4.3.3", "denque": "^2.0.1", @@ -3013,27 +3673,31 @@ "version": "2.30.1", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", + "license": "MIT", "dependencies": { "semver": "^5.4.1" } }, "node_modules/node-abi/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "license": "MIT" }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -3053,6 +3717,7 @@ "version": "8.4.1", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "license": "MIT", "optional": true, "dependencies": { "env-paths": "^2.2.0", @@ -3077,6 +3742,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", "optional": true, "dependencies": { "delegates": "^1.0.0", @@ -3090,6 +3757,8 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", "optional": true, "dependencies": { "aproba": "^1.0.3 || ^2.0.0", @@ -3109,6 +3778,8 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", "optional": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -3129,6 +3800,8 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", "optional": true, "dependencies": { "are-we-there-yet": "^3.0.0", @@ -3143,13 +3816,15 @@ "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "license": "MIT" }, "node_modules/node-pty": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-1.0.0.tgz", "integrity": "sha512-wtBMWWS7dFZm/VgqElrTvtfMq4GzJ6+edFI0Y0zyzygUSZMgZdraDUMUhCIvkjhJjme15qWmbyJbtAx4ot4uZA==", "hasInstallScript": true, + "license": "MIT", "dependencies": { "nan": "^2.17.0" } @@ -3158,6 +3833,7 @@ "version": "6.7.7", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz", "integrity": "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==", + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -3165,12 +3841,14 @@ "node_modules/noop-logger": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==" + "integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==", + "license": "MIT" }, "node_modules/nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "license": "ISC", "dependencies": { "abbrev": "1" }, @@ -3185,36 +3863,58 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "license": "MIT", "dependencies": { - "path-key": "^3.0.0" + "path-key": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3222,51 +3922,50 @@ "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -3276,6 +3975,7 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "license": "MIT", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -3297,7 +3997,8 @@ "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3306,6 +4007,7 @@ "version": "11.0.1", "resolved": "https://registry.npmjs.org/otplib/-/otplib-11.0.1.tgz", "integrity": "sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ==", + "license": "MIT", "dependencies": { "thirty-two": "1.0.2" } @@ -3315,6 +4017,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -3330,6 +4033,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -3344,7 +4048,8 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "devOptional": true, + "license": "MIT", + "optional": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -3360,6 +4065,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -3372,6 +4078,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3379,7 +4086,8 @@ "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3387,12 +4095,14 @@ "node_modules/path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "license": "(WTFPL OR MIT)" }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", "engines": { "node": ">=8" } @@ -3401,6 +4111,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -3413,6 +4124,7 @@ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true, + "license": "MIT", "bin": { "pidtree": "bin/pidtree.js" }, @@ -3423,7 +4135,8 @@ "node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "license": "MIT", "engines": { "node": ">=4" } @@ -3431,7 +4144,8 @@ "node_modules/pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3439,7 +4153,8 @@ "node_modules/pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "license": "MIT", "dependencies": { "pinkie": "^2.0.0" }, @@ -3451,6 +4166,7 @@ "version": "5.3.6", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", + "license": "MIT", "dependencies": { "detect-libc": "^1.0.3", "expand-template": "^2.0.3", @@ -3475,32 +4191,11 @@ "node": ">=6" } }, - "node_modules/prebuild-install/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prebuild-install/node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "node_modules/prebuild-install/node_modules/are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, "node_modules/prebuild-install/node_modules/decompress-response": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "license": "MIT", "dependencies": { "mimic-response": "^2.0.0" }, @@ -3508,126 +4203,35 @@ "node": ">=8" } }, - "node_modules/prebuild-install/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, + "node_modules/prebuild-install/node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "license": "MIT", "engines": { - "node": ">=0.10" - } - }, - "node_modules/prebuild-install/node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/prebuild-install/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prebuild-install/node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/prebuild-install/node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/prebuild-install/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/prebuild-install/node_modules/simple-get": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "license": "MIT", "dependencies": { "decompress-response": "^4.2.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } }, - "node_modules/prebuild-install/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/prebuild-install/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prebuild-install/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } @@ -3637,6 +4241,7 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin-prettier.js" }, @@ -3650,18 +4255,21 @@ "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "license": "ISC", "optional": true }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "license": "MIT", "optional": true, "dependencies": { "err-code": "^2.0.2", @@ -3672,19 +4280,21 @@ } }, "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "node_modules/punycode": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz", - "integrity": "sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3692,7 +4302,8 @@ "node_modules/qrcode-generator": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz", - "integrity": "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==" + "integrity": "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==", + "license": "MIT" }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -3712,12 +4323,14 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -3732,6 +4345,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", "engines": { "node": ">=4.0.0" } @@ -3740,14 +4354,16 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -3762,6 +4378,7 @@ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -3774,6 +4391,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -3782,6 +4400,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -3790,10 +4409,35 @@ "node": ">=8" } }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "license": "MIT", "optional": true, "engines": { "node": ">= 4" @@ -3804,21 +4448,25 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -3830,14 +4478,16 @@ } }, "node_modules/rimraf/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -3851,7 +4501,8 @@ "node_modules/rlogin": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz", - "integrity": "sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==", + "integrity": "sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==", + "license": "BSD-3-Clause", "engines": { "node": ">= 0.10.24" } @@ -3860,6 +4511,7 @@ "version": "4.8.5", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "license": "MIT", "engines": { "node": "6.* || >= 7.*" } @@ -3868,6 +4520,7 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -3891,38 +4544,58 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, "node_modules/safe-json-stringify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "license": "MIT", "optional": true }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" }, "node_modules/sane": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/sane/-/sane-5.0.1.tgz", "integrity": "sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q==", + "license": "MIT", "dependencies": { "@cnakazawa/watch": "^1.0.3", "anymatch": "^3.1.1", @@ -3941,10 +4614,115 @@ "node": "10.* || >= 12.*" } }, + "node_modules/sane/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/sane/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sane/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/sane/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sane/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/sane/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sane/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sane/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/sanitize-filename": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "license": "WTFPL OR ISC", "dependencies": { "truncate-utf8-bytes": "^1.0.0" } @@ -3952,15 +4730,14 @@ "node_modules/seedrandom": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", + "license": "MIT" }, "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3968,21 +4745,11 @@ "node": ">=10" } }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/serialize-error": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -3996,13 +4763,15 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" }, "node_modules/sharp": { "version": "0.25.4", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.25.4.tgz", "integrity": "sha512-umSzJJ1oBwIOfwFFt/fJ7JgCva9FvrEU2cbbm7u/3hSDZhXvkME8WE5qpaJqLIe2Har5msF5UG4CzYlEg5o3BQ==", "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "color": "^3.1.2", "detect-libc": "^1.0.3", @@ -4021,142 +4790,23 @@ "url": "https://opencollective.com/libvips" } }, - "node_modules/sharp/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sharp/node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "node_modules/sharp/node_modules/are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/sharp/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "bin": { - "detect-libc": "bin/detect-libc.js" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=0.10" - } - }, - "node_modules/sharp/node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/sharp/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sharp/node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" - }, - "node_modules/sharp/node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/sharp/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/sharp/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/sharp/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sharp/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" + "node": ">=8" } }, "node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", "engines": { "node": ">=8" } @@ -4164,7 +4814,8 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" }, "node_modules/simple-concat": { "version": "1.0.1", @@ -4183,7 +4834,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/simple-get": { "version": "4.0.1", @@ -4203,6 +4855,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", @@ -4213,6 +4866,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", "dependencies": { "is-arrayish": "^0.3.1" } @@ -4222,6 +4876,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" @@ -4238,6 +4893,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -4245,22 +4901,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", "optional": true, "engines": { "node": ">= 6.0.0", @@ -4268,16 +4913,17 @@ } }, "node_modules/socks": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", - "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "license": "MIT", "optional": true, "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, @@ -4285,6 +4931,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "license": "MIT", "optional": true, "dependencies": { "agent-base": "^6.0.2", @@ -4296,18 +4943,27 @@ } }, "node_modules/split2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", - "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", "engines": { "node": ">= 10.x" } }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "license": "BSD-3-Clause", + "optional": true + }, "node_modules/sqlite3": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.6.tgz", "integrity": "sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==", "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { "@mapbox/node-pre-gyp": "^1.0.0", "node-addon-api": "^4.2.0", @@ -4329,14 +4985,21 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz", "integrity": "sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg==", + "license": "BSD-2-Clause", "dependencies": { "lodash": "^4.17.15" } }, + "node_modules/sqlite3/node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "license": "MIT" + }, "node_modules/ssh2": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.14.0.tgz", - "integrity": "sha512-AqzD1UCqit8tbOKoj6ztDDi1ffJZ2rV2SwlgrVVrHPkV5vWqGJOVp5pmtj18PunkPJAuKQsnInyKV+/Nb2bUnA==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.16.0.tgz", + "integrity": "sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==", "hasInstallScript": true, "dependencies": { "asn1": "^0.2.6", @@ -4346,14 +5009,15 @@ "node": ">=10.16.0" }, "optionalDependencies": { - "cpu-features": "~0.0.8", - "nan": "^2.17.0" + "cpu-features": "~0.0.10", + "nan": "^2.20.0" } }, "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "license": "MIT", "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -4374,10 +5038,17 @@ "node": ">=0.10.0" } }, + "node_modules/sshpk/node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "license": "MIT" + }, "node_modules/ssri": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "license": "ISC", "optional": true, "dependencies": { "minipass": "^3.1.1" @@ -4387,18 +5058,20 @@ } }, "node_modules/string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, "node_modules/string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.19" } @@ -4407,6 +5080,7 @@ "version": "8.4.0", "resolved": "https://registry.npmjs.org/string-strip-html/-/string-strip-html-8.4.0.tgz", "integrity": "sha512-ajjEpk0V1G0+/RrX08I2pSj/kfsYU5wkUKWEKPQJXVQpdahZNSljiuWVqf8UgrB2E9DvFcougbl1gPwHzkuEDg==", + "license": "MIT", "engines": { "node": ">=14" } @@ -4415,6 +5089,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -4424,10 +5099,20 @@ "node": ">=8" } }, + "node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -4436,3982 +5121,374 @@ } }, "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/systeminformation": { - "version": "5.21.7", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.21.7.tgz", - "integrity": "sha512-K3LjnajrazTLTD61+87DFg8IXFk5ljx6nSBqB8pQLtC1UPivAjDtTYGPZ8jaBFxcesPaCOkvLRtBq+RFscrsLw==", - "os": [ - "darwin", - "linux", - "win32", - "freebsd", - "openbsd", - "netbsd", - "sunos", - "android" - ], - "bin": { - "systeminformation": "lib/cli.js" - }, - "engines": { - "node": ">=8.0.0" - }, - "funding": { - "type": "Buy me a coffee", - "url": "https://www.buymeacoffee.com/systeminfo" - } - }, - "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" + "node": ">=12" }, - "engines": { - "node": ">=10" - } - }, - "node_modules/telnet-socket": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz", - "integrity": "sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ==", - "dependencies": { - "binary-parser": "1.6.2", - "buffers": "github:NuSkooler/node-buffers" - } - }, - "node_modules/telnet-socket/node_modules/binary-parser": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz", - "integrity": "sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ==", - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/temptmp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/temptmp/-/temptmp-1.1.0.tgz", - "integrity": "sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ==", - "dependencies": { - "del": "^3.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/thirty-two": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz", - "integrity": "sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==", - "engines": { - "node": ">=0.2.6" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "optional": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "optional": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/uuid-parse": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz", - "integrity": "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==" - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/vscode-json-languageservice": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz", - "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==", - "dev": true, - "dependencies": { - "jsonc-parser": "^3.0.0", - "vscode-languageserver-textdocument": "^1.0.3", - "vscode-languageserver-types": "^3.16.0", - "vscode-nls": "^5.0.0", - "vscode-uri": "^3.0.3" - } - }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", - "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==", - "dev": true - }, - "node_modules/vscode-languageserver-types": { - "version": "3.17.2", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz", - "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==", - "dev": true - }, - "node_modules/vscode-nls": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", - "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==", - "dev": true - }, - "node_modules/vscode-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", - "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==", - "dev": true - }, - "node_modules/walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==", - "dependencies": { - "makeerror": "1.0.x" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-pm-runs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", - "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz", - "integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yarn": { - "version": "1.22.19", - "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz", - "integrity": "sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ==", - "hasInstallScript": true, - "bin": { - "yarn": "bin/yarn.js", - "yarnpkg": "bin/yarn.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/yazl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", - "dependencies": { - "buffer-crc32": "~0.2.3" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "zane-dmax/anyascii": {} - }, - "dependencies": { - "@breejs/later": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@breejs/later/-/later-4.1.0.tgz", - "integrity": "sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA==" - }, - "@cnakazawa/watch": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", - "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@eslint/eslintrc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", - "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - } - }, - "@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "optional": true - }, - "@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@mapbox/node-pre-gyp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", - "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", - "requires": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "optional": true, - "requires": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "optional": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "optional": true - } - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "optional": true - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "add": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/add/-/add-2.0.6.tgz", - "integrity": "sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q==" - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "optional": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "devOptional": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "any-ascii": { - "version": "file:zane-dmax/anyascii" - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - }, - "are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "avatar-generator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/avatar-generator/-/avatar-generator-2.0.4.tgz", - "integrity": "sha512-1XH0LAO6QwtOvv9ImVKr6O0DUtH+QX4B6ReBcfjbUPnFVZMfSgM18jkP8MDsrPxk9UmCGMddxBCxdizU7lbwrw==", - "requires": { - "commander": "^5.1.0", - "seedrandom": "^3.0.5", - "sharp": "^0.25.2" - }, - "dependencies": { - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" - } - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary-parser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz", - "integrity": "sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ==" - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" - }, - "buffers": { - "version": "git+ssh://git@github.com/NuSkooler/node-buffers.git#cd0855598f7048b02f0a51c90e22573973e9e2c2", - "from": "buffers@github:NuSkooler/node-buffers" - }, - "buildcheck": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", - "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", - "optional": true - }, - "bunyan": { - "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", - "requires": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "optional": true, - "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "optional": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "optional": true - } - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "requires": { - "rsvp": "^4.8.4" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "devOptional": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" - }, - "cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, - "requires": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" - }, - "coffee-script": { - "version": "1.12.7", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", - "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==" - }, - "color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "requires": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - }, - "dependencies": { - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - }, - "cpu-features": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.9.tgz", - "integrity": "sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ==", - "optional": true, - "requires": { - "buildcheck": "~0.0.6", - "nan": "^2.17.0" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "requires": { - "mimic-response": "^3.1.0" - } - }, - "deep-extend": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", - "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==", - "dev": true - }, - "deepdash": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz", - "integrity": "sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg==", - "requires": { - "lodash": "^4.17.21", - "lodash-es": "^4.17.21" - } - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", - "requires": { - "clone": "^1.0.2" - } - }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==", - "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" - }, - "dependencies": { - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw= sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - } - } - }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "requires": { - "glob": "^7.0.5" - } - } - } - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - }, - "denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "optional": true - }, - "detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dtrace-provider": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz", - "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ= sha512-V+HIGbAdxCIxddHNDwzXi6cx8Cz5RRlQOVcsryHfsyVVebpBEnDwHSgqxpgKzqeU/6/0DWqRLAGUwkbg2ecN1Q==", - "optional": true, - "requires": { - "nan": "^2.10.0" - } - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "easy-table": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", - "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==", - "requires": { - "ansi-regex": "^5.0.1", - "wcwidth": "^1.0.1" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - } - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "^1.4.0" - } - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "optional": true - }, - "err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "optional": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz", - "integrity": "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.4.1", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, - "requires": {} - }, - "eslint-plugin-json": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz", - "integrity": "sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==", - "dev": true, - "requires": { - "lodash": "^4.17.21", - "vscode-json-languageservice": "^4.1.6" - } - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "exiftool": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz", - "integrity": "sha1-9YqSvXcnCtxU8xUc7WGko6tp1wc= sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw==" - }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" - }, - "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "requires": { - "bser": "2.1.1" - } - }, - "figures": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", - "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", - "requires": { - "escape-string-regexp": "^1.0.5" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - } - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "requires": { - "minipass": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.19.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", - "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - }, - "hashids": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/hashids/-/hashids-2.2.10.tgz", - "integrity": "sha512-nXnYums7F8B5Y+GSThutLPlKMaamW1yjWNZVt0WModiJfdjaDZHnhYTWblS+h1OoBx3yjwiBwxldPP3nIbFSSA==" - }, - "hjson": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz", - "integrity": "sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==" - }, - "html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "optional": true - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "optional": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "optional": true, - "requires": { - "ms": "^2.0.0" - } - }, - "husky": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", - "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", - "dev": true - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "devOptional": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "devOptional": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "optional": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "ini-config-parser": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz", - "integrity": "sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg==", - "requires": { - "coffee-script": "^1.12.4", - "deep-extend": "^0.5.1", - "rimraf": "^2.6.1" - }, - "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "requires": { - "glob": "^7.0.5" - } - } - } - }, - "inquirer": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.2.tgz", - "integrity": "sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow==", - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - } - }, - "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "optional": true - }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" - }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "optional": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==" - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY= sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "js-sdsl": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", - "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" - }, - "dependencies": { - "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" - } - } - }, - "jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", - "dev": true - }, - "lint-staged": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.1.0.tgz", - "integrity": "sha512-pn/sR8IrcF/T0vpWLilih8jmVouMlxqXxKuAojmbiGX5n/gDnz+abdPptlj0vYnbfE0SQNl3CY/HwtM0+yfOVQ==", - "dev": true, - "requires": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.19", - "commander": "^9.4.1", - "debug": "^4.3.4", - "execa": "^6.1.0", - "lilconfig": "2.0.6", - "listr2": "^5.0.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.2", - "pidtree": "^0.6.0", - "string-argv": "^0.3.1", - "yaml": "^2.1.3" - }, - "dependencies": { - "execa": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "human-signals": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", - "dev": true - }, - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true - }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true - }, - "npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "requires": { - "path-key": "^4.0.0" - } - }, - "onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "requires": { - "mimic-fn": "^4.0.0" - } - }, - "path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true - }, - "strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true - } - } - }, - "listr2": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.6.tgz", - "integrity": "sha512-u60KxKBy1BR2uLJNTWNptzWQ1ob/gjMzIJPZffAENzpZqbMZ/5PrXXOomDcevIS/+IB7s1mmCEtSlT2qHWMqag==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.19", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.7", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - } - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==" - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "optional": true, - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "optional": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= sha512-M/XvMZ6oK4edXjvg/ZYyzByg8kjpVrF/m0x3wbhOlzJfsQgFkqP1rJnLnJExOcslmLSSeLiN6NmF+cBoKJHGTg==", - "requires": { - "tmpl": "1.0.x" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "optional": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "optional": true, - "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "optional": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "optional": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "optional": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "optional": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "optional": true, - "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "optional": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "optional": true, - "requires": { - "glob": "^6.0.1" - } - } - } - }, - "nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" - }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "optional": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "optional": true - }, - "nntp-server": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nntp-server/-/nntp-server-3.1.0.tgz", - "integrity": "sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw==", - "requires": { - "debug": "^4.3.3", - "denque": "^2.0.1", - "serialize-error": "^8.1.0", - "split2": "^4.1.0" - } - }, - "node-abi": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", - "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", - "requires": { - "semver": "^5.4.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", - "optional": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "dependencies": { - "are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "optional": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "optional": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - } - } - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - }, - "node-pty": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-1.0.0.tgz", - "integrity": "sha512-wtBMWWS7dFZm/VgqElrTvtfMq4GzJ6+edFI0Y0zyzygUSZMgZdraDUMUhCIvkjhJjme15qWmbyJbtAx4ot4uZA==", - "requires": { - "nan": "^2.17.0" - } - }, - "nodemailer": { - "version": "6.7.7", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz", - "integrity": "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==" - }, - "noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==" - }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "requires": { - "abbrev": "1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { - "path-key": "^3.0.0" - } - }, - "npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "requires": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" - }, - "otplib": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/otplib/-/otplib-11.0.1.tgz", - "integrity": "sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ==", - "requires": { - "thirty-two": "1.0.2" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "devOptional": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "requires": { - "pinkie": "^2.0.0" - } - }, - "prebuild-install": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", - "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", - "requires": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "requires": { - "mimic-response": "^2.0.0" - } - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==" - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", - "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "optional": true - }, - "promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "optional": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz", - "integrity": "sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==", - "dev": true - }, - "qrcode-generator": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz", - "integrity": "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==" - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" - } - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "optional": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "rlogin": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz", - "integrity": "sha1-2wcyKzEhkSZiXZ0KqYctfr6KxAM= sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg==" - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", - "requires": { - "tslib": "^2.1.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sane": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/sane/-/sane-5.0.1.tgz", - "integrity": "sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q==", - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^3.1.1", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.4", - "execa": "^4.0.0", - "fb-watchman": "^2.0.1", - "micromatch": "^4.0.2", - "minimist": "^1.1.1", - "walker": "~1.0.5" - } - }, - "sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "requires": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "serialize-error": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", - "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", - "requires": { - "type-fest": "^0.20.2" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, - "sharp": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.25.4.tgz", - "integrity": "sha512-umSzJJ1oBwIOfwFFt/fJ7JgCva9FvrEU2cbbm7u/3hSDZhXvkME8WE5qpaJqLIe2Har5msF5UG4CzYlEg5o3BQ==", - "requires": { - "color": "^3.1.2", - "detect-libc": "^1.0.3", - "node-addon-api": "^3.0.0", - "npmlog": "^4.1.2", - "prebuild-install": "^5.3.4", - "semver": "^7.3.2", - "simple-get": "^4.0.0", - "tar": "^6.0.2", - "tunnel-agent": "^0.6.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==" - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - }, - "simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "requires": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "requires": { - "is-arrayish": "^0.3.1" - } - }, - "slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true - } - } - }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "optional": true - }, - "socks": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", - "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", - "optional": true, - "requires": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", - "optional": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "split2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", - "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" - }, - "sqlite3": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.6.tgz", - "integrity": "sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==", - "requires": { - "@mapbox/node-pre-gyp": "^1.0.0", - "node-addon-api": "^4.2.0", - "node-gyp": "8.x", - "tar": "^6.1.11" - } - }, - "sqlite3-trans": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz", - "integrity": "sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg==", - "requires": { - "lodash": "^4.17.15" - } - }, - "ssh2": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.14.0.tgz", - "integrity": "sha512-AqzD1UCqit8tbOKoj6ztDDi1ffJZ2rV2SwlgrVVrHPkV5vWqGJOVp5pmtj18PunkPJAuKQsnInyKV+/Nb2bUnA==", - "requires": { - "asn1": "^0.2.6", - "bcrypt-pbkdf": "^1.0.2", - "cpu-features": "~0.0.8", - "nan": "^2.17.0" - } - }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "optional": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true - }, - "string-strip-html": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/string-strip-html/-/string-strip-html-8.4.0.tgz", - "integrity": "sha512-ajjEpk0V1G0+/RrX08I2pSj/kfsYU5wkUKWEKPQJXVQpdahZNSljiuWVqf8UgrB2E9DvFcougbl1gPwHzkuEDg==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - }, - "strip-json-comments": { + "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "requires": { + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "systeminformation": { + "node_modules/systeminformation": { "version": "5.21.7", "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.21.7.tgz", - "integrity": "sha512-K3LjnajrazTLTD61+87DFg8IXFk5ljx6nSBqB8pQLtC1UPivAjDtTYGPZ8jaBFxcesPaCOkvLRtBq+RFscrsLw==" + "integrity": "sha512-K3LjnajrazTLTD61+87DFg8IXFk5ljx6nSBqB8pQLtC1UPivAjDtTYGPZ8jaBFxcesPaCOkvLRtBq+RFscrsLw==", + "license": "MIT", + "os": [ + "darwin", + "linux", + "win32", + "freebsd", + "openbsd", + "netbsd", + "sunos", + "android" + ], + "bin": { + "systeminformation": "lib/cli.js" + }, + "engines": { + "node": ">=8.0.0" + }, + "funding": { + "type": "Buy me a coffee", + "url": "https://www.buymeacoffee.com/systeminfo" + } }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "requires": { + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", + "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", + "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - } + "engines": { + "node": ">=10" } }, - "tar-fs": { + "node_modules/tar-fs": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "requires": { + "license": "MIT", + "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.1.4" - }, - "dependencies": { - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - } } }, - "tar-stream": { + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/tar-stream": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "requires": { + "license": "MIT", + "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, - "telnet-socket": { + "node_modules/telnet-socket": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz", "integrity": "sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ==", - "requires": { + "license": "BSD-2-Clause", + "dependencies": { "binary-parser": "1.6.2", "buffers": "github:NuSkooler/node-buffers" - }, - "dependencies": { - "binary-parser": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz", - "integrity": "sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ==" - } } }, - "temptmp": { + "node_modules/telnet-socket/node_modules/binary-parser": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz", + "integrity": "sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ==", + "license": "MIT", + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/temptmp": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/temptmp/-/temptmp-1.1.0.tgz", "integrity": "sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ==", - "requires": { + "license": "BSD-2-Clause", + "dependencies": { "del": "^3.0.0" + }, + "engines": { + "node": ">=6.0" } }, - "text-table": { + "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" }, - "thirty-two": { + "node_modules/thirty-two": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz", - "integrity": "sha1-TKL//AKlEpDSdEueP1V2k8prYno= sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==" + "integrity": "sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==", + "engines": { + "node": ">=0.2.6" + } }, - "through": { + "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" }, - "tmp": { + "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { + "license": "MIT", + "dependencies": { "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" } }, - "tmpl": { + "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "license": "BSD-3-Clause" }, - "to-regex-range": { + "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { + "license": "MIT", + "dependencies": { "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "tr46": { + "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" }, - "truncate-utf8-bytes": { + "node_modules/truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys= sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "requires": { + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "license": "WTFPL", + "dependencies": { "utf8-byte-length": "^1.0.1" } }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, - "tunnel-agent": { + "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "requires": { + "license": "Apache-2.0", + "dependencies": { "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" } }, - "tweetnacl": { + "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" }, - "type-check": { + "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "type-fest": { + "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "unique-filename": { + "node_modules/unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "license": "ISC", "optional": true, - "requires": { + "dependencies": { "unique-slug": "^2.0.0" } }, - "unique-slug": { + "node_modules/unique-slug": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "license": "ISC", "optional": true, - "requires": { + "dependencies": { "imurmurhash": "^0.1.4" } }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } }, - "uri-js": { + "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "requires": { + "license": "BSD-2-Clause", + "dependencies": { "punycode": "^2.1.0" } }, - "utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "license": "(WTFPL OR MIT)" }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" }, - "uuid": { + "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } }, - "uuid-parse": { + "node_modules/uuid-parse": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz", - "integrity": "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==" + "integrity": "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==", + "license": "MIT" }, - "verror": { + "node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "requires": { + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, - "vscode-json-languageservice": { + "node_modules/vscode-json-languageservice": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz", "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "jsonc-parser": "^3.0.0", "vscode-languageserver-textdocument": "^1.0.3", "vscode-languageserver-types": "^3.16.0", @@ -8419,138 +5496,189 @@ "vscode-uri": "^3.0.3" } }, - "vscode-languageserver-textdocument": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", - "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==", - "dev": true + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "dev": true, + "license": "MIT" }, - "vscode-languageserver-types": { - "version": "3.17.2", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz", - "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==", - "dev": true + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "dev": true, + "license": "MIT" }, - "vscode-nls": { + "node_modules/vscode-nls": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==", - "dev": true + "dev": true, + "license": "MIT" }, - "vscode-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", - "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==", - "dev": true + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "dev": true, + "license": "MIT" }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= sha512-cF4je9Fgt6sj1PKfuFt9jpQPeHosM+Ryma/hfY9U7uXGKM7pJCsF0v2r55o+Il54+i77SyYWetB4tD1dEygRkw==", - "requires": { - "makeerror": "1.0.x" + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" } }, - "wcwidth": { + "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "requires": { + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "license": "MIT", + "dependencies": { "defaults": "^1.0.3" } }, - "webidl-conversions": { + "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" }, - "whatwg-url": { + "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { + "license": "MIT", + "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, - "which": { + "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { + "license": "ISC", + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "which-pm-runs": { + "node_modules/which-pm-runs": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", - "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==" + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "wide-align": { + "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "requires": { + "license": "ISC", + "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, - "requires": { + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" } }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "requires": {} + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } }, - "yallist": { + "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yaml": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz", - "integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" }, - "yarn": { - "version": "1.22.19", - "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz", - "integrity": "sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ==" + "node_modules/yaml": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 14" + } }, - "yazl": { + "node_modules/yazl": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", - "requires": { + "license": "MIT", + "dependencies": { "buffer-crc32": "~0.2.3" } }, - "yocto-queue": { + "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/package.json b/package.json index 68b642df6..df1d246a5 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "sanitize-filename": "^1.6.3", "sqlite3": "5.1.6", "sqlite3-trans": "1.3.0", - "ssh2": "1.14.0", + "ssh2": "1.16.0", "string-strip-html": "8.4.0", "systeminformation": "5.21.7", "telnet-socket": "0.2.4", @@ -76,9 +76,12 @@ "yazl": "^2.5.1" }, "devDependencies": { + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "^9.15.0", "eslint": "8.31.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-json": "^3.1.0", + "globals": "^15.12.0", "husky": "^8.0.0", "lint-staged": "^13.1.0", "prettier": "2.8.1" diff --git a/yarn.lock b/yarn.lock index 5a6410011..e349dd951 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,66 +2,27 @@ # yarn lockfile v1 -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - "@breejs/later@4.1.0": version "4.1.0" - resolved "https://registry.yarnpkg.com/@breejs/later/-/later-4.1.0.tgz#9246907f46cc9e9c9af37d791ab468d98921bcc1" + resolved "https://registry.npmjs.org/@breejs/later/-/later-4.1.0.tgz" integrity sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA== "@cnakazawa/watch@^1.0.3": version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + resolved "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz" integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== dependencies: exec-sh "^0.3.2" minimist "^1.2.0" -"@eslint/eslintrc@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" - integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.4.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - "@gar/promisify@^1.0.1": version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== -"@humanwhocodes/config-array@^0.11.8": - version "0.11.14" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" - integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== - dependencies: - "@humanwhocodes/object-schema" "^2.0.2" - debug "^4.3.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" - integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== - "@mapbox/node-pre-gyp@^1.0.0": version "1.0.11" - resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa" + resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz" integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ== dependencies: detect-libc "^2.0.0" @@ -74,30 +35,9 @@ semver "^7.3.5" tar "^6.1.11" -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - "@npmcli/fs@^1.0.0": version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== dependencies: "@gar/promisify" "^1.0.1" @@ -105,7 +45,7 @@ "@npmcli/move-file@^1.0.1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== dependencies: mkdirp "^1.0.4" @@ -113,123 +53,81 @@ "@tootallnate/once@1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== abbrev@1: version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - add@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/add/-/add-2.0.6.tgz#248f0a9f6e5a528ef2295dbeec30532130ae2235" + resolved "https://registry.npmjs.org/add/-/add-2.0.6.tgz" integrity sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q== -agent-base@6, agent-base@^6.0.2: +agent-base@^6.0.2, agent-base@6: version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" agentkeepalive@^4.1.3: version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz" integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== dependencies: humanize-ms "^1.2.1" aggregate-error@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - ansi-escapes@^4.2.1: version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" -ansi-escapes@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" - integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== - dependencies: - type-fest "^1.0.2" - ansi-regex@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-regex@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" - integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== - ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" -ansi-styles@^6.0.0, ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - anymatch@^3.1.1: version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.0.3: +aproba@^1.0.3, "aproba@^1.0.3 || ^2.0.0": version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -"aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - are-we-there-yet@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== dependencies: delegates "^1.0.0" @@ -237,7 +135,7 @@ are-we-there-yet@^2.0.0: are-we-there-yet@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== dependencies: delegates "^1.0.0" @@ -245,49 +143,44 @@ are-we-there-yet@^3.0.0: are-we-there-yet@~1.1.2: version "1.1.7" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz" integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== dependencies: delegates "^1.0.0" readable-stream "^2.0.6" -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - array-union@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== dependencies: array-uniq "^1.0.1" array-uniq@^1.0.1: version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== asn1@^0.2.6, asn1@~0.2.3: version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" -assert-plus@1.0.0, assert-plus@^1.0.0: +assert-plus@^1.0.0, assert-plus@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== async@3.2.4: version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== avatar-generator@^2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/avatar-generator/-/avatar-generator-2.0.4.tgz#01d5db33b86ff32cf274f532ab9def0aaf49921a" + resolved "https://registry.npmjs.org/avatar-generator/-/avatar-generator-2.0.4.tgz" integrity sha512-1XH0LAO6QwtOvv9ImVKr6O0DUtH+QX4B6ReBcfjbUPnFVZMfSgM18jkP8MDsrPxk9UmCGMddxBCxdizU7lbwrw== dependencies: commander "^5.1.0" @@ -296,34 +189,34 @@ avatar-generator@^2.0.4: balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== dependencies: tweetnacl "^0.14.3" binary-parser@1.6.2: version "1.6.2" - resolved "https://registry.yarnpkg.com/binary-parser/-/binary-parser-1.6.2.tgz#8410a82ffd9403271ec182bd91e63a09cee88cbe" + resolved "https://registry.npmjs.org/binary-parser/-/binary-parser-1.6.2.tgz" integrity sha512-cYAhKB51A9T/uylDvMK7uAYaPLWLwlferNOpnQ0E0fuO73yPi7kWaWiOm22BvuKxCbggmkiFN0VkuLg6gc+KQQ== binary-parser@2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/binary-parser/-/binary-parser-2.1.0.tgz#425776c870c64ddb555d7cc0010ccbf9d9278234" + resolved "https://registry.npmjs.org/binary-parser/-/binary-parser-2.1.0.tgz" integrity sha512-R6WS2W7a7UHAFYLm0vWlk5M2aTayOjiyBZp+bvUZPUteuU5hI9BaREHKAFLgpq/nKheMgSxZOzpe/x3NxddqiQ== bl@^4.0.3, bl@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -332,7 +225,7 @@ bl@^4.0.3, bl@^4.1.0: brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -340,33 +233,33 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + version "3.0.3" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" bser@2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" buffer-crc32@~0.2.3: version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== buffer@^5.5.0: version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" @@ -374,16 +267,16 @@ buffer@^5.5.0: "buffers@github:NuSkooler/node-buffers": version "0.1.1" - resolved "https://codeload.github.com/NuSkooler/node-buffers/tar.gz/cd0855598f7048b02f0a51c90e22573973e9e2c2" + resolved "git+ssh://git@github.com/NuSkooler/node-buffers.git#cd0855598f7048b02f0a51c90e22573973e9e2c2" buildcheck@~0.0.6: version "0.0.6" - resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.6.tgz#89aa6e417cfd1e2196e3f8fe915eb709d2fe4238" + resolved "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz" integrity sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A== bunyan@1.8.15: version "1.8.15" - resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.15.tgz#8ce34ca908a17d0776576ca1b2f6cbd916e93b46" + resolved "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz" integrity sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig== optionalDependencies: dtrace-provider "~0.8" @@ -393,7 +286,7 @@ bunyan@1.8.15: cacache@^15.2.0: version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + resolved "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== dependencies: "@npmcli/fs" "^1.0.0" @@ -415,26 +308,16 @@ cacache@^15.2.0: tar "^6.0.2" unique-filename "^1.1.1" -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - capture-exit@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + resolved "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz" integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== dependencies: rsvp "^4.8.4" -chalk@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== - -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: +chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -442,98 +325,83 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: chardet@^0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== chownr@^1.1.1: version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chownr@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cli-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" -cli-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" - integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== - dependencies: - restore-cursor "^4.0.0" - cli-spinners@^2.5.0: - version "2.9.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.1.tgz#9c0b9dad69a6d47cbb4333c14319b060ed395a35" - integrity sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ== - -cli-truncate@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" - integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== - dependencies: - slice-ansi "^5.0.0" - string-width "^5.0.0" + version "2.9.2" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== cli-width@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== clone@^1.0.2: version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== code-point-at@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== coffee-script@^1.12.4: version "1.12.7" - resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.12.7.tgz#c05dae0cb79591d05b3070a8433a98c9a89ccc53" + resolved "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz" integrity sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw== color-convert@^1.9.3: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + color-string@^1.6.0: version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== dependencies: color-name "^1.0.0" @@ -541,63 +409,48 @@ color-string@^1.6.0: color-support@^1.1.2, color-support@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== color@^3.1.2: version "3.2.1" - resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz" integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== dependencies: color-convert "^1.9.3" color-string "^1.6.0" -colorette@^2.0.20: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -commander@11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" - integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ== - commander@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== -core-util-is@1.0.2: +core-util-is@~1.0.0, core-util-is@1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cpu-features@~0.0.8: - version "0.0.9" - resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.9.tgz#5226b92f0f1c63122b0a3eb84cb8335a4de499fc" - integrity sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ== +cpu-features@~0.0.10: + version "0.0.10" + resolved "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz" + integrity sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA== dependencies: buildcheck "~0.0.6" - nan "^2.17.0" + nan "^2.19.0" -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.0: version "7.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" @@ -606,57 +459,45 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: dashdash@^1.12.0: version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== dependencies: assert-plus "^1.0.0" -debug@4, debug@4.3.4, debug@^4.3.2, debug@^4.3.3: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^4.3.1: +debug@^4.3.3, debug@4: version "4.3.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz" integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== dependencies: ms "^2.1.3" decompress-response@^4.2.0: version "4.2.1" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz" integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== dependencies: mimic-response "^2.0.0" decompress-response@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: mimic-response "^3.1.0" deep-extend@^0.5.1: version "0.5.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz" integrity sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w== deep-extend@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - deepdash@^5.3.9: version "5.3.9" - resolved "https://registry.yarnpkg.com/deepdash/-/deepdash-5.3.9.tgz#2aa92570d7b1787ed281e2fafe0be24df00ddfe4" + resolved "https://registry.npmjs.org/deepdash/-/deepdash-5.3.9.tgz" integrity sha512-GRzJ0q9PDj2T+J2fX+b+TlUa2NlZ11l6vJ8LHNKVGeZ8CfxCuJaCychTq07iDRTvlfO8435jlvVS1QXBrW9kMg== dependencies: lodash "^4.17.21" @@ -664,14 +505,14 @@ deepdash@^5.3.9: defaults@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" del@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + resolved "https://registry.npmjs.org/del/-/del-3.0.0.tgz" integrity sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A== dependencies: globby "^6.1.0" @@ -683,46 +524,34 @@ del@^3.0.0: delegates@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== denque@^2.0.1: version "2.1.0" - resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" + resolved "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz" integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== detect-libc@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz" integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== detect-libc@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" - integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" + version "2.0.3" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== dtrace-provider@~0.8: version "0.8.8" - resolved "https://registry.yarnpkg.com/dtrace-provider/-/dtrace-provider-0.8.8.tgz#2996d5490c37e1347be263b423ed7b297fb0d97e" + resolved "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz" integrity sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg== dependencies: nan "^2.14.0" -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - easy-table@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/easy-table/-/easy-table-1.2.0.tgz#ba9225d7138fee307bfd4f0b5bc3c04bdc7c54eb" + resolved "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz" integrity sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww== dependencies: ansi-regex "^5.0.1" @@ -731,7 +560,7 @@ easy-table@^1.2.0: ecc-jsbn@~0.1.1: version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== dependencies: jsbn "~0.1.0" @@ -739,192 +568,46 @@ ecc-jsbn@~0.1.1: emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -encoding@^0.1.12: +encoding@^0.1.0, encoding@^0.1.12: version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" env-paths@^2.2.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== err-code@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-prettier@^8.5.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" - integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== - -eslint-plugin-json@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz#251108ba1681c332e0a442ef9513bd293619de67" - integrity sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g== - dependencies: - lodash "^4.17.21" - vscode-json-languageservice "^4.1.6" - -eslint-scope@^7.1.1: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint@8.31.0: - version "8.31.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.31.0.tgz#75028e77cbcff102a9feae1d718135931532d524" - integrity sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA== - dependencies: - "@eslint/eslintrc" "^1.4.1" - "@humanwhocodes/config-array" "^0.11.8" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-sdsl "^4.1.4" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - -espree@^9.4.0: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esquery@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -eventemitter3@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" - integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== - exec-sh@^0.3.2, exec-sh@^0.3.4: version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" + resolved "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz" integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== -execa@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" - integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^4.3.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - execa@^4.0.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== dependencies: cross-spawn "^7.0.0" @@ -939,118 +622,62 @@ execa@^4.0.0: exiftool@^0.0.3: version "0.0.3" - resolved "https://registry.yarnpkg.com/exiftool/-/exiftool-0.0.3.tgz#f58a92bd77270adc54f3151ced61a4a3ab69d707" + resolved "https://registry.npmjs.org/exiftool/-/exiftool-0.0.3.tgz" integrity sha512-7xq/yI+ESuZEApWOTxp7bJ12XRjt+3LDqkCBLBkfrYDF3hQE65Lid/U2xYf7iCZ2LUBRWqsix1fXEfGvn9oTGw== expand-template@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== external-editor@^3.0.3: version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" iconv-lite "^0.4.24" tmp "^0.0.33" -extsprintf@1.3.0: +extsprintf@^1.2.0, extsprintf@1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - fb-watchman@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== dependencies: bser "2.1.1" figures@^3.0.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.1.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.1.tgz#a02a15fdec25a8f844ff7cc658f03dd99eb4609b" - integrity sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== - follow-redirects@^1.15.2: version "1.15.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz" integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== fs-constants@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== fs-extra@10.1.0: version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" @@ -1059,19 +686,19 @@ fs-extra@10.1.0: fs-minipass@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== gauge@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" + resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== dependencies: aproba "^1.0.3 || ^2.0.0" @@ -1086,7 +713,7 @@ gauge@^3.0.0: gauge@^4.0.3: version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== dependencies: aproba "^1.0.3 || ^2.0.0" @@ -1100,7 +727,7 @@ gauge@^4.0.3: gauge@~2.7.3: version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + resolved "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz" integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== dependencies: aproba "^1.0.3" @@ -1114,60 +741,61 @@ gauge@~2.7.3: get-stream@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" -get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - getpass@^0.1.1: version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== dependencies: assert-plus "^1.0.0" github-from-package@0.0.0: version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== +glob@^6.0.1: + version "6.0.4" + resolved "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz" + integrity sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A== dependencies: - is-glob "^4.0.3" + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" -glob@8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== +glob@^7.0.3: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^5.0.1" + minimatch "^3.1.1" once "^1.3.0" + path-is-absolute "^1.0.0" -glob@^6.0.1: - version "6.0.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" - integrity sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A== +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: + fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "2 || 3" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.3, glob@^7.1.3, glob@^7.1.4: +glob@^7.1.4: version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -1177,16 +805,20 @@ glob@^7.0.3, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^13.19.0: - version "13.23.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" - integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== +glob@8.0.3: + version "8.0.3" + resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== dependencies: - type-fest "^0.20.2" + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" globby@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw== dependencies: array-union "^1.0.1" @@ -1197,47 +829,42 @@ globby@^6.1.0: graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.6: version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-unicode@^2.0.0, has-unicode@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== hashids@^2.2.10: version "2.3.0" - resolved "https://registry.yarnpkg.com/hashids/-/hashids-2.3.0.tgz#af92c9cdb093c0ed3542cf0dcbd6c289125df387" + resolved "https://registry.npmjs.org/hashids/-/hashids-2.3.0.tgz" integrity sha512-ljM73TE/avEhNnazxaj0Dw3BbEUuLC5yYCQ9RSkSUcT4ZSU6ZebdKCIBJ+xT/DnSYW36E9k82GH1Q6MydSIosQ== hjson@3.2.2: version "3.2.2" - resolved "https://registry.yarnpkg.com/hjson/-/hjson-3.2.2.tgz#a5a81138f4c0bb427e4b2ac917fafd4b454436cf" + resolved "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" integrity sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q== html-entities@^2.3.3: version "2.5.2" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" + resolved "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz" integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== http-cache-semantics@^4.1.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-proxy-agent@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: "@tootallnate/once" "1" @@ -1246,7 +873,7 @@ http-proxy-agent@^4.0.1: http-signature@^1.3.6: version "1.4.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.4.0.tgz#dee5a9ba2bf49416abc544abd6d967f6a94c8c3f" + resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz" integrity sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg== dependencies: assert-plus "^1.0.0" @@ -1255,7 +882,7 @@ http-signature@^1.3.6: https-proxy-agent@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" @@ -1263,89 +890,66 @@ https-proxy-agent@^5.0.0: human-signals@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== -human-signals@^4.3.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" - integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== - humanize-ms@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== dependencies: ms "^2.0.0" -husky@^8.0.0: - version "8.0.3" - resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" - integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== - -iconv-lite@0.6.3, iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - iconv-lite@^0.4.24: version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.2, iconv-lite@0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + ieee754@^1.1.13: version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== infer-owner@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ini-config-parser@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/ini-config-parser/-/ini-config-parser-1.0.4.tgz#0abc75cb68c506204712d2b4861400b6adbfda78" + resolved "https://registry.npmjs.org/ini-config-parser/-/ini-config-parser-1.0.4.tgz" integrity sha512-5hLh5Cqai67pTrLQ9q/K/3EtSP2Tzu41AZzwPLSegkkMkc42dGweLgkbiocCBiBBEg2fPhs6pKmdFhwj5Ul3Bg== dependencies: coffee-script "^1.12.4" @@ -1354,12 +958,12 @@ ini-config-parser@^1.0.4: ini@~1.3.0: version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== inquirer@^8.2.2: version "8.2.6" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz" integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== dependencies: ansi-escapes "^4.2.1" @@ -1378,154 +982,103 @@ inquirer@^8.2.2: through "^2.3.6" wrap-ansi "^6.0.1" -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" is-arrayish@^0.3.1: version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - is-fullwidth-code-point@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-fullwidth-code-point@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" - integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== - -is-glob@^4.0.0, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - is-interactive@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-lambda@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-path-cwd@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz" integrity sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw== is-path-in-cwd@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + resolved "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz" integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== dependencies: is-path-inside "^1.0.0" is-path-inside@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz" integrity sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g== dependencies: path-is-inside "^1.0.1" -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== isarray@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -js-sdsl@^4.1.4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" - integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - jsbn@~0.1.0: version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== json-schema@0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -jsonc-parser@^3.0.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.3.1.tgz#f2a524b4f7fd11e3d791e559977ad60b98b798b4" - integrity sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ== - jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" @@ -1534,7 +1087,7 @@ jsonfile@^6.0.1: jsprim@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz" integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== dependencies: assert-plus "1.0.0" @@ -1542,117 +1095,46 @@ jsprim@^2.0.2: json-schema "0.4.0" verror "1.10.0" -keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lilconfig@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -lint-staged@^13.1.0: - version "13.3.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.3.0.tgz#7965d72a8d6a6c932f85e9c13ccf3596782d28a5" - integrity sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ== - dependencies: - chalk "5.3.0" - commander "11.0.0" - debug "4.3.4" - execa "7.2.0" - lilconfig "2.1.0" - listr2 "6.6.1" - micromatch "4.0.5" - pidtree "0.6.0" - string-argv "0.3.2" - yaml "2.3.1" - -listr2@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-6.6.1.tgz#08b2329e7e8ba6298481464937099f4a2cd7f95d" - integrity sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg== - dependencies: - cli-truncate "^3.1.0" - colorette "^2.0.20" - eventemitter3 "^5.0.1" - log-update "^5.0.1" - rfdc "^1.3.0" - wrap-ansi "^8.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - lodash-es@^4.17.21: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.21: +lodash@^4.17.15, lodash@^4.17.21, lodash@4.17.21: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" is-unicode-supported "^0.1.0" -log-update@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09" - integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw== - dependencies: - ansi-escapes "^5.0.0" - cli-cursor "^4.0.0" - slice-ansi "^5.0.0" - strip-ansi "^7.0.1" - wrap-ansi "^8.0.1" - -lru-cache@7.13.2: - version "7.13.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.13.2.tgz#bb5d3f1deea3f3a7a35c1c44345566a612e09cd0" - integrity sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA== - lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" +lru-cache@7.13.2: + version "7.13.2" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz" + integrity sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA== + make-dir@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" make-fetch-happen@^9.1.0: version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== dependencies: agentkeepalive "^4.1.3" @@ -1674,19 +1156,19 @@ make-fetch-happen@^9.1.0: makeerror@1.0.12: version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: tmpl "1.0.5" merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -micromatch@4.0.5, micromatch@^4.0.2: +micromatch@^4.0.2: version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -1694,65 +1176,60 @@ micromatch@4.0.5, micromatch@^4.0.2: mime-db@1.52.0: version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.35: version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - mimic-response@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz" integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== mimic-response@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -"minimatch@2 || 3", minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.1.1, "minimatch@2 || 3": version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^5.0.1: version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass-collect@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== dependencies: minipass "^3.0.0" minipass-fetch@^1.3.2: version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== dependencies: minipass "^3.1.0" @@ -1763,40 +1240,40 @@ minipass-fetch@^1.3.2: minipass-flush@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: minipass "^3.0.0" minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" minipass-sized@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== dependencies: minipass "^3.0.0" minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" minipass@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== minizlib@^2.0.0, minizlib@^2.1.1: version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== dependencies: minipass "^3.0.0" @@ -1804,78 +1281,73 @@ minizlib@^2.0.0, minizlib@^2.1.1: mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp@^1.0.3, mkdirp@^1.0.4: +mkdirp@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== mkdirp@~0.5.1: version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" -moment@2.29.4, moment@^2.19.3: +moment@^2.19.3, moment@2.29.4: version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - ms@^2.0.0, ms@^2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== mute-stream@0.0.8: version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== mv@~2: version "2.1.1" - resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2" + resolved "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz" integrity sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg== dependencies: mkdirp "~0.5.1" ncp "~2.0.0" rimraf "~2.4.0" -nan@^2.14.0, nan@^2.17.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554" - integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== +nan@^2.14.0, nan@^2.17.0, nan@^2.19.0, nan@^2.20.0: + version "2.22.0" + resolved "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz" + integrity sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw== napi-build-utils@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - ncp@~2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" + resolved "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz" integrity sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA== negotiator@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + version "0.6.4" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== nntp-server@3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/nntp-server/-/nntp-server-3.1.0.tgz#c48e71899385f5ba394888524f8a1bae024a9c75" + resolved "https://registry.npmjs.org/nntp-server/-/nntp-server-3.1.0.tgz" integrity sha512-L8U2CnFPHXfDKF+eaYpx07fCW7gbk7gNB0faDWg5fLIEofEP7O/RIUEonl0jGRDf9/eGMj7CRil1faG5YZq4bw== dependencies: debug "^4.3.3" @@ -1885,31 +1357,31 @@ nntp-server@3.1.0: node-abi@^2.7.0: version "2.30.1" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" + resolved "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz" integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w== dependencies: semver "^5.4.1" node-addon-api@^3.0.0: version "3.2.1" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== node-addon-api@^4.2.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz" integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== node-fetch@^2.6.7: version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" node-gyp@8.x: version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== dependencies: env-paths "^2.2.0" @@ -1925,55 +1397,48 @@ node-gyp@8.x: node-int64@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== node-pty@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/node-pty/-/node-pty-1.0.0.tgz#7daafc0aca1c4ca3de15c61330373af4af5861fd" + resolved "https://registry.npmjs.org/node-pty/-/node-pty-1.0.0.tgz" integrity sha512-wtBMWWS7dFZm/VgqElrTvtfMq4GzJ6+edFI0Y0zyzygUSZMgZdraDUMUhCIvkjhJjme15qWmbyJbtAx4ot4uZA== dependencies: nan "^2.17.0" nodemailer@6.7.7: version "6.7.7" - resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.7.7.tgz#e522fbd7507b81c51446d3f79c4603bf00083ddd" + resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz" integrity sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA== noop-logger@^0.1.1: version "0.1.1" - resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" + resolved "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz" integrity sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ== nopt@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== dependencies: abbrev "1" normalize-path@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== npm-run-path@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" -npm-run-path@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" - integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== - dependencies: - path-key "^4.0.0" - npmlog@^4.0.1, npmlog@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== dependencies: are-we-there-yet "~1.1.2" @@ -1983,7 +1448,7 @@ npmlog@^4.0.1, npmlog@^4.1.2: npmlog@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== dependencies: are-we-there-yet "^2.0.0" @@ -1993,7 +1458,7 @@ npmlog@^5.0.1: npmlog@^6.0.0: version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== dependencies: are-we-there-yet "^3.0.0" @@ -2003,50 +1468,31 @@ npmlog@^6.0.0: number-is-nan@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" onetime@^5.1.0: version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - -optionator@^0.9.1: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - ora@^5.4.1: version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== dependencies: bl "^4.1.0" @@ -2061,109 +1507,73 @@ ora@^5.4.1: os-tmpdir@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== otplib@11.0.1: version "11.0.1" - resolved "https://registry.yarnpkg.com/otplib/-/otplib-11.0.1.tgz#7d64aa87029f07c99c7f96819fb10cdb67dea886" + resolved "https://registry.npmjs.org/otplib/-/otplib-11.0.1.tgz" integrity sha512-oi57teljNyWTC/JqJztHOtSGeFNDiDh5C1myd+faocUtFAX27Sm1mbx69kpEJ8/JqrblI3kAm4Pqd6tZJoOIBQ== dependencies: thirty-two "1.0.2" -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - p-map@^1.1.1: version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + resolved "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz" integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== p-map@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-is-inside@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - picomatch@^2.0.4, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pidtree@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" - integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== - pify@^2.0.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== pinkie-promise@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== prebuild-install@^5.3.4: version "5.3.6" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.6.tgz#7c225568d864c71d89d07f8796042733a3f54291" + resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz" integrity sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg== dependencies: detect-libc "^1.0.3" @@ -2182,60 +1592,40 @@ prebuild-install@^5.3.4: tunnel-agent "^0.6.0" which-pm-runs "^1.0.0" -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier@2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" - integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== - process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== promise-inflight@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== promise-retry@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== dependencies: err-code "^2.0.2" retry "^0.12.0" pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + version "3.0.2" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz" + integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== dependencies: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - qrcode-generator@^1.4.4: version "1.4.4" - resolved "https://registry.yarnpkg.com/qrcode-generator/-/qrcode-generator-1.4.4.tgz#63f771224854759329a99048806a53ed278740e7" + resolved "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz" integrity sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw== -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - rc@^1.2.7: version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" @@ -2245,7 +1635,7 @@ rc@^1.2.7: readable-stream@^2.0.6: version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" @@ -2258,127 +1648,99 @@ readable-stream@^2.0.6: readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" util-deprecate "^1.0.1" -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - restore-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" signal-exit "^3.0.2" -restore-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" - integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - retry@^0.12.0: version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" - integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== +rimraf@^2.2.8: + version "2.7.1" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" -rimraf@^2.2.8, rimraf@^2.6.1: +rimraf@^2.6.1: version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" rimraf@~2.4.0: version "2.4.5" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz" integrity sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ== dependencies: glob "^6.0.1" rlogin@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/rlogin/-/rlogin-1.0.0.tgz#db07322b31219126625d9d0aa9872d7ebe8ac403" + resolved "https://registry.npmjs.org/rlogin/-/rlogin-1.0.0.tgz" integrity sha512-WixxTud2iapeJBNqhZl3jQfXYqKolBjgQiQAwUzF6Uvc4s3Is26PjPxHOh/vHkEfvwdC15szq4mbMcHRT+C5Yg== rsvp@^4.8.4: version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + resolved "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== run-async@^2.4.0: version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - rxjs@^7.5.5: version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-json-stringify@~1: version "1.2.0" - resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz#356e44bc98f1f93ce45df14bcd7c01cda86e0afd" + resolved "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz" integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +safer-buffer@^2.0.2, safer-buffer@^2.1.0, "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0: version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sane@5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/sane/-/sane-5.0.1.tgz#ae94cb06acf5ad158242ff23f563d8cbe0ec1e4b" + resolved "https://registry.npmjs.org/sane/-/sane-5.0.1.tgz" integrity sha512-9/0CYoRz0MKKf04OMCO3Qk3RQl1PAwWAhPSQSym4ULiLpTZnrY1JoZU0IEikHu8kdk2HvKT/VwQMq/xFZ8kh1Q== dependencies: "@cnakazawa/watch" "^1.0.3" @@ -2393,53 +1755,46 @@ sane@5.0.1: sanitize-filename@^1.6.3: version "1.6.3" - resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" + resolved "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz" integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== dependencies: truncate-utf8-bytes "^1.0.0" seedrandom@^3.0.5: version "3.0.5" - resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7" + resolved "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz" integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg== semver@^5.4.1: version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== semver@^6.0.0: version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2: +semver@^7.3.2, semver@^7.3.5: version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== -semver@^7.3.5: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - serialize-error@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-8.1.0.tgz#3a069970c712f78634942ddd50fbbc0eaebe2f67" + resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz" integrity sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ== dependencies: type-fest "^0.20.2" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== sharp@^0.25.2: version "0.25.4" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.25.4.tgz#1a8e542144a07ab7e9316ab89de80182b827c363" + resolved "https://registry.npmjs.org/sharp/-/sharp-0.25.4.tgz" integrity sha512-umSzJJ1oBwIOfwFFt/fJ7JgCva9FvrEU2cbbm7u/3hSDZhXvkME8WE5qpaJqLIe2Har5msF5UG4CzYlEg5o3BQ== dependencies: color "^3.1.2" @@ -2454,29 +1809,29 @@ sharp@^0.25.2: shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7: version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== simple-concat@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== simple-get@^3.0.3: version "3.1.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.1.tgz#cc7ba77cfbe761036fbfce3d021af25fc5584d55" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz" integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA== dependencies: decompress-response "^4.2.0" @@ -2485,7 +1840,7 @@ simple-get@^3.0.3: simple-get@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz" integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== dependencies: decompress-response "^6.0.0" @@ -2494,27 +1849,19 @@ simple-get@^4.0.0: simple-swizzle@^0.2.2: version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== dependencies: is-arrayish "^0.3.1" -slice-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" - integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== - dependencies: - ansi-styles "^6.0.0" - is-fullwidth-code-point "^4.0.0" - smart-buffer@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== socks-proxy-agent@^6.0.0: version "6.2.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz" integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== dependencies: agent-base "^6.0.2" @@ -2522,28 +1869,33 @@ socks-proxy-agent@^6.0.0: socks "^2.6.2" socks@^2.6.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + version "2.8.3" + resolved "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz" + integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== dependencies: - ip "^2.0.0" + ip-address "^9.0.5" smart-buffer "^4.2.0" split2@^4.1.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz" integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + sqlite3-trans@1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz#903bd46a8cba935ce327774df62695cd1e093664" + resolved "https://registry.npmjs.org/sqlite3-trans/-/sqlite3-trans-1.3.0.tgz" integrity sha512-jZALoeqkd+6YMlTXeJ/pjBfNX3dNfV5Fnh9LUCt0cqmFbWbKiNPKvv3Ut6wkZRD9TkU7VQ1OE0aIXH4nbGQ4vg== dependencies: lodash "^4.17.15" sqlite3@5.1.6: version "5.1.6" - resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.6.tgz#1d4fbc90fe4fbd51e952e0a90fd8f6c2b9098e97" + resolved "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.6.tgz" integrity sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw== dependencies: "@mapbox/node-pre-gyp" "^1.0.0" @@ -2552,20 +1904,20 @@ sqlite3@5.1.6: optionalDependencies: node-gyp "8.x" -ssh2@1.14.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.14.0.tgz#8f68440e1b768b66942c9e4e4620b2725b3555bb" - integrity sha512-AqzD1UCqit8tbOKoj6ztDDi1ffJZ2rV2SwlgrVVrHPkV5vWqGJOVp5pmtj18PunkPJAuKQsnInyKV+/Nb2bUnA== +ssh2@1.16.0: + version "1.16.0" + resolved "https://registry.npmjs.org/ssh2/-/ssh2-1.16.0.tgz" + integrity sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg== dependencies: asn1 "^0.2.6" bcrypt-pbkdf "^1.0.2" optionalDependencies: - cpu-features "~0.0.8" - nan "^2.17.0" + cpu-features "~0.0.10" + nan "^2.20.0" sshpk@^1.18.0: version "1.18.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz" integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== dependencies: asn1 "~0.2.3" @@ -2580,24 +1932,33 @@ sshpk@^1.18.0: ssri@^8.0.0, ssri@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + resolved "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== dependencies: minipass "^3.1.1" -string-argv@0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" - integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" string-strip-html@8.4.0: version "8.4.0" - resolved "https://registry.yarnpkg.com/string-strip-html/-/string-strip-html-8.4.0.tgz#3baf7fc56ef566393077a6941e8ba13c91b43d0b" + resolved "https://registry.npmjs.org/string-strip-html/-/string-strip-html-8.4.0.tgz" integrity sha512-ajjEpk0V1G0+/RrX08I2pSj/kfsYU5wkUKWEKPQJXVQpdahZNSljiuWVqf8UgrB2E9DvFcougbl1gPwHzkuEDg== string-width@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== dependencies: code-point-at "^1.0.0" @@ -2606,92 +1967,52 @@ string-width@^1.0.1: "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^5.0.0, string-width@^5.0.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: ansi-regex "^2.0.0" strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - strip-json-comments@~2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" systeminformation@5.21.7: version "5.21.7" - resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-5.21.7.tgz#53ef75daaf5d756d015f4bb02e059126ccac74f2" + resolved "https://registry.npmjs.org/systeminformation/-/systeminformation-5.21.7.tgz" integrity sha512-K3LjnajrazTLTD61+87DFg8IXFk5ljx6nSBqB8pQLtC1UPivAjDtTYGPZ8jaBFxcesPaCOkvLRtBq+RFscrsLw== tar-fs@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz" integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== dependencies: chownr "^1.1.1" @@ -2701,7 +2022,7 @@ tar-fs@^2.0.0: tar-stream@^2.1.4: version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== dependencies: bl "^4.0.3" @@ -2712,7 +2033,7 @@ tar-stream@^2.1.4: tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: version "6.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + resolved "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz" integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== dependencies: chownr "^2.0.0" @@ -2724,7 +2045,7 @@ tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: telnet-socket@0.2.4: version "0.2.4" - resolved "https://registry.yarnpkg.com/telnet-socket/-/telnet-socket-0.2.4.tgz#b0704f25aad6ce40cb9ddc5363459088f6e5b533" + resolved "https://registry.npmjs.org/telnet-socket/-/telnet-socket-0.2.4.tgz" integrity sha512-hNNJ2HLLFbpIsnP8geP/A35MAPAgSpaCqYbN8Kmi7JSaGNeXjRIVHDCmJpi0MQLFcqSjqj39VWNJHdcx3zfcfQ== dependencies: binary-parser "1.6.2" @@ -2732,204 +2053,149 @@ telnet-socket@0.2.4: temptmp@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/temptmp/-/temptmp-1.1.0.tgz#bfbbff858d7f7d59c563fbf069758a7775ecd431" + resolved "https://registry.npmjs.org/temptmp/-/temptmp-1.1.0.tgz" integrity sha512-gHelQlePUzxRmodWL1uJ9LiwI+a7a3rkFGS9azTf4noPZgGOlx0dOPV9tZs5+QwGc4Nm8BfFxL9cfvV42GNxPQ== dependencies: del "^3.0.0" -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - thirty-two@1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/thirty-two/-/thirty-two-1.0.2.tgz#4ca2fffc02a51290d2744b9e3f557693ca6b627a" + resolved "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz" integrity sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA== through@^2.3.6: version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== tmp@^0.0.33: version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" tmpl@1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" tr46@~0.0.3: version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== truncate-utf8-bytes@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" + resolved "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz" integrity sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ== dependencies: utf8-byte-length "^1.0.1" tslib@^2.1.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + version "2.8.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-fest@^1.0.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - unique-filename@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== dependencies: unique-slug "^2.0.0" unique-slug@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== dependencies: imurmurhash "^0.1.4" universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" + version "2.0.1" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== utf8-byte-length@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" - integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA== + version "1.0.5" + resolved "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz" + integrity sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA== util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== uuid-parse@1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/uuid-parse/-/uuid-parse-1.1.0.tgz#7061c5a1384ae0e1f943c538094597e1b5f3a65b" + resolved "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz" integrity sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A== uuid@8.3.2: version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== verror@1.10.0: version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" extsprintf "^1.2.0" -vscode-json-languageservice@^4.1.6: - version "4.2.1" - resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz#94b6f471ece193bf4a1ef37f6ab5cce86d50a8b4" - integrity sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA== - dependencies: - jsonc-parser "^3.0.0" - vscode-languageserver-textdocument "^1.0.3" - vscode-languageserver-types "^3.16.0" - vscode-nls "^5.0.0" - vscode-uri "^3.0.3" - -vscode-languageserver-textdocument@^1.0.3: - version "1.0.12" - resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz#457ee04271ab38998a093c68c2342f53f6e4a631" - integrity sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA== - -vscode-languageserver-types@^3.16.0: - version "3.17.5" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz#3273676f0cf2eab40b3f44d085acbb7f08a39d8a" - integrity sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg== - -vscode-nls@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.2.0.tgz#3cb6893dd9bd695244d8a024bdf746eea665cc3f" - integrity sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng== - -vscode-uri@^3.0.3: - version "3.0.8" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.8.tgz#1770938d3e72588659a172d0fd4642780083ff9f" - integrity sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw== - walker@~1.0.5: version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: makeerror "1.0.12" wcwidth@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: defaults "^1.0.3" webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" @@ -2937,69 +2203,50 @@ whatwg-url@^5.0.0: which-pm-runs@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.1.0.tgz#35ccf7b1a0fce87bd8b92a478c9d045785d3bf35" + resolved "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz" integrity sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA== which@^2.0.1, which@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" wide-align@^1.1.0, wide-align@^1.1.2, wide-align@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: string-width "^1.0.2 || 2 || 3 || 4" wrap-ansi@^6.0.1: version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== ws@8.18.0: version "8.18.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + resolved "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz" integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" - integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== - yazl@^2.5.1: version "2.5.1" - resolved "https://registry.yarnpkg.com/yazl/-/yazl-2.5.1.tgz#a3d65d3dd659a5b0937850e8609f22fffa2b5c35" + resolved "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz" integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw== dependencies: buffer-crc32 "~0.2.3" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==

    + + @ ${remoteActor.preferredUsername} + +${msg} +

    q$8WDOF-?2jd68_=l^^_Z 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 z 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 Wl|cpvuY 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