UNPKG

@meteor-community/meteor-desktop

Version:
232 lines (215 loc) 32.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _path = _interopRequireDefault(require("path")); var _os = _interopRequireDefault(require("os")); var _assignIn = _interopRequireDefault(require("lodash/assignIn")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const { join } = _path.default; /** * @class * @property {packagePaths} paths */ class Env { constructor(input, output, options) { this.options = options; if (this.isProductionBuild()) { process.env.NODE_ENV = 'production'; } this.sys = { platform: process.platform, arch: process.arch }; // Operational System. this.os = { isWindows: process.platform === 'win32', isLinux: process.platform === 'linux', isOsx: process.platform === 'darwin' }; this.stdio = 'inherit'; this.os.name = this.sys.platform === 'darwin' ? 'osx' : this.sys.platform; this.os.home = process.env[this.os.isWindows ? 'USERPROFILE' : 'HOME']; this.os.tmp = _os.default.tmpdir(); /** @type {packagePaths} */ this.paths = {}; /** @type {meteorDesktopPaths} */ this.paths.meteorDesktop = { root: _path.default.resolve(__dirname, '..') }; this.paths.meteorDesktop.skeleton = join(this.paths.meteorDesktop.root, 'skeleton'); /** @type {meteorAppPaths} */ this.paths.meteorApp = { root: input }; /** @type {desktopPaths} */ this.paths.desktop = { rootName: '.desktop', root: join(this.paths.meteorApp.root, '.desktop') }; (0, _assignIn.default)(this.paths.desktop, { modules: join(this.paths.desktop.root, 'modules'), import: join(this.paths.desktop.root, 'import'), assets: join(this.paths.desktop.root, 'assets'), settings: join(this.paths.desktop.root, 'settings.json'), desktop: join(this.paths.desktop.root, 'desktop.js') }); this.paths.desktop.splashScreen = join(this.paths.desktop.assets, 'splashScreen.png'); this.paths.desktop.loadingGif = join(this.paths.desktop.assets, 'loading.gif'); this.paths.desktop.meteorIco = join(this.paths.desktop.assets, 'meteor.ico'); /** @type {electronAppPaths} */ this.paths.electronApp = { rootName: 'desktop-build' }; this.paths.electronApp.root = join(this.paths.meteorApp.root, '.meteor', this.paths.electronApp.rootName); this.paths.electronApp.tmpNodeModules = join(this.paths.meteorApp.root, '.meteor', '.desktop_node_modules'); this.paths.cache = join(this.paths.meteorApp.root, '.meteor', 'local', 'desktop-cache'); this.paths.electronApp.extractedNodeModules = join(this.paths.meteorApp.root, '.meteor', '.desktop_extracted_node_modules'); this.paths.electronApp.extractedNodeModulesBin = join(this.paths.electronApp.extractedNodeModules, '.bin'); this.paths.electronApp.appRoot = join(this.paths.electronApp.root, 'app'); (0, _assignIn.default)(this.paths.electronApp, { app: join(this.paths.electronApp.appRoot, 'app.js'), cordova: join(this.paths.electronApp.appRoot, 'cordova.js'), index: join(this.paths.electronApp.appRoot, 'index.js'), preload: join(this.paths.electronApp.appRoot, 'preload.js'), modules: join(this.paths.electronApp.appRoot, 'modules'), desktopAsar: join(this.paths.electronApp.root, 'desktop.asar'), extracted: join(this.paths.electronApp.root, 'extracted'), appAsar: join(this.paths.electronApp.root, 'app.asar'), import: join(this.paths.electronApp.root, 'import'), assets: join(this.paths.electronApp.root, 'assets'), packageJson: join(this.paths.electronApp.root, 'package.json'), settings: join(this.paths.electronApp.root, 'settings.json'), desktop: join(this.paths.electronApp.root, 'desktop.js'), desktopTmp: join(this.paths.electronApp.root, '__desktop'), nodeModules: join(this.paths.electronApp.root, 'node_modules'), meteorAsar: join(this.paths.electronApp.root, 'meteor.asar'), meteorApp: join(this.paths.electronApp.root, 'meteor'), meteorAppIndex: join(this.paths.electronApp.root, 'meteor', 'index.html'), meteorAppProgramJson: join(this.paths.electronApp.root, 'meteor', 'program.json'), skeleton: join(this.paths.electronApp.root, 'skeleton') }); (0, _assignIn.default)(this.paths.meteorApp, { platforms: join(this.paths.meteorApp.root, '.meteor', 'platforms'), packages: join(this.paths.meteorApp.root, '.meteor', 'packages'), versions: join(this.paths.meteorApp.root, '.meteor', 'versions'), release: join(this.paths.meteorApp.root, '.meteor', 'release'), packageJson: join(this.paths.meteorApp.root, 'package.json'), gitIgnore: join(this.paths.meteorApp.root, '.meteor', '.gitignore'), cordovaBuild: join(this.paths.meteorApp.root, '.meteor', 'local', 'cordova-build', 'www', 'application'), webCordova: join(this.paths.meteorApp.root, '.meteor', 'local', 'build', 'programs', 'web.cordova') }); (0, _assignIn.default)(this.paths.meteorApp, { cordovaBuildIndex: join(this.paths.meteorApp.cordovaBuild, 'index.html'), cordovaBuildProgramJson: join(this.paths.meteorApp.cordovaBuild, 'program.json') }); (0, _assignIn.default)(this.paths.meteorApp, { webCordovaProgramJson: join(this.paths.meteorApp.webCordova, 'program.json') }); /** @type {desktopTmpPaths} */ this.paths.desktopTmp = { root: join(this.paths.electronApp.root, '__desktop') }; (0, _assignIn.default)(this.paths.desktopTmp, { modules: join(this.paths.desktopTmp.root, 'modules'), settings: join(this.paths.desktopTmp.root, 'settings.json') }); this.paths.packageDir = '.desktop-package'; this.paths.installerDir = '.desktop-installer'; // Scaffold this.paths.scaffold = join(__dirname, '..', 'scaffold'); } /** * @returns {boolean|*} * @public */ isProductionBuild() { return !!('production' in this.options && this.options.production); } } exports.default = Env; module.exports = Env; /** * @typedef {Object} desktopPaths * @property {string} rootName * @property {string} root * @property {string} modules * @property {string} import * @property {string} assets * @property {string} settings * @property {string} desktop * @property {string} splashScreen * @property {string} loadingGif * @property {string} meteorIco */ /** * @typedef {Object} meteorAppPaths * @property {string} root * @property {string} platforms * @property {string} release * @property {string} packages * @property {string} versions * @property {string} gitIgnore * @property {string} packageJson * @property {string} cordovaBuild * @property {string} cordovaBuildIndex * @property {string} cordovaBuildProgramJson * @property {string} webCordova * @property {string} webCordovaIndex * @property {string} webCordovaProgramJson */ /** * @typedef {Object} electronAppPaths * @property {string} rootName * @property {string} root * @property {Object} appRoot * @property {string} appRoot.cordova * @property {string} appRoot.index * @property {string} appRoot.app * @property {string} appRoot.modules * @property {string} desktopAsar * @property {string} extracted * @property {string} appAsar * @property {string} preload * @property {string} import * @property {string} assets * @property {string} gitIgnore * @property {string} packageJson * @property {string} settings * @property {string} desktop * @property {string} desktopTmp * @property {string} nodeModules * @property {string} meteorAsar * @property {string} meteorApp * @property {string} meteorAppIndex * @property {string} meteorAppProgramJson * @property {string} skeleton * @property {string} tmpNodeModules * @property {string} extractedNodeModules * @property {string} extractedNodeModulesBin */ /** * @typedef {Object} desktopTmpPaths * @property {string} root * @property {string} modules * @property {string} settings */ /** * @typedef {Object} meteorDesktopPaths * @property {string} root * @property {string} skeleton */ /** * @typedef {Object} packagePaths * @property {meteorAppPaths} meteorApp * @property {desktopPaths} desktop * @property {electronAppPaths} electronApp * @property {desktopTmpPaths} desktopTmp * @property {meteorDesktopPaths} meteorDesktop * @property {string} packageDir * @property {string} scaffold */ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX29zIiwiX2Fzc2lnbkluIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwiam9pbiIsInBhdGgiLCJFbnYiLCJjb25zdHJ1Y3RvciIsImlucHV0Iiwib3V0cHV0Iiwib3B0aW9ucyIsImlzUHJvZHVjdGlvbkJ1aWxkIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwic3lzIiwicGxhdGZvcm0iLCJhcmNoIiwib3MiLCJpc1dpbmRvd3MiLCJpc0xpbnV4IiwiaXNPc3giLCJzdGRpbyIsIm5hbWUiLCJob21lIiwidG1wIiwidG1wZGlyIiwicGF0aHMiLCJtZXRlb3JEZXNrdG9wIiwicm9vdCIsInJlc29sdmUiLCJfX2Rpcm5hbWUiLCJza2VsZXRvbiIsIm1ldGVvckFwcCIsImRlc2t0b3AiLCJyb290TmFtZSIsImFzc2lnbkluIiwibW9kdWxlcyIsImltcG9ydCIsImFzc2V0cyIsInNldHRpbmdzIiwic3BsYXNoU2NyZWVuIiwibG9hZGluZ0dpZiIsIm1ldGVvckljbyIsImVsZWN0cm9uQXBwIiwidG1wTm9kZU1vZHVsZXMiLCJjYWNoZSIsImV4dHJhY3RlZE5vZGVNb2R1bGVzIiwiZXh0cmFjdGVkTm9kZU1vZHVsZXNCaW4iLCJhcHBSb290IiwiYXBwIiwiY29yZG92YSIsImluZGV4IiwicHJlbG9hZCIsImRlc2t0b3BBc2FyIiwiZXh0cmFjdGVkIiwiYXBwQXNhciIsInBhY2thZ2VKc29uIiwiZGVza3RvcFRtcCIsIm5vZGVNb2R1bGVzIiwibWV0ZW9yQXNhciIsIm1ldGVvckFwcEluZGV4IiwibWV0ZW9yQXBwUHJvZ3JhbUpzb24iLCJwbGF0Zm9ybXMiLCJwYWNrYWdlcyIsInZlcnNpb25zIiwicmVsZWFzZSIsImdpdElnbm9yZSIsImNvcmRvdmFCdWlsZCIsIndlYkNvcmRvdmEiLCJjb3Jkb3ZhQnVpbGRJbmRleCIsImNvcmRvdmFCdWlsZFByb2dyYW1Kc29uIiwid2ViQ29yZG92YVByb2dyYW1Kc29uIiwicGFja2FnZURpciIsImluc3RhbGxlckRpciIsInNjYWZmb2xkIiwicHJvZHVjdGlvbiIsImV4cG9ydHMiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi9saWIvZW52LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBhc3NpZ25JbiBmcm9tICdsb2Rhc2gvYXNzaWduSW4nO1xuXG5jb25zdCB7IGpvaW4gfSA9IHBhdGg7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAcHJvcGVydHkge3BhY2thZ2VQYXRoc30gcGF0aHNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW52IHtcbiAgICBjb25zdHJ1Y3RvcihpbnB1dCwgb3V0cHV0LCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNQcm9kdWN0aW9uQnVpbGQoKSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPSAncHJvZHVjdGlvbic7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN5cyA9IHtcbiAgICAgICAgICAgIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtLFxuICAgICAgICAgICAgYXJjaDogcHJvY2Vzcy5hcmNoXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gT3BlcmF0aW9uYWwgU3lzdGVtLlxuICAgICAgICB0aGlzLm9zID0ge1xuICAgICAgICAgICAgaXNXaW5kb3dzOiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyksXG4gICAgICAgICAgICBpc0xpbnV4OiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2xpbnV4JyksXG4gICAgICAgICAgICBpc09zeDogKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKVxuXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc3RkaW8gPSAnaW5oZXJpdCc7XG5cbiAgICAgICAgdGhpcy5vcy5uYW1lID0gKHRoaXMuc3lzLnBsYXRmb3JtID09PSAnZGFyd2luJyA/ICdvc3gnIDogdGhpcy5zeXMucGxhdGZvcm0pO1xuICAgICAgICB0aGlzLm9zLmhvbWUgPSBwcm9jZXNzLmVudlsodGhpcy5vcy5pc1dpbmRvd3MgPyAnVVNFUlBST0ZJTEUnIDogJ0hPTUUnKV07XG4gICAgICAgIHRoaXMub3MudG1wID0gb3MudG1wZGlyKCk7XG5cbiAgICAgICAgLyoqIEB0eXBlIHtwYWNrYWdlUGF0aHN9ICovXG4gICAgICAgIHRoaXMucGF0aHMgPSB7fTtcblxuICAgICAgICAvKiogQHR5cGUge21ldGVvckRlc2t0b3BQYXRoc30gKi9cbiAgICAgICAgdGhpcy5wYXRocy5tZXRlb3JEZXNrdG9wID0ge1xuICAgICAgICAgICAgcm9vdDogcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJylcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnBhdGhzLm1ldGVvckRlc2t0b3Auc2tlbGV0b24gPSBqb2luKHRoaXMucGF0aHMubWV0ZW9yRGVza3RvcC5yb290LCAnc2tlbGV0b24nKTtcblxuICAgICAgICAvKiogQHR5cGUge21ldGVvckFwcFBhdGhzfSAqL1xuICAgICAgICB0aGlzLnBhdGhzLm1ldGVvckFwcCA9IHtcbiAgICAgICAgICAgIHJvb3Q6IGlucHV0XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqIEB0eXBlIHtkZXNrdG9wUGF0aHN9ICovXG4gICAgICAgIHRoaXMucGF0aHMuZGVza3RvcCA9IHtcbiAgICAgICAgICAgIHJvb3ROYW1lOiAnLmRlc2t0b3AnLFxuICAgICAgICAgICAgcm9vdDogam9pbih0aGlzLnBhdGhzLm1ldGVvckFwcC5yb290LCAnLmRlc2t0b3AnKVxuICAgICAgICB9O1xuXG4gICAgICAgIGFzc2lnbkluKHRoaXMucGF0aHMuZGVza3RvcCwge1xuICAgICAgICAgICAgbW9kdWxlczogam9pbih0aGlzLnBhdGhzLmRlc2t0b3Aucm9vdCwgJ21vZHVsZXMnKSxcbiAgICAgICAgICAgIGltcG9ydDogam9pbih0aGlzLnBhdGhzLmRlc2t0b3Aucm9vdCwgJ2ltcG9ydCcpLFxuICAgICAgICAgICAgYXNzZXRzOiBqb2luKHRoaXMucGF0aHMuZGVza3RvcC5yb290LCAnYXNzZXRzJyksXG4gICAgICAgICAgICBzZXR0aW5nczogam9pbih0aGlzLnBhdGhzLmRlc2t0b3Aucm9vdCwgJ3NldHRpbmdzLmpzb24nKSxcbiAgICAgICAgICAgIGRlc2t0b3A6IGpvaW4odGhpcy5wYXRocy5kZXNrdG9wLnJvb3QsICdkZXNrdG9wLmpzJylcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5wYXRocy5kZXNrdG9wLnNwbGFzaFNjcmVlbiA9IGpvaW4odGhpcy5wYXRocy5kZXNrdG9wLmFzc2V0cywgJ3NwbGFzaFNjcmVlbi5wbmcnKTtcbiAgICAgICAgdGhpcy5wYXRocy5kZXNrdG9wLmxvYWRpbmdHaWYgPSBqb2luKHRoaXMucGF0aHMuZGVza3RvcC5hc3NldHMsICdsb2FkaW5nLmdpZicpO1xuICAgICAgICB0aGlzLnBhdGhzLmRlc2t0b3AubWV0ZW9ySWNvID0gam9pbih0aGlzLnBhdGhzLmRlc2t0b3AuYXNzZXRzLCAnbWV0ZW9yLmljbycpO1xuXG4gICAgICAgIC8qKiBAdHlwZSB7ZWxlY3Ryb25BcHBQYXRoc30gKi9cbiAgICAgICAgdGhpcy5wYXRocy5lbGVjdHJvbkFwcCA9IHtcbiAgICAgICAgICAgIHJvb3ROYW1lOiAnZGVza3RvcC1idWlsZCcsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucGF0aHMuZWxlY3Ryb25BcHAucm9vdCA9XG4gICAgICAgICAgICBqb2luKHRoaXMucGF0aHMubWV0ZW9yQXBwLnJvb3QsICcubWV0ZW9yJywgdGhpcy5wYXRocy5lbGVjdHJvbkFwcC5yb290TmFtZSk7XG5cbiAgICAgICAgdGhpcy5wYXRocy5lbGVjdHJvbkFwcC50bXBOb2RlTW9kdWxlcyA9XG4gICAgICAgICAgICBqb2luKHRoaXMucGF0aHMubWV0ZW9yQXBwLnJvb3QsICcubWV0ZW9yJywgJy5kZXNrdG9wX25vZGVfbW9kdWxlcycpO1xuXG4gICAgICAgIHRoaXMucGF0aHMuY2FjaGUgPVxuICAgICAgICAgICAgam9pbih0aGlzLnBhdGhzLm1ldGVvckFwcC5yb290LCAnLm1ldGVvcicsICdsb2NhbCcsICdkZXNrdG9wLWNhY2hlJyk7XG5cbiAgICAgICAgdGhpcy5wYXRocy5lbGVjdHJvbkFwcC5leHRyYWN0ZWROb2RlTW9kdWxlcyA9XG4gICAgICAgICAgICBqb2luKHRoaXMucGF0aHMubWV0ZW9yQXBwLnJvb3QsICcubWV0ZW9yJywgJy5kZXNrdG9wX2V4dHJhY3RlZF9ub2RlX21vZHVsZXMnKTtcblxuICAgICAgICB0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLmV4dHJhY3RlZE5vZGVNb2R1bGVzQmluID1cbiAgICAgICAgICAgIGpvaW4odGhpcy5wYXRocy5lbGVjdHJvbkFwcC5leHRyYWN0ZWROb2RlTW9kdWxlcywgJy5iaW4nKTtcblxuXG4gICAgICAgIHRoaXMucGF0aHMuZWxlY3Ryb25BcHAuYXBwUm9vdCA9XG4gICAgICAgICAgICBqb2luKHRoaXMucGF0aHMuZWxlY3Ryb25BcHAucm9vdCwgJ2FwcCcpO1xuXG4gICAgICAgIGFzc2lnbkluKHRoaXMucGF0aHMuZWxlY3Ryb25BcHAsIHtcbiAgICAgICAgICAgIGFwcDogam9pbih0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLmFwcFJvb3QsICdhcHAuanMnKSxcbiAgICAgICAgICAgIGNvcmRvdmE6IGpvaW4odGhpcy5wYXRocy5lbGVjdHJvbkFwcC5hcHBSb290LCAnY29yZG92YS5qcycpLFxuICAgICAgICAgICAgaW5kZXg6IGpvaW4odGhpcy5wYXRocy5lbGVjdHJvbkFwcC5hcHBSb290LCAnaW5kZXguanMnKSxcbiAgICAgICAgICAgIHByZWxvYWQ6IGpvaW4odGhpcy5wYXRocy5lbGVjdHJvbkFwcC5hcHBSb290LCAncHJlbG9hZC5qcycpLFxuICAgICAgICAgICAgbW9kdWxlczogam9pbih0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLmFwcFJvb3QsICdtb2R1bGVzJyksXG4gICAgICAgICAgICBkZXNrdG9wQXNhcjogam9pbih0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLnJvb3QsICdkZXNrdG9wLmFzYXInKSxcbiAgICAgICAgICAgIGV4dHJhY3RlZDogam9pbih0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLnJvb3QsICdleHRyYWN0ZWQnKSxcbiAgICAgICAgICAgIGFwcEFzYXI6IGpvaW4odGhpcy5wYXRocy5lbGVjdHJvbkFwcC5yb290LCAnYXBwLmFzYXInKSxcbiAgICAgICAgICAgIGltcG9ydDogam9pbih0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLnJvb3QsICdpbXBvcnQnKSxcbiAgICAgICAgICAgIGFzc2V0czogam9pbih0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLnJvb3QsICdhc3NldHMnKSxcbiAgICAgICAgICAgIHBhY2thZ2VKc29uOiBqb2luKHRoaXMucGF0aHMuZWxlY3Ryb25BcHAucm9vdCwgJ3BhY2thZ2UuanNvbicpLFxuICAgICAgICAgICAgc2V0dGluZ3M6IGpvaW4odGhpcy5wYXRocy5lbGVjdHJvbkFwcC5yb290LCAnc2V0dGluZ3MuanNvbicpLFxuICAgICAgICAgICAgZGVza3RvcDogam9pbih0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLnJvb3QsICdkZXNrdG9wLmpzJyksXG4gICAgICAgICAgICBkZXNrdG9wVG1wOiBqb2luKHRoaXMucGF0aHMuZWxlY3Ryb25BcHAucm9vdCwgJ19fZGVza3RvcCcpLFxuICAgICAgICAgICAgbm9kZU1vZHVsZXM6IGpvaW4odGhpcy5wYXRocy5lbGVjdHJvbkFwcC5yb290LCAnbm9kZV9tb2R1bGVzJyksXG4gICAgICAgICAgICBtZXRlb3JBc2FyOiBqb2luKHRoaXMucGF0aHMuZWxlY3Ryb25BcHAucm9vdCwgJ21ldGVvci5hc2FyJyksXG4gICAgICAgICAgICBtZXRlb3JBcHA6IGpvaW4odGhpcy5wYXRocy5lbGVjdHJvbkFwcC5yb290LCAnbWV0ZW9yJyksXG4gICAgICAgICAgICBtZXRlb3JBcHBJbmRleDogam9pbih0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLnJvb3QsICdtZXRlb3InLCAnaW5kZXguaHRtbCcpLFxuICAgICAgICAgICAgbWV0ZW9yQXBwUHJvZ3JhbUpzb246IGpvaW4odGhpcy5wYXRocy5lbGVjdHJvbkFwcC5yb290LCAnbWV0ZW9yJywgJ3Byb2dyYW0uanNvbicpLFxuICAgICAgICAgICAgc2tlbGV0b246IGpvaW4odGhpcy5wYXRocy5lbGVjdHJvbkFwcC5yb290LCAnc2tlbGV0b24nKVxuICAgICAgICB9KTtcblxuICAgICAgICBhc3NpZ25Jbih0aGlzLnBhdGhzLm1ldGVvckFwcCwge1xuICAgICAgICAgICAgcGxhdGZvcm1zOiBqb2luKHRoaXMucGF0aHMubWV0ZW9yQXBwLnJvb3QsICcubWV0ZW9yJywgJ3BsYXRmb3JtcycpLFxuICAgICAgICAgICAgcGFja2FnZXM6IGpvaW4odGhpcy5wYXRocy5tZXRlb3JBcHAucm9vdCwgJy5tZXRlb3InLCAncGFja2FnZXMnKSxcbiAgICAgICAgICAgIHZlcnNpb25zOiBqb2luKHRoaXMucGF0aHMubWV0ZW9yQXBwLnJvb3QsICcubWV0ZW9yJywgJ3ZlcnNpb25zJyksXG4gICAgICAgICAgICByZWxlYXNlOiBqb2luKHRoaXMucGF0aHMubWV0ZW9yQXBwLnJvb3QsICcubWV0ZW9yJywgJ3JlbGVhc2UnKSxcbiAgICAgICAgICAgIHBhY2thZ2VKc29uOiBqb2luKHRoaXMucGF0aHMubWV0ZW9yQXBwLnJvb3QsICdwYWNrYWdlLmpzb24nKSxcbiAgICAgICAgICAgIGdpdElnbm9yZTogam9pbih0aGlzLnBhdGhzLm1ldGVvckFwcC5yb290LCAnLm1ldGVvcicsICcuZ2l0aWdub3JlJyksXG4gICAgICAgICAgICBjb3Jkb3ZhQnVpbGQ6IGpvaW4oXG4gICAgICAgICAgICAgICAgdGhpcy5wYXRocy5tZXRlb3JBcHAucm9vdCxcbiAgICAgICAgICAgICAgICAnLm1ldGVvcicsXG4gICAgICAgICAgICAgICAgJ2xvY2FsJyxcbiAgICAgICAgICAgICAgICAnY29yZG92YS1idWlsZCcsXG4gICAgICAgICAgICAgICAgJ3d3dycsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdlYkNvcmRvdmE6IGpvaW4oXG4gICAgICAgICAgICAgICAgdGhpcy5wYXRocy5tZXRlb3JBcHAucm9vdCxcbiAgICAgICAgICAgICAgICAnLm1ldGVvcicsXG4gICAgICAgICAgICAgICAgJ2xvY2FsJyxcbiAgICAgICAgICAgICAgICAnYnVpbGQnLFxuICAgICAgICAgICAgICAgICdwcm9ncmFtcycsXG4gICAgICAgICAgICAgICAgJ3dlYi5jb3Jkb3ZhJ1xuICAgICAgICAgICAgKVxuICAgICAgICB9KTtcblxuICAgICAgICBhc3NpZ25Jbih0aGlzLnBhdGhzLm1ldGVvckFwcCwge1xuICAgICAgICAgICAgY29yZG92YUJ1aWxkSW5kZXg6IGpvaW4oXG4gICAgICAgICAgICAgICAgdGhpcy5wYXRocy5tZXRlb3JBcHAuY29yZG92YUJ1aWxkLCAnaW5kZXguaHRtbCdcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjb3Jkb3ZhQnVpbGRQcm9ncmFtSnNvbjogam9pbihcbiAgICAgICAgICAgICAgICB0aGlzLnBhdGhzLm1ldGVvckFwcC5jb3Jkb3ZhQnVpbGQsICdwcm9ncmFtLmpzb24nXG4gICAgICAgICAgICApXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFzc2lnbkluKHRoaXMucGF0aHMubWV0ZW9yQXBwLCB7XG4gICAgICAgICAgICB3ZWJDb3Jkb3ZhUHJvZ3JhbUpzb246IGpvaW4oXG4gICAgICAgICAgICAgICAgdGhpcy5wYXRocy5tZXRlb3JBcHAud2ViQ29yZG92YSwgJ3Byb2dyYW0uanNvbidcbiAgICAgICAgICAgIClcbiAgICAgICAgfSk7XG5cblxuICAgICAgICAvKiogQHR5cGUge2Rlc2t0b3BUbXBQYXRoc30gKi9cbiAgICAgICAgdGhpcy5wYXRocy5kZXNrdG9wVG1wID0ge1xuICAgICAgICAgICAgcm9vdDogam9pbih0aGlzLnBhdGhzLmVsZWN0cm9uQXBwLnJvb3QsICdfX2Rlc2t0b3AnKSxcbiAgICAgICAgfTtcblxuICAgICAgICBhc3NpZ25Jbih0aGlzLnBhdGhzLmRlc2t0b3BUbXAsIHtcbiAgICAgICAgICAgIG1vZHVsZXM6IGpvaW4odGhpcy5wYXRocy5kZXNrdG9wVG1wLnJvb3QsICdtb2R1bGVzJyksXG4gICAgICAgICAgICBzZXR0aW5nczogam9pbih0aGlzLnBhdGhzLmRlc2t0b3BUbXAucm9vdCwgJ3NldHRpbmdzLmpzb24nKVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnBhdGhzLnBhY2thZ2VEaXIgPSAnLmRlc2t0b3AtcGFja2FnZSc7XG4gICAgICAgIHRoaXMucGF0aHMuaW5zdGFsbGVyRGlyID0gJy5kZXNrdG9wLWluc3RhbGxlcic7XG5cbiAgICAgICAgLy8gU2NhZmZvbGRcbiAgICAgICAgdGhpcy5wYXRocy5zY2FmZm9sZCA9IGpvaW4oX19kaXJuYW1lLCAnLi4nLCAnc2NhZmZvbGQnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbnwqfVxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBpc1Byb2R1Y3Rpb25CdWlsZCgpIHtcbiAgICAgICAgcmV0dXJuICEhKCdwcm9kdWN0aW9uJyBpbiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnByb2R1Y3Rpb24pO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBFbnY7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gZGVza3RvcFBhdGhzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcm9vdE5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByb290XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbW9kdWxlc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGltcG9ydFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFzc2V0c1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHNldHRpbmdzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZGVza3RvcFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNwbGFzaFNjcmVlblxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxvYWRpbmdHaWZcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXRlb3JJY29cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IG1ldGVvckFwcFBhdGhzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcm9vdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsYXRmb3Jtc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbGVhc2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYWNrYWdlc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHZlcnNpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZ2l0SWdub3JlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGFja2FnZUpzb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb3Jkb3ZhQnVpbGRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb3Jkb3ZhQnVpbGRJbmRleFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvcmRvdmFCdWlsZFByb2dyYW1Kc29uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gd2ViQ29yZG92YVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHdlYkNvcmRvdmFJbmRleFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHdlYkNvcmRvdmFQcm9ncmFtSnNvblxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gZWxlY3Ryb25BcHBQYXRoc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHJvb3ROYW1lXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcm9vdFxuICogQHByb3BlcnR5IHtPYmplY3R9IGFwcFJvb3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBSb290LmNvcmRvdmFcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBSb290LmluZGV4XG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwUm9vdC5hcHBcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBSb290Lm1vZHVsZXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkZXNrdG9wQXNhclxuICogQHByb3BlcnR5IHtzdHJpbmd9IGV4dHJhY3RlZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcEFzYXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcmVsb2FkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaW1wb3J0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXNzZXRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZ2l0SWdub3JlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGFja2FnZUpzb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzZXR0aW5nc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGRlc2t0b3BcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkZXNrdG9wVG1wXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbm9kZU1vZHVsZXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXRlb3JBc2FyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWV0ZW9yQXBwXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWV0ZW9yQXBwSW5kZXhcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXRlb3JBcHBQcm9ncmFtSnNvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNrZWxldG9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdG1wTm9kZU1vZHVsZXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBleHRyYWN0ZWROb2RlTW9kdWxlc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGV4dHJhY3RlZE5vZGVNb2R1bGVzQmluXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBkZXNrdG9wVG1wUGF0aHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByb290XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbW9kdWxlc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHNldHRpbmdzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBtZXRlb3JEZXNrdG9wUGF0aHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByb290XG4gKiBAcHJvcGVydHkge3N0cmluZ30gc2tlbGV0b25cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IHBhY2thZ2VQYXRoc1xuICogQHByb3BlcnR5IHttZXRlb3JBcHBQYXRoc30gbWV0ZW9yQXBwXG4gKiBAcHJvcGVydHkge2Rlc2t0b3BQYXRoc30gZGVza3RvcFxuICogQHByb3BlcnR5IHtlbGVjdHJvbkFwcFBhdGhzfSBlbGVjdHJvbkFwcFxuICogQHByb3BlcnR5IHtkZXNrdG9wVG1wUGF0aHN9IGRlc2t0b3BUbXBcbiAqIEBwcm9wZXJ0eSB7bWV0ZW9yRGVza3RvcFBhdGhzfSBtZXRlb3JEZXNrdG9wXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGFja2FnZURpclxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNjYWZmb2xkXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsR0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsU0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQXVDLFNBQUFELHVCQUFBSSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRXZDLE1BQU07RUFBRUc7QUFBSyxDQUFDLEdBQUdDLGFBQUk7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ2UsTUFBTUMsR0FBRyxDQUFDO0VBQ3JCQyxXQUFXQSxDQUFDQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsT0FBTyxFQUFFO0lBQ2hDLElBQUksQ0FBQ0EsT0FBTyxHQUFHQSxPQUFPO0lBRXRCLElBQUksSUFBSSxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFD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