verdaccio
Version:
A lightweight private npm proxy registry
190 lines (188 loc) • 22.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.STORAGE = exports.PACKAGE_ACCESS = exports.WEB_TITLE = exports.MODULE_NOT_FOUND = exports.DEFAULT_NO_README = exports.APP_ERROR = exports.API_ERROR = exports.SUPPORT_ERRORS = exports.API_MESSAGE = exports.HTTP_STATUS = exports.ROLES = exports.DEFAULT_UPLINK = exports.DEFAULT_REGISTRY = exports.TOKEN_BEARER = exports.TOKEN_BASIC = exports.ERROR_CODE = exports.HEADER_TYPE = exports.CHARACTER_ENCODING = exports.HEADERS = exports.csrPem = exports.certPem = exports.keyPem = exports.DEFAULT_USER = exports.DEFAULT_MIN_LIMIT_PASSWORD = exports.USERS = exports.LATEST = exports.DIST_TAGS = exports.TIME_EXPIRATION_7D = exports.TIME_EXPIRATION_24H = exports.DEFAULT_DOMAIN = exports.DEFAULT_PROTOCOL = exports.DEFAULT_PORT = void 0;
/**
* @prettier
*/
// @flow
const DEFAULT_PORT = '4873';
exports.DEFAULT_PORT = DEFAULT_PORT;
const DEFAULT_PROTOCOL = 'http';
exports.DEFAULT_PROTOCOL = DEFAULT_PROTOCOL;
const DEFAULT_DOMAIN = 'localhost';
exports.DEFAULT_DOMAIN = DEFAULT_DOMAIN;
const TIME_EXPIRATION_24H = '24h';
exports.TIME_EXPIRATION_24H = TIME_EXPIRATION_24H;
const TIME_EXPIRATION_7D = '7d';
exports.TIME_EXPIRATION_7D = TIME_EXPIRATION_7D;
const DIST_TAGS = 'dist-tags';
exports.DIST_TAGS = DIST_TAGS;
const LATEST = 'latest';
exports.LATEST = LATEST;
const USERS = 'users';
exports.USERS = USERS;
const DEFAULT_MIN_LIMIT_PASSWORD = 3;
exports.DEFAULT_MIN_LIMIT_PASSWORD = DEFAULT_MIN_LIMIT_PASSWORD;
const DEFAULT_USER = 'Anonymous';
exports.DEFAULT_USER = DEFAULT_USER;
const keyPem = 'verdaccio-key.pem';
exports.keyPem = keyPem;
const certPem = 'verdaccio-cert.pem';
exports.certPem = certPem;
const csrPem = 'verdaccio-csr.pem';
exports.csrPem = csrPem;
const HEADERS = {
ACCEPT: 'Accept',
ACCEPT_ENCODING: 'Accept-Encoding',
USER_AGENT: 'User-Agent',
JSON: 'application/json',
CONTENT_TYPE: 'Content-type',
CONTENT_LENGTH: 'content-length',
TEXT_PLAIN: 'text/plain',
TEXT_HTML: 'text/html',
AUTHORIZATION: 'authorization',
FORWARDED_PROTO: 'X-Forwarded-Proto',
FRAMES_OPTIONS: 'X-Frame-Options',
CSP: 'Content-Security-Policy',
CTO: 'X-Content-Type-Options',
XSS: 'X-XSS-Protection',
ETAG: 'ETag',
JSON_CHARSET: 'application/json; charset=utf-8',
OCTET_STREAM: 'application/octet-stream; charset=utf-8',
TEXT_CHARSET: 'text/plain; charset=utf-8',
WWW_AUTH: 'WWW-Authenticate',
GZIP: 'gzip'
};
exports.HEADERS = HEADERS;
const CHARACTER_ENCODING = {
UTF8: 'utf8'
};
exports.CHARACTER_ENCODING = CHARACTER_ENCODING;
const HEADER_TYPE = {
CONTENT_ENCODING: 'content-encoding',
CONTENT_TYPE: 'content-type',
CONTENT_LENGTH: 'content-length',
ACCEPT_ENCODING: 'accept-encoding'
};
exports.HEADER_TYPE = HEADER_TYPE;
const ERROR_CODE = {
token_required: 'token is required'
};
exports.ERROR_CODE = ERROR_CODE;
const TOKEN_BASIC = 'Basic';
exports.TOKEN_BASIC = TOKEN_BASIC;
const TOKEN_BEARER = 'Bearer';
exports.TOKEN_BEARER = TOKEN_BEARER;
const DEFAULT_REGISTRY = 'https://registry.npmjs.org';
exports.DEFAULT_REGISTRY = DEFAULT_REGISTRY;
const DEFAULT_UPLINK = 'npmjs';
exports.DEFAULT_UPLINK = DEFAULT_UPLINK;
const ROLES = {
$ALL: '$all',
ALL: 'all',
$AUTH: '$authenticated',
$ANONYMOUS: '$anonymous',
DEPRECATED_ALL: '@all',
DEPRECATED_AUTH: '@authenticated',
DEPRECATED_ANONYMOUS: '@anonymous'
};
exports.ROLES = ROLES;
const HTTP_STATUS = {
OK: 200,
CREATED: 201,
MULTIPLE_CHOICES: 300,
NOT_MODIFIED: 304,
BAD_REQUEST: 400,
UNAUTHORIZED: 401,
FORBIDDEN: 403,
NOT_FOUND: 404,
CONFLICT: 409,
UNSUPPORTED_MEDIA: 415,
BAD_DATA: 422,
INTERNAL_ERROR: 500,
NOT_IMPLEMENTED: 501,
SERVICE_UNAVAILABLE: 503,
LOOP_DETECTED: 508
};
exports.HTTP_STATUS = HTTP_STATUS;
const API_MESSAGE = {
PKG_CREATED: 'created new package',
PKG_CHANGED: 'package changed',
PKG_REMOVED: 'package removed',
PKG_PUBLISHED: 'package published',
TARBALL_UPLOADED: 'tarball uploaded successfully',
TARBALL_REMOVED: 'tarball removed',
TAG_UPDATED: 'tags updated',
TAG_REMOVED: 'tag removed',
TAG_ADDED: 'package tagged',
LOGGED_OUT: 'Logged out'
};
exports.API_MESSAGE = API_MESSAGE;
const SUPPORT_ERRORS = {
PLUGIN_MISSING_INTERFACE: 'the plugin does not provide implementation of the requested feature',
TFA_DISABLED: 'the two-factor authentication is not yet supported',
STORAGE_NOT_IMPLEMENT: 'the storage does not support token saving',
PARAMETERS_NOT_VALID: 'the parameters are not valid'
};
exports.SUPPORT_ERRORS = SUPPORT_ERRORS;
const API_ERROR = {
PASSWORD_SHORT: (passLength = DEFAULT_MIN_LIMIT_PASSWORD) => `The provided password is too short. Please pick a password longer than ${passLength} characters.`,
MUST_BE_LOGGED: 'You must be logged in to publish packages.',
PLUGIN_ERROR: 'bug in the auth plugin system',
CONFIG_BAD_FORMAT: 'config file must be an object',
BAD_USERNAME_PASSWORD: 'bad username/password, access denied',
NO_PACKAGE: 'no such package available',
PACKAGE_CANNOT_BE_ADDED: 'this package cannot be added',
BAD_DATA: 'bad data',
NOT_ALLOWED: 'not allowed to access package',
NOT_ALLOWED_PUBLISH: 'not allowed to publish package',
INTERNAL_SERVER_ERROR: 'internal server error',
UNKNOWN_ERROR: 'unknown error',
NOT_PACKAGE_UPLINK: 'package does not exist on uplink',
UPLINK_OFFLINE_PUBLISH: 'one of the uplinks is down, refuse to publish',
UPLINK_OFFLINE: 'uplink is offline',
CONTENT_MISMATCH: 'content length mismatch',
NOT_FILE_UPLINK: "file doesn't exist on uplink",
MAX_USERS_REACHED: 'maximum amount of users reached',
VERSION_NOT_EXIST: "this version doesn't exist",
FILE_NOT_FOUND: 'File not found',
UNSUPORTED_REGISTRY_CALL: 'unsupported registry call',
BAD_STATUS_CODE: 'bad status code',
PACKAGE_EXIST: 'this package is already present',
BAD_AUTH_HEADER: 'bad authorization header',
WEB_DISABLED: 'Web interface is disabled in the config file',
DEPRECATED_BASIC_HEADER: 'basic authentication is deprecated, please use JWT instead',
BAD_FORMAT_USER_GROUP: 'user groups is different than an array',
RESOURCE_UNAVAILABLE: 'resource unavailable',
BAD_PACKAGE_DATA: 'bad incoming package data',
USERNAME_PASSWORD_REQUIRED: 'username and password is required',
USERNAME_ALREADY_REGISTERED: 'username is already registered'
};
exports.API_ERROR = API_ERROR;
const APP_ERROR = {
CONFIG_NOT_VALID: 'CONFIG: it does not look like a valid config file',
PROFILE_ERROR: 'profile unexpected error',
PASSWORD_VALIDATION: 'not valid password'
};
exports.APP_ERROR = APP_ERROR;
const DEFAULT_NO_README = 'ERROR: No README data found!';
exports.DEFAULT_NO_README = DEFAULT_NO_README;
const MODULE_NOT_FOUND = 'MODULE_NOT_FOUND';
exports.MODULE_NOT_FOUND = MODULE_NOT_FOUND;
const WEB_TITLE = 'Verdaccio';
exports.WEB_TITLE = WEB_TITLE;
const PACKAGE_ACCESS = {
SCOPE: '@*/*',
ALL: '**'
};
exports.PACKAGE_ACCESS = PACKAGE_ACCESS;
const STORAGE = {
PACKAGE_FILE_NAME: 'package.json',
FILE_EXIST_ERROR: 'EEXISTS',
NO_SUCH_FILE_ERROR: 'ENOENT',
DEFAULT_REVISION: '0-0000000000000000'
};
exports.STORAGE = STORAGE;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbIkRFRkFVTFRfUE9SVCIsIkRFRkFVTFRfUFJPVE9DT0wiLCJERUZBVUxUX0RPTUFJTiIsIlRJTUVfRVhQSVJBVElPTl8yNEgiLCJUSU1FX0VYUElSQVRJT05fN0QiLCJESVNUX1RBR1MiLCJMQVRFU1QiLCJVU0VSUyIsIkRFRkFVTFRfTUlOX0xJTUlUX1BBU1NXT1JEIiwiREVGQVVMVF9VU0VSIiwia2V5UGVtIiwiY2VydFBlbSIsImNzclBlbSIsIkhFQURFUlMiLCJBQ0NFUFQiLCJBQ0NFUFRfRU5DT0RJTkciLCJVU0VSX0FHRU5UIiwiSlNPTiIsIkNPTlRFTlRfVFlQRSIsIkNPTlRFTlRfTEVOR1RIIiwiVEVYVF9QTEFJTiIsIlRFWFRfSFRNTCIsIkFVVEhPUklaQVRJT04iLCJGT1JXQVJERURfUFJPVE8iLCJGUkFNRVNfT1BUSU9OUyIsIkNTUCIsIkNUTyIsIlhTUyIsIkVUQUciLCJKU09OX0NIQVJTRVQiLCJPQ1RFVF9TVFJFQU0iLCJURVhUX0NIQVJTRVQiLCJXV1dfQVVUSCIsIkdaSVAiLCJDSEFSQUNURVJfRU5DT0RJTkciLCJVVEY4IiwiSEVBREVSX1RZUEUiLCJDT05URU5UX0VOQ09ESU5HIiwiRVJST1JfQ09ERSIsInRva2VuX3JlcXVpcmVkIiwiVE9LRU5fQkFTSUMiLCJUT0tFTl9CRUFSRVIiLCJERUZBVUxUX1JFR0lTVFJZIiwiREVGQVVMVF9VUExJTksiLCJST0xFUyIsIiRBTEwiLCJBTEwiLCIkQVVUSCIsIiRBTk9OWU1PVVMiLCJERVBSRUNBVEVEX0FMTCIsIkRFUFJFQ0FURURfQVVUSCIsIkRFUFJFQ0FURURfQU5PTllNT1VTIiwiSFRUUF9TVEFUVVMiLCJPSyIsIkNSRUFURUQiLCJNVUxUSVBMRV9DSE9JQ0VTIiwiTk9UX01PRElGSUVEIiwiQkFEX1JFUVVFU1QiLCJVTkFVVEhPUklaRUQiLCJGT1JCSURERU4iLCJOT1RfRk9VTkQiLCJDT05GTElDVCIsIlVOU1VQUE9SVEVEX01FRElBIiwiQkFEX0RBVEEiLCJJTlRFUk5BTF9FUlJPUiIsIk5PVF9JTVBMRU1FTlRFRCIsIlNFUlZJQ0VfVU5BVkFJTEFCTEUiLCJMT09QX0RFVEVDVEVEIiwiQVBJX01FU1NBR0UiLCJQS0dfQ1JFQVRFRCIsIlBLR19DSEFOR0VEIiwiUEtHX1JFTU9WRUQiLCJQS0dfUFVCTElTSEVEIiwiVEFSQkFMTF9VUExPQURFRCIsIlRBUkJBTExfUkVNT1ZFRCIsIlRBR19VUERBVEVEIiwiVEFHX1JFTU9WRUQiLCJUQUdfQURERUQiLCJMT0dHRURfT1VUIiwiU1VQUE9SVF9FUlJPUlMiLCJQTFVHSU5fTUlTU0lOR19JTlRFUkZBQ0UiLCJURkFfRElTQUJMRUQiLCJTVE9SQUdFX05PVF9JTVBMRU1FTlQiLCJQQVJBTUVURVJTX05PVF9WQUxJRCIsIkFQSV9FUlJPUiIsIlBBU1NXT1JEX1NIT1JUIiwicGFzc0xlbmd0aCIsIk1VU1RfQkVfTE9HR0VEIiwiUExVR0lOX0VSUk9SIiwiQ09ORklHX0JBRF9GT1JNQVQiLCJCQURfVVNFUk5BTUVfUEFTU1dPUkQiLCJOT19QQUNLQUdFIiwiUEFDS0FHRV9DQU5OT1RfQkVfQURERUQiLCJOT1RfQUxMT1dFRCIsIk5PVF9BTExPV0VEX1BVQkxJU0giLCJJTlRFUk5BTF9TRVJWRVJfRVJST1IiLCJVTktOT1dOX0VSUk9SIiwiTk9UX1BBQ0tBR0VfVVBMSU5LIiwiVVBMSU5LX09GRkxJTkVfUFVCTElTSCIsIlVQTElOS19PRkZMSU5FIiwiQ09OVEVOVF9NSVNNQVRDSCIsIk5PVF9GSUxFX1VQTElOSyIsIk1BWF9VU0VSU19SRUFDSEVEIiwiVkVSU0lPTl9OT1RfRVhJU1QiLCJGSUxFX05PVF9GT1VORCIsIlVOU1VQT1JURURfUkVHSVNUUllfQ0FMTCIsIkJBRF9TVEFUVVNfQ09ERSIsIlBBQ0tBR0VfRVhJU1QiLCJCQURfQVVUSF9IRUFERVIiLCJXRUJfRElTQUJMRUQiLCJERVBSRUNBVEVEX0JBU0lDX0hFQURFUiIsIkJBRF9GT1JNQVRfVVNFUl9HUk9VUCIsIlJFU09VUkNFX1VOQVZBSUxBQkxFIiwiQkFEX1BBQ0tBR0VfREFUQSIsIlVTRVJOQU1FX1BBU1NXT1JEX1JFUVVJUkVEIiwiVVNFUk5BTUVfQUxSRUFEWV9SRUdJU1RFUkVEIiwiQVBQX0VSUk9SIiwiQ09ORklHX05PVF9WQUxJRCIsIlBST0ZJTEVfRVJST1IiLCJQQVNTV09SRF9WQUxJREFUSU9OIiwiREVGQVVMVF9OT19SRUFETUUiLCJNT0RVTEVfTk9UX0ZPVU5EIiwiV0VCX1RJVExFIiwiUEFDS0FHRV9BQ0NFU1MiLCJTQ09QRSIsIlNUT1JBR0UiLCJQQUNLQUdFX0ZJTEVfTkFNRSIsIkZJTEVfRVhJU1RfRVJST1IiLCJOT19TVUNIX0ZJTEVfRVJST1IiLCJERUZBVUxUX1JFVklTSU9OIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFFTyxNQUFNQSxZQUFZLEdBQUcsTUFBckI7O0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsTUFBekI7O0FBQ0EsTUFBTUMsY0FBYyxHQUFHLFdBQXZCOztBQUNBLE1BQU1DLG1CQUFtQixHQUFHLEtBQTVCOztBQUNBLE1BQU1DLGtCQUFrQixHQUFHLElBQTNCOztBQUNBLE1BQU1DLFNBQVMsR0FBRyxXQUFsQjs7QUFDQSxNQUFNQyxNQUFNLEdBQUcsUUFBZjs7QUFDQSxNQUFNQyxLQUFLLEdBQUcsT0FBZDs7QUFDQSxNQUFNQywwQkFBMEIsR0FBRyxDQUFuQzs7QUFDQSxNQUFNQyxZQUFZLEdBQUcsV0FBckI7O0FBRUEsTUFBTUMsTUFBTSxHQUFHLG1CQUFmOztBQUNBLE1BQU1DLE9BQU8sR0FBRyxvQkFBaEI7O0FBQ0EsTUFBTUMsTUFBTSxHQUFHLG1CQUFmOztBQUVBLE1BQU1DLE9BQU8sR0FBRztBQUNyQkMsRUFBQUEsTUFBTSxFQUFFLFFBRGE7QUFFckJDLEVBQUFBLGVBQWUsRUFBRSxpQkFGSTtBQUdyQkMsRUFBQUEsVUFBVSxFQUFFLFlBSFM7QUFJckJDLEVBQUFBLElBQUksRUFBRSxrQkFKZTtBQUtyQkMsRUFBQUEsWUFBWSxF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QnZCQyxFQUFBQSxlQUFlLEVBQUUsaUJBdkJNO0FBd0J2QkMsRUFBQUEsYUFBYSxFQUFFLGlDQXhCUTtBQXlCdkJDLEVBQUFBLGVBQWUsRUFBRSwwQkF6Qk07QUEwQnZCQyxFQUFBQSxZQUFZLEVBQUUsOENBMUJTO0FBMkJ2QkMsRUFBQUEsdUJBQXVCLEVBQUUsNERBM0JGO0FBNEJ2QkMsRUFBQUEscUJBQXFCLEVBQUUsd0NBNUJBO0FBNkJ2QkMsRUFBQUEsb0JBQW9CLEVBQUUsc0JBN0JDO0FBOEJ2QkMsRUFBQUEsZ0JBQWdCLEVBQUUsMkJBOUJLO0FBK0J2QkMsRUFBQUEsMEJBQTBCLEVBQUUsbUNBL0JMO0FBZ0N2QkMsRUFBQUEsMkJBQTJCLEVBQUU7QUFoQ04sQ0FBbEI7O0FBbUNBLE1BQU1DLFNBQVMsR0FBRztBQUN2QkMsRUFBQUEsZ0JBQWdCLEVBQUUsbURBREs7QUFFdkJDLEVBQUFBLGFBQWEsRUFBRSwwQkFGUTtBQUd2QkMsRUFBQUEsbUJBQW1CLEVBQUU7QUFIRSxDQUFsQjs7QUFNQSxNQUFNQyxpQkFBaUIsR0FBRyw4QkFBMUI7O0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsa0JBQXpCOztBQUVBLE1BQU1DLFNBQVMsR0FBRyxXQUFsQjs7QUFFQSxNQUFNQyxjQUFjLEdBQUc7QUFDNUJDLEVBQUFBLEtBQUssRUFBRSxNQURxQjtBQUU1QjlFLEVBQUFBLEdBQUcsRUFBRTtBQUZ1QixDQUF2Qjs7QUFLQSxNQUFNK0UsT0FBTyxHQUFHO0FBQ3JCQyxFQUFBQSxpQkFBaUIsRUFBRSxjQURFO0FBRXJCQyxFQUFBQSxnQkFBZ0IsRUFBRSxTQUZHO0FBR3JCQyxFQUFBQSxrQkFBa0IsRUFBRSxRQUhDO0FBSXJCQyxFQUFBQSxnQkFBZ0IsRUFBRTtBQUpHLENBQWhCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuXG4vLyBAZmxvd1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9QT1JUID0gJzQ4NzMnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUFJPVE9DT0wgPSAnaHR0cCc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9ET01BSU4gPSAnbG9jYWxob3N0JztcbmV4cG9ydCBjb25zdCBUSU1FX0VYUElSQVRJT05fMjRIID0gJzI0aCc7XG5leHBvcnQgY29uc3QgVElNRV9FWFBJUkFUSU9OXzdEID0gJzdkJztcbmV4cG9ydCBjb25zdCBESVNUX1RBR1MgPSAnZGlzdC10YWdzJztcbmV4cG9ydCBjb25zdCBMQVRFU1QgPSAnbGF0ZXN0JztcbmV4cG9ydCBjb25zdCBVU0VSUyA9ICd1c2Vycyc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9NSU5fTElNSVRfUEFTU1dPUkQgPSAzO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVVNFUiA9ICdBbm9ueW1vdXMnO1xuXG5leHBvcnQgY29uc3Qga2V5UGVtID0gJ3ZlcmRhY2Npby1rZXkucGVtJztcbmV4cG9ydCBjb25zdCBjZXJ0UGVtID0gJ3ZlcmRhY2Npby1jZXJ0LnBlbSc7XG5leHBvcnQgY29uc3QgY3NyUGVtID0gJ3ZlcmRhY2Npby1jc3IucGVtJztcblxuZXhwb3J0IGNvbnN0IEhFQURFUlMgPSB7XG4gIEFDQ0VQVDogJ0FjY2VwdCcsXG4gIEFDQ0VQVF9FTkNPRElORzogJ0FjY2VwdC1FbmNvZGluZycsXG4gIFVTRVJfQUdFTlQ6ICdVc2VyLUFnZW50JyxcbiAgSlNPTjogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICBDT05URU5UX1RZUEU6ICdDb250ZW50LXR5cGUnLFxuICBDT05URU5UX0xFTkdUSDogJ2NvbnRlbnQtbGVuZ3RoJyxcbiAgVEVYVF9QTEFJTjogJ3RleHQvcGxhaW4nLFxuICBURVhUX0hUTUw6ICd0ZXh0L2h0bWwnLFxuICBBVVRIT1JJWkFUSU9OOiAnYXV0aG9yaXphdGlvbicsXG4gIEZPUldBUkRFRF9QUk9UTzogJ1gtRm9yd2FyZGVkLVByb3RvJyxcbiAgRlJBTUVTX09QVElPTlM6ICdYLUZyYW1lLU9wdGlvbnMnLFxuICBDU1A6ICdDb250ZW50LVNlY3VyaXR5LVBvbGljeScsXG4gIENUTzogJ1gtQ29udGVudC1UeXBlLU9wdGlvbnMnLFxuICBYU1M6ICdYLVhTUy1Qcm90ZWN0aW9uJyxcbiAgRVRBRzogJ0VUYWcnLFxuICBKU09OX0NIQVJTRVQ6ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04JyxcbiAgT0NURVRfU1RSRUFNOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtOyBjaGFyc2V0PXV0Zi04JyxcbiAgVEVYVF9DSEFSU0VUOiAndGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCcsXG4gIFdXV19BVVRIOiAnV1dXLUF1dGhlbnRpY2F0ZScsXG4gIEdaSVA6ICdnemlwJ1xufTtcblxuZXhwb3J0IGNvbnN0IENIQVJBQ1RFUl9FTkNPRElORyA9IHtcbiAgVVRGODogJ3V0ZjgnXG59O1xuXG5leHBvcnQgY29uc3QgSEVBREVSX1RZUEUgPSB7XG4gIENPTlRFTlRfRU5DT0RJTkc6ICdjb250ZW50LWVuY29kaW5nJyxcbiAgQ09OVEVOVF9UWVBFOiAnY29udGVudC10eXBlJyxcbiAgQ09OVEVOVF9MRU5HVEg6ICdjb250ZW50LWxlbmd0aCcsXG4gIEFDQ0VQVF9FTkNPRElORzogJ2FjY2VwdC1lbmNvZGluZydcbn07XG5cbmV4cG9ydCBjb25zdCBFUlJPUl9DT0RFID0ge1xuICB0b2tlbl9yZXF1aXJlZDogJ3Rva2VuIGlzIHJlcXVpcmVkJ1xufTtcblxuZXhwb3J0IGNvbnN0IFRPS0VOX0JBU0lDID0gJ0Jhc2ljJztcbmV4cG9ydCBjb25zdCBUT0tFTl9CRUFSRVIgPSAnQmVhcmVyJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFR0lTVFJZID0gJ2h0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX1VQTElOSyA9ICducG1qcyc7XG5cbmV4cG9ydCBjb25zdCBST0xFUyA9IHtcbiAgJEFMTDogJyRhbGwnLFxuICBBTEw6ICdhbGwnLFxuICAkQVVUSDogJyRhdXRoZW50aWNhdGVkJyxcbiAgJEFOT05ZTU9VUzogJyRhbm9ueW1vdXMnLFxuICBERVBSRUNBVEVEX0FMTDogJ0BhbGwnLFxuICBERVBSRUNBVEVEX0FVVEg6ICdAYXV0aGVudGljYXRlZCcsXG4gIERFUFJFQ0FURURfQU5PTllNT1VTOiAnQGFub255bW91cydcbn07XG5cbmV4cG9ydCBjb25zdCBIVFRQX1NUQVRVUyA9IHtcbiAgT0s6IDIwMCxcbiAgQ1JFQVRFRDogMjAxLFxuICBNVUxUSVBMRV9DSE9JQ0VTOiAzMDAsXG4gIE5PVF9NT0RJRklFRDogMzA0LFxuICBCQURfUkVRVUVTVDogNDAwLFxuICBVTkFVVEhPUklaRUQ6IDQwMSxcbiAgRk9SQklEREVOOiA0MDMsXG4gIE5PVF9GT1VORDogNDA0LFxuICBDT05GTElDVDogNDA5LFxuICBVTlNVUFBPUlRFRF9NRURJQTogNDE1LFxuICBCQURfREFUQTogNDIyLFxuICBJTlRFUk5BTF9FUlJPUjogNTAwLFxuICBOT1RfSU1QTEVNRU5URUQ6IDUwMSxcbiAgU0VSVklDRV9VTkFWQUlMQUJMRTogNTAzLFxuICBMT09QX0RFVEVDVEVEOiA1MDhcbn07XG5cbmV4cG9ydCBjb25zdCBBUElfTUVTU0FHRSA9IHtcbiAgUEtHX0NSRUFURUQ6ICdjcmVhdGVkIG5ldyBwYWNrYWdlJyxcbiAgUEtHX0NIQU5HRUQ6ICdwYWNrYWdlIGNoYW5nZWQnLFxuICBQS0dfUkVNT1ZFRDogJ3BhY2thZ2UgcmVtb3ZlZCcsXG4gIFBLR19QVUJMSVNIRUQ6ICdwYWNrYWdlIHB1Ymxpc2hlZCcsXG4gIFRBUkJBTExfVVBMT0FERUQ6ICd0YXJiYWxsIHVwbG9hZGVkIHN1Y2Nlc3NmdWxseScsXG4gIFRBUkJBTExfUkVNT1ZFRDogJ3RhcmJhbGwgcmVtb3ZlZCcsXG4gIFRBR19VUERBVEVEOiAndGFncyB1cGRhdGVkJyxcbiAgVEFHX1JFTU9WRUQ6ICd0YWcgcmVtb3ZlZCcsXG4gIFRBR19BRERFRDogJ3BhY2thZ2UgdGFnZ2VkJyxcbiAgTE9HR0VEX09VVDogJ0xvZ2dlZCBvdXQnXG59O1xuXG5leHBvcnQgY29uc3QgU1VQUE9SVF9FUlJPUlMgPSB7XG4gIFBMVUdJTl9NSVNTSU5HX0lOVEVSRkFDRTogJ3RoZSBwbHVnaW4gZG9lcyBub3QgcHJvdmlkZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcmVxdWVzdGVkIGZlYXR1cmUnLFxuICBURkFfRElTQUJMRUQ6ICd0aGUgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiBpcyBub3QgeWV0IHN1cHBvcnRlZCcsXG4gIFNUT1JBR0VfTk9UX0lNUExFTUVOVDogJ3RoZSBzdG9yYWdlIGRvZXMgbm90IHN1cHBvcnQgdG9rZW4gc2F2aW5nJyxcbiAgUEFSQU1FVEVSU19OT1RfVkFMSUQ6ICd0aGUgcGFyYW1ldGVycyBhcmUgbm90IHZhbGlkJ1xufTtcblxuZXhwb3J0IGNvbnN0IEFQSV9FUlJPUiA9IHtcbiAgUEFTU1dPUkRfU0hPUlQ6IChwYXNzTGVuZ3RoOiBudW1iZXIgPSBERUZBVUxUX01JTl9MSU1JVF9QQVNTV09SRCkgPT5cbiAgICBgVGhlIHByb3ZpZGVkIHBhc3N3b3JkIGlzIHRvbyBzaG9ydC4gUGxlYXNlIHBpY2sgYSBwYXNzd29yZCBsb25nZXIgdGhhbiAke3Bhc3NMZW5ndGh9IGNoYXJhY3RlcnMuYCxcbiAgTVVTVF9CRV9MT0dHRUQ6ICdZb3UgbXVzdCBiZSBsb2dnZWQgaW4gdG8gcHVibGlzaCBwYWNrYWdlcy4nLFxuICBQTFVHSU5fRVJST1I6ICdidWcgaW4gdGhlIGF1dGggcGx1Z2luIHN5c3RlbScsXG4gIENPTkZJR19CQURfRk9STUFUOiAnY29uZmlnIGZpbGUgbXVzdCBiZSBhbiBvYmplY3QnLFxuICBCQURfVVNFUk5BTUVfUEFTU1dPUkQ6ICdiYWQgdXNlcm5hbWUvcGFzc3dvcmQsIGFjY2VzcyBkZW5pZWQnLFxuICBOT19QQUNLQUdFOiAnbm8gc3VjaCBwYWNrYWdlIGF2YWlsYWJsZScsXG4gIFBBQ0tBR0VfQ0FOTk9UX0JFX0FEREVEOiAndGhpcyBwYWNrYWdlIGNhbm5vdCBiZSBhZGRlZCcsXG4gIEJBRF9EQVRBOiAnYmFkIGRhdGEnLFxuICBOT1RfQUxMT1dFRDogJ25vdCBhbGxvd2VkIHRvIGFjY2VzcyBwYWNrYWdlJyxcbiAgTk9UX0FMTE9XRURfUFVCTElTSDogJ25vdCBhbGxvd2VkIHRvIHB1Ymxpc2ggcGFja2FnZScsXG4gIElOVEVSTkFMX1NFUlZFUl9FUlJPUjogJ2ludGVybmFsIHNlcnZlciBlcnJvcicsXG4gIFVOS05PV05fRVJST1I6ICd1bmtub3duIGVycm9yJyxcbiAgTk9UX1BBQ0tBR0VfVVBMSU5LOiAncGFja2FnZSBkb2VzIG5vdCBleGlzdCBvbiB1cGxpbmsnLFxuICBVUExJTktfT0ZGTElORV9QVUJMSVNIOiAnb25lIG9mIHRoZSB1cGxpbmtzIGlzIGRvd24sIHJlZnVzZSB0byBwdWJsaXNoJyxcbiAgVVBMSU5LX09GRkxJTkU6ICd1cGxpbmsgaXMgb2ZmbGluZScsXG4gIENPTlRFTlRfTUlTTUFUQ0g6ICdjb250ZW50IGxlbmd0aCBtaXNtYXRjaCcsXG4gIE5PVF9GSUxFX1VQTElOSzogXCJmaWxlIGRvZXNuJ3QgZXhpc3Qgb24gdXBsaW5rXCIsXG4gIE1BWF9VU0VSU19SRUFDSEVEOiAnbWF4aW11bSBhbW91bnQgb2YgdXNlcnMgcmVhY2hlZCcsXG4gIFZFUlNJT05fTk9UX0VYSVNUOiBcInRoaXMgdmVyc2lvbiBkb2Vzbid0IGV4aXN0XCIsXG4gIEZJTEVfTk9UX0ZPVU5EOiAnRmlsZSBub3QgZm91bmQnLFxuICBVTlNVUE9SVEVEX1JFR0lTVFJZX0NBTEw6ICd1bnN1cHBvcnRlZCByZWdpc3RyeSBjYWxsJyxcbiAgQkFEX1NUQVRVU19DT0RFOiAnYmFkIHN0YXR1cyBjb2RlJyxcbiAgUEFDS0FHRV9FWElTVDogJ3RoaXMgcGFja2FnZSBpcyBhbHJlYWR5IHByZXNlbnQnLFxuICBCQURfQVVUSF9IRUFERVI6ICdiYWQgYXV0aG9yaXphdGlvbiBoZWFkZXInLFxuICBXRUJfRElTQUJMRUQ6ICdXZWIgaW50ZXJmYWNlIGlzIGRpc2FibGVkIGluIHRoZSBjb25maWcgZmlsZScsXG4gIERFUFJFQ0FURURfQkFTSUNfSEVBREVSOiAnYmFzaWMgYXV0aGVudGljYXRpb24gaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBKV1QgaW5zdGVhZCcsXG4gIEJBRF9GT1JNQVRfVVNFUl9HUk9VUDogJ3VzZXIgZ3JvdXBzIGlzIGRpZmZlcmVudCB0aGFuIGFuIGFycmF5JyxcbiAgUkVTT1VSQ0VfVU5BVkFJTEFCTEU6ICdyZXNvdXJjZSB1bmF2YWlsYWJsZScsXG4gIEJBRF9QQUNLQUdFX0RBVEE6ICdiYWQgaW5jb21pbmcgcGFja2FnZSBkYXRhJyxcbiAgVVNFUk5BTUVfUEFTU1dPUkRfUkVRVUlSRUQ6ICd1c2VybmFtZSBhbmQgcGFzc3dvcmQgaXMgcmVxdWlyZWQnLFxuICBVU0VSTkFNRV9BTFJFQURZX1JFR0lTVEVSRUQ6ICd1c2VybmFtZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQnXG59O1xuXG5leHBvcnQgY29uc3QgQVBQX0VSUk9SID0ge1xuICBDT05GSUdfTk9UX1ZBTElEOiAnQ09ORklHOiBpdCBkb2VzIG5vdCBsb29rIGxpa2UgYSB2YWxpZCBjb25maWcgZmlsZScsXG4gIFBST0ZJTEVfRVJST1I6ICdwcm9maWxlIHVuZXhwZWN0ZWQgZXJyb3InLFxuICBQQVNTV09SRF9WQUxJREFUSU9OOiAnbm90IHZhbGlkIHBhc3N3b3JkJ1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTk9fUkVBRE1FID0gJ0VSUk9SOiBObyBSRUFETUUgZGF0YSBmb3VuZCEnO1xuZXhwb3J0IGNvbnN0IE1PRFVMRV9OT1RfRk9VTkQgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cbmV4cG9ydCBjb25zdCBXRUJfVElUTEUgPSAnVmVyZGFjY2lvJztcblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfQUNDRVNTID0ge1xuICBTQ09QRTogJ0AqLyonLFxuICBBTEw6ICcqKidcbn07XG5cbmV4cG9ydCBjb25zdCBTVE9SQUdFID0ge1xuICBQQUNLQUdFX0ZJTEVfTkFNRTogJ3BhY2thZ2UuanNvbicsXG4gIEZJTEVfRVhJU1RfRVJST1I6ICdFRVhJU1RTJyxcbiAgTk9fU1VDSF9GSUxFX0VSUk9SOiAnRU5PRU5UJyxcbiAgREVGQVVMVF9SRVZJU0lPTjogJzAtMDAwMDAwMDAwMDAwMDAwMCdcbn07XG4iXX0=