appium 2.0.0-beta.43 → 2.0.0-beta.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/appium.d.ts +0 -1
- package/build/lib/appium.d.ts.map +1 -1
- package/build/lib/appium.js +1 -1
- package/build/lib/cli/extension-command.d.ts.map +1 -1
- package/build/lib/cli/extension-command.js +2 -2
- package/build/lib/main.d.ts.map +1 -1
- package/build/lib/main.js +2 -1
- package/build/lib/schema/cli-transformers.d.ts.map +1 -1
- package/build/lib/schema/cli-transformers.js +2 -2
- package/build/lib/utils.d.ts +8 -0
- package/build/lib/utils.d.ts.map +1 -1
- package/build/lib/utils.js +62 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/lib/appium.js +5 -0
- package/lib/cli/extension-command.js +2 -1
- package/lib/main.js +3 -1
- package/lib/schema/cli-transformers.js +3 -2
- package/lib/utils.js +60 -0
- package/package.json +10 -12
- package/test.d.ts +0 -7
- package/test.js +0 -13
package/build/lib/utils.js
CHANGED
|
@@ -5,6 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
+
exports.adjustNodePath = adjustNodePath;
|
|
8
9
|
exports.getPackageVersion = getPackageVersion;
|
|
9
10
|
exports.insertAppiumPrefixes = insertAppiumPrefixes;
|
|
10
11
|
exports.inspect = void 0;
|
|
@@ -22,6 +23,10 @@ var _baseDriver = require("@appium/base-driver");
|
|
|
22
23
|
|
|
23
24
|
var _util = require("util");
|
|
24
25
|
|
|
26
|
+
var _support = require("@appium/support");
|
|
27
|
+
|
|
28
|
+
var _path = _interopRequireDefault(require("path"));
|
|
29
|
+
|
|
25
30
|
const W3C_APPIUM_PREFIX = 'appium';
|
|
26
31
|
const isStdoutTTY = process.stdout.isTTY;
|
|
27
32
|
|
|
@@ -168,6 +173,62 @@ function getPackageVersion(pkgName) {
|
|
|
168
173
|
return pkgInfo.version;
|
|
169
174
|
}
|
|
170
175
|
|
|
176
|
+
function adjustNodePath() {
|
|
177
|
+
const selfRoot = _support.node.getModuleRootSync('appium', __filename);
|
|
178
|
+
|
|
179
|
+
if (!selfRoot || _path.default.dirname(selfRoot).length >= selfRoot.length) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
const nodeModulesRoot = _path.default.dirname(selfRoot);
|
|
184
|
+
|
|
185
|
+
const refreshRequirePaths = () => {
|
|
186
|
+
try {
|
|
187
|
+
require('module').Module._initPaths();
|
|
188
|
+
|
|
189
|
+
return true;
|
|
190
|
+
} catch (e) {
|
|
191
|
+
_logger.default.info(`Module init paths cannot be refreshed. Original error: ${e.message}`);
|
|
192
|
+
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
if (!process.env.NODE_PATH) {
|
|
198
|
+
process.env.NODE_PATH = nodeModulesRoot;
|
|
199
|
+
|
|
200
|
+
if (refreshRequirePaths()) {
|
|
201
|
+
_logger.default.info(`Setting NODE_PATH to '${nodeModulesRoot}'`);
|
|
202
|
+
|
|
203
|
+
process.env.APPIUM_OMIT_PEER_DEPS = '1';
|
|
204
|
+
} else {
|
|
205
|
+
delete process.env.NODE_PATH;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
const nodePathParts = process.env.NODE_PATH.split(_path.default.delimiter);
|
|
212
|
+
|
|
213
|
+
if (nodePathParts.includes(nodeModulesRoot)) {
|
|
214
|
+
_logger.default.info(`NODE_PATH already includes '${nodeModulesRoot}'`);
|
|
215
|
+
|
|
216
|
+
process.env.APPIUM_OMIT_PEER_DEPS = '1';
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
nodePathParts.push(nodeModulesRoot);
|
|
221
|
+
process.env.NODE_PATH = nodePathParts.join(_path.default.delimiter);
|
|
222
|
+
|
|
223
|
+
if (refreshRequirePaths()) {
|
|
224
|
+
_logger.default.info(`Adding '${nodeModulesRoot}' to NODE_PATH`);
|
|
225
|
+
|
|
226
|
+
process.env.APPIUM_OMIT_PEER_DEPS = '1';
|
|
227
|
+
} else {
|
|
228
|
+
process.env.NODE_PATH = _lodash.default.without(nodePathParts, nodeModulesRoot).join(_path.default.delimiter);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
171
232
|
function pullSettings(caps) {
|
|
172
233
|
if (!_lodash.default.isPlainObject(caps) || _lodash.default.isEmpty(caps)) {
|
|
173
234
|
return {};
|
|
@@ -188,4 +249,4 @@ function pullSettings(caps) {
|
|
|
188
249
|
|
|
189
250
|
return result;
|
|
190
251
|
}
|
|
191
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXM0NfQVBQSVVNX1BSRUZJWCIsImlzU3Rkb3V0VFRZIiwicHJvY2VzcyIsInN0ZG91dCIsImlzVFRZIiwiaW5zcGVjdCIsIl8iLCJmbG93IiwicGFydGlhbFJpZ2h0IiwiZHVtcCIsImNvbG9ycyIsImRlcHRoIiwiY29tcGFjdCIsImFyZ3MiLCJsb2dnZXIiLCJpbmZvIiwicGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIiLCJqc29ud3BDYXBhYmlsaXRpZXMiLCJ3M2NDYXBhYmlsaXRpZXMiLCJjb25zdHJhaW50cyIsImRlZmF1bHRDYXBhYmlsaXRpZXMiLCJoYXNXM0NDYXBzIiwiaXNQbGFpbk9iamVjdCIsImhhcyIsImhhc0pTT05XUENhcHMiLCJkZXNpcmVkQ2FwcyIsInByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyIsInByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyIsInByb3RvY29sIiwiUFJPVE9DT0xTIiwiVzNDIiwiZXJyb3IiLCJFcnJvciIsImNsb25lRGVlcCIsImlzRW1wdHkiLCJkZWZhdWx0Q2FwS2V5IiwiZGVmYXVsdENhcFZhbHVlIiwidG9QYWlycyIsImlzQ2FwQWxyZWFkeVNldCIsImZpcnN0TWF0Y2hFbnRyeSIsImZpcnN0TWF0Y2giLCJyZW1vdmVBcHBpdW1QcmVmaXhlcyIsInJlbW92ZUFwcGl1bVByZWZpeCIsImFsd2F5c01hdGNoIiwicHJvY2Vzc0NhcGFiaWxpdGllcyIsIm1lc3NhZ2UiLCJpbnNlcnRBcHBpdW1QcmVmaXhlcyIsImNhcHMiLCJTVEFOREFSRF9DQVBTIiwicHJlZml4ZWRDYXBzIiwibmFtZSIsInZhbHVlIiwiaW5jbHVkZXMiLCJmaXhlZENhcHMiLCJrZXkiLCJwcmVmaXgiLCJzdGFydHNXaXRoIiwic3Vic3RyaW5nIiwibGVuZ3RoIiwiZ2V0UGFja2FnZVZlcnNpb24iLCJwa2dOYW1lIiwicGtnSW5mbyIsInJlcXVpcmUiLCJ2ZXJzaW9uIiwicHVsbFNldHRpbmdzIiwicmVzdWx0IiwibWF0Y2giLCJleGVjIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL3V0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7cHJvY2Vzc0NhcGFiaWxpdGllcywgUFJPVE9DT0xTfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCB7aW5zcGVjdCBhcyBkdW1wfSBmcm9tICd1dGlsJztcblxuY29uc3QgVzNDX0FQUElVTV9QUkVGSVggPSAnYXBwaXVtJztcblxuLyoqXG4gKlxuICogSWYgYHN0ZG91dGAgaXMgYSBUVFksIHRoaXMgaXMgYHRydWVgLlxuICpcbiAqIFVzZWQgZm9yIHRpZ2h0ZXIgY29udHJvbCBvdmVyIGxvZyBvdXRwdXQuXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaXNTdGRvdXRUVFkgPSBwcm9jZXNzLnN0ZG91dC5pc1RUWTtcblxuLyoqXG4gKiBEdW1wcyB0byB2YWx1ZSB0byB0aGUgY29uc29sZSB1c2luZyBgaW5mb2AgbG9nZ2VyLlxuICpcbiAqIEB0b2RvIE1heSB3YW50IHRvIGZvcmNlIGNvbG9yIHRvIGJlIGBmYWxzZWAgaWYge0BsaW5rIGlzU3Rkb3V0VFRZfSBpcyBgZmFsc2VgLlxuICovXG5jb25zdCBpbnNwZWN0ID0gXy5mbG93KFxuICBfLnBhcnRpYWxSaWdodChcbiAgICAvKiogQHR5cGUgeyhvYmplY3Q6IGFueSwgb3B0aW9uczogaW1wb3J0KCd1dGlsJykuSW5zcGVjdE9wdGlvbnMpID0+IHN0cmluZ30gKi8gKGR1bXApLFxuICAgIHtjb2xvcnM6IHRydWUsIGRlcHRoOiBudWxsLCBjb21wYWN0OiAhaXNTdGRvdXRUVFl9XG4gICksXG4gICguLi5hcmdzKSA9PiB7XG4gICAgbG9nZ2VyLmluZm8oLi4uYXJncyk7XG4gIH1cbik7XG5cbi8qKlxuICogVGFrZXMgdGhlIGNhcHMgdGhhdCB3ZXJlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGFuZCB0cmFuc2xhdGVzIHRoZW1cbiAqIGludG8gY2FwcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBpbm5lciBkcml2ZXJzLlxuICpcbiAqIEBwYXJhbSB7YW55fSBqc29ud3BDYXBhYmlsaXRpZXNcbiAqIEBwYXJhbSB7VzNDQ2FwYWJpbGl0aWVzfSB3M2NDYXBhYmlsaXRpZXNcbiAqIEBwYXJhbSB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ29uc3RyYWludHN9IGNvbnN0cmFpbnRzXG4gKiBAcGFyYW0ge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRlZmF1bHRDYXBhYmlsaXRpZXNDb25maWd9IFtkZWZhdWx0Q2FwYWJpbGl0aWVzXVxuICogQHJldHVybnMge1BhcnNlZERyaXZlckNhcHN8SW52YWxpZENhcHN9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyKFxuICBqc29ud3BDYXBhYmlsaXRpZXMsXG4gIHczY0NhcGFiaWxpdGllcyxcbiAgY29uc3RyYWludHMgPSB7fSxcbiAgZGVmYXVsdENhcGFiaWxpdGllcyA9IHt9XG4pIHtcbiAgLy8gQ2hlY2sgaWYgdGhlIGNhbGxlciBzZW50IEpTT05XUCBjYXBzLCBXM0MgY2Fwcywgb3IgYm90aFxuICBjb25zdCBoYXNXM0NDYXBzID1cbiAgICBfLmlzUGxhaW5PYmplY3QodzNjQ2FwYWJpbGl0aWVzKSAmJlxuICAgIChfLmhhcyh3M2NDYXBhYmlsaXRpZXMsICdhbHdheXNNYXRjaCcpIHx8IF8uaGFzKHczY0NhcGFiaWxpdGllcywgJ2ZpcnN0TWF0Y2gnKSk7XG4gIGNvbnN0IGhhc0pTT05XUENhcHMgPSBfLmlzUGxhaW5PYmplY3QoanNvbndwQ2FwYWJpbGl0aWVzKTtcbiAgbGV0IGRlc2lyZWRDYXBzID0gLyoqIEB0eXBlIHtQYXJzZWREcml2ZXJDYXBzWydkZXNpcmVkQ2FwcyddfSAqLyAoe30pO1xuICAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHNbJ3Byb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyddfSAqL1xuICBsZXQgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzO1xuICAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHNbJ3Byb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyddfSAqL1xuICBsZXQgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzO1xuXG4gIGlmICghaGFzVzNDQ2Fwcykge1xuICAgIHJldHVybiAvKiogQHR5cGUge0ludmFsaWRDYXBzfSAqLyAoe1xuICAgICAgcHJvdG9jb2w6IFBST1RPQ09MUy5XM0MsXG4gICAgICBlcnJvcjogbmV3IEVycm9yKCdXM0MgY2FwYWJpbGl0aWVzIHNob3VsZCBiZSBwcm92aWRlZCcpLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qge1czQ30gPSBQUk9UT0NPTFM7XG4gIGNvbnN0IHByb3RvY29sID0gVzNDO1xuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBtdXRhdGUgdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuICBqc29ud3BDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChqc29ud3BDYXBhYmlsaXRpZXMpO1xuICB3M2NDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcCh3M2NDYXBhYmlsaXRpZXMpO1xuICBkZWZhdWx0Q2FwYWJpbGl0aWVzID0gXy5jbG9uZURlZXAoZGVmYXVsdENhcGFiaWxpdGllcyk7XG5cbiAgaWYgKCFfLmlzRW1wdHkoZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICBpZiAoaGFzVzNDQ2Fwcykge1xuICAgICAgZm9yIChjb25zdCBbZGVmYXVsdENhcEtleSwgZGVmYXVsdENhcFZhbHVlXSBvZiBfLnRvUGFpcnMoZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICAgICAgbGV0IGlzQ2FwQWxyZWFkeVNldCA9IGZhbHNlO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiBmaXJzdE1hdGNoIGVudHJpZXNcbiAgICAgICAgZm9yIChjb25zdCBmaXJzdE1hdGNoRW50cnkgb2YgdzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggfHwgW10pIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBfLmlzUGxhaW5PYmplY3QoZmlyc3RNYXRjaEVudHJ5KSAmJlxuICAgICAgICAgICAgXy5oYXMocmVtb3ZlQXBwaXVtUHJlZml4ZXMoZmlyc3RNYXRjaEVudHJ5KSwgcmVtb3ZlQXBwaXVtUHJlZml4KGRlZmF1bHRDYXBLZXkpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNDYXBBbHJlYWR5U2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiB0aGUga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiBhbHdheXNNYXRjaCBlbnRyaWVzXG4gICAgICAgIGlzQ2FwQWxyZWFkeVNldCA9XG4gICAgICAgICAgaXNDYXBBbHJlYWR5U2V0IHx8XG4gICAgICAgICAgKF8uaXNQbGFpbk9iamVjdCh3M2NDYXBhYmlsaXRpZXMuYWx3YXlzTWF0Y2gpICYmXG4gICAgICAgICAgICBfLmhhcyhcbiAgICAgICAgICAgICAgcmVtb3ZlQXBwaXVtUHJlZml4ZXModzNjQ2FwYWJpbGl0aWVzLmFsd2F5c01hdGNoKSxcbiAgICAgICAgICAgICAgcmVtb3ZlQXBwaXVtUHJlZml4KGRlZmF1bHRDYXBLZXkpXG4gICAgICAgICAgICApKTtcbiAgICAgICAgaWYgKGlzQ2FwQWxyZWFkeVNldCkge1xuICAgICAgICAgIC8vIFNraXAgaWYgdGhlIGtleSBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIHByb3ZpZGVkIGNhcHNcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkgYWRkIHRoZSBkZWZhdWx0IGNhcGFiaWxpdHkgaWYgaXQgaXMgbm90IG92ZXJyaWRkZW5cbiAgICAgICAgaWYgKF8uaXNFbXB0eSh3M2NDYXBhYmlsaXRpZXMuZmlyc3RNYXRjaCkpIHtcbiAgICAgICAgICB3M2NDYXBhYmlsaXRpZXMuZmlyc3RNYXRjaCA9IFt7W2RlZmF1bHRDYXBLZXldOiBkZWZhdWx0Q2FwVmFsdWV9XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3M2NDYXBhYmlsaXRpZXMuZmlyc3RNYXRjaFswXVtkZWZhdWx0Q2FwS2V5XSA9IGRlZmF1bHRDYXBWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGFzSlNPTldQQ2Fwcykge1xuICAgICAganNvbndwQ2FwYWJpbGl0aWVzID0ge1xuICAgICAgICAuLi5yZW1vdmVBcHBpdW1QcmVmaXhlcyhkZWZhdWx0Q2FwYWJpbGl0aWVzKSxcbiAgICAgICAgLi4uanNvbndwQ2FwYWJpbGl0aWVzLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXQgTUpTT05XUCBjYXBzXG4gIGlmIChoYXNKU09OV1BDYXBzKSB7XG4gICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzID0gey4uLmpzb253cENhcGFiaWxpdGllc307XG4gIH1cblxuICAvLyBHZXQgVzNDIGNhcHNcbiAgaWYgKGhhc1czQ0NhcHMpIHtcbiAgICAvLyBDYWxsIHRoZSBwcm9jZXNzIGNhcGFiaWxpdGllcyBhbGdvcml0aG0gdG8gZmluZCBtYXRjaGluZyBjYXBzIG9uIHRoZSBXM0NcbiAgICAvLyAoc2VlOiBodHRwczovL2dpdGh1Yi5jb20vamxpcHBzL3NpbXBsZS13ZC1zcGVjI3Byb2Nlc3NpbmctY2FwYWJpbGl0aWVzKVxuICAgIHRyeSB7XG4gICAgICBkZXNpcmVkQ2FwcyA9IHByb2Nlc3NDYXBhYmlsaXRpZXModzNjQ2FwYWJpbGl0aWVzLCBjb25zdHJhaW50cywgdHJ1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBDb3VsZCBub3QgcGFyc2UgVzNDIGNhcGFiaWxpdGllczogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7SW52YWxpZENhcHN9ICovICh7XG4gICAgICAgIGRlc2lyZWRDYXBzLFxuICAgICAgICBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMsXG4gICAgICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIGVycm9yLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IHczYyBjYXBhYmlsaXRpZXMgcGF5bG9hZCB0aGF0IGNvbnRhaW5zIG9ubHkgdGhlIG1hdGNoaW5nIGNhcHMgaW4gYGFsd2F5c01hdGNoYFxuICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyA9IHtcbiAgICAgIGFsd2F5c01hdGNoOiB7Li4uaW5zZXJ0QXBwaXVtUHJlZml4ZXMoZGVzaXJlZENhcHMpfSxcbiAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHN9ICovICh7XG4gICAgZGVzaXJlZENhcHMsXG4gICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLFxuICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyxcbiAgICBwcm90b2NvbCxcbiAgfSk7XG59XG5cbi8qKlxuICogVGFrZXMgYSBjYXBhYmlsaXRpZXMgb2JqZWN0cyBhbmQgcHJlZml4ZXMgY2FwYWJpbGl0aWVzIHdpdGggYGFwcGl1bTpgXG4gKiBAcGFyYW0ge0NhcGFiaWxpdGllc30gY2FwcyBEZXNpcmVkIGNhcGFiaWxpdGllcyBvYmplY3RcbiAqIEByZXR1cm5zIHtBcHBpdW1XM0NDYXBhYmlsaXRpZXN9XG4gKi9cbmZ1bmN0aW9uIGluc2VydEFwcGl1bVByZWZpeGVzKGNhcHMpIHtcbiAgLy8gU3RhbmRhcmQsIG5vbi1wcmVmaXhlZCBjYXBhYmlsaXRpZXMgKHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViZHJpdmVyLyNkZm4tdGFibGUtb2Ytc3RhbmRhcmQtY2FwYWJpbGl0aWVzKVxuICBjb25zdCBTVEFOREFSRF9DQVBTID0gW1xuICAgICdicm93c2VyTmFtZScsXG4gICAgJ2Jyb3dzZXJWZXJzaW9uJyxcbiAgICAncGxhdGZvcm1OYW1lJyxcbiAgICAnYWNjZXB0SW5zZWN1cmVDZXJ0cycsXG4gICAgJ3BhZ2VMb2FkU3RyYXRlZ3knLFxuICAgICdwcm94eScsXG4gICAgJ3NldFdpbmRvd1JlY3QnLFxuICAgICd0aW1lb3V0cycsXG4gICAgJ3VuaGFuZGxlZFByb21wdEJlaGF2aW9yJyxcbiAgXTtcblxuICBsZXQgcHJlZml4ZWRDYXBzID0ge307XG4gIGZvciAobGV0IFtuYW1lLCB2YWx1ZV0gb2YgXy50b1BhaXJzKGNhcHMpKSB7XG4gICAgaWYgKFNUQU5EQVJEX0NBUFMuaW5jbHVkZXMobmFtZSkgfHwgbmFtZS5pbmNsdWRlcygnOicpKSB7XG4gICAgICBwcmVmaXhlZENhcHNbbmFtZV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJlZml4ZWRDYXBzW2Ake1czQ19BUFBJVU1fUFJFRklYfToke25hbWV9YF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHByZWZpeGVkQ2Fwcztcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtBcHBpdW1XM0NDYXBhYmlsaXRpZXN9IGNhcHNcbiAqIEByZXR1cm5zIHtDYXBhYmlsaXRpZXN9XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFwcGl1bVByZWZpeGVzKGNhcHMpIHtcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY2FwcykpIHtcbiAgICByZXR1cm4gY2FwcztcbiAgfVxuXG4gIC8qKiBAdHlwZSB7Q2FwYWJpbGl0aWVzfSAqL1xuICBjb25zdCBmaXhlZENhcHMgPSB7fTtcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoY2FwcykpIHtcbiAgICBmaXhlZENhcHNbcmVtb3ZlQXBwaXVtUHJlZml4KG5hbWUpXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBmaXhlZENhcHM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUFwcGl1bVByZWZpeChrZXkpIHtcbiAgY29uc3QgcHJlZml4ID0gYCR7VzNDX0FQUElVTV9QUkVGSVh9OmA7XG4gIHJldHVybiBfLnN0YXJ0c1dpdGgoa2V5LCBwcmVmaXgpID8ga2V5LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKSA6IGtleTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFja2FnZVZlcnNpb24ocGtnTmFtZSkge1xuICBjb25zdCBwa2dJbmZvID0gcmVxdWlyZShgJHtwa2dOYW1lfS9wYWNrYWdlLmpzb25gKSB8fCB7fTtcbiAgcmV0dXJuIHBrZ0luZm8udmVyc2lvbjtcbn1cblxuLyoqXG4gKiBQdWxscyB0aGUgaW5pdGlhbCB2YWx1ZXMgb2YgQXBwaXVtIHNldHRpbmdzIGZyb20gdGhlIGdpdmVuIGNhcGFiaWxpdGllcyBhcmd1bWVudC5cbiAqIEVhY2ggc2V0dGluZyBpdGVtIG11c3Qgc2F0aXNmeSB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiAqIGBzZXR0aW5nW3NldHRpbmdfbmFtZV06IHNldHRpbmdfdmFsdWVgXG4gKiBUaGUgY2FwYWJpbGl0aWVzIGFyZ3VtZW50IGl0c2VsZiBnZXRzIG11dGF0ZWQsIHNvIGl0IGRvZXMgbm90IGNvbnRhaW4gcGFyc2VkXG4gKiBzZXR0aW5ncyBhbnltb3JlIHRvIGF2b2lkIGZ1cnRoZXIgcGFyc2luZyBpc3N1ZXMuXG4gKiBDaGVja1xuICogaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vYmxvYi9tYXN0ZXIvZG9jcy9lbi9hZHZhbmNlZC1jb25jZXB0cy9zZXR0aW5ncy5tZFxuICogZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgYXZhaWxhYmxlIHNldHRpbmdzLlxuICpcbiAqIEBwYXJhbSB7P09iamVjdH0gY2FwcyAtIENhcGFiaWxpdGllcyBkaWN0aW9uYXJ5LiBJdCBpcyBtdXRhdGVkIGlmXG4gKiBvbmUgb3IgbW9yZSBzZXR0aW5ncyBoYXZlIGJlZW4gcHVsbGVkIGZyb20gaXRcbiAqIEByZXR1cm4ge09iamVjdH0gLSBBbiBlbXB0eSBkaWN0aW9uYXJ5IGlmIHRoZSBnaXZlbiBjYXBzIGNvbnRhaW5zIG5vXG4gKiBzZXR0aW5nIGl0ZW1zIG9yIGEgZGljdGlvbmFyeSBjb250YWluaW5nIHBhcnNlZCBBcHBpdW0gc2V0dGluZyBuYW1lcyBhbG9uZyB3aXRoXG4gKiB0aGVpciB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHB1bGxTZXR0aW5ncyhjYXBzKSB7XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KGNhcHMpIHx8IF8uaXNFbXB0eShjYXBzKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMoY2FwcykpIHtcbiAgICBjb25zdCBtYXRjaCA9IC9cXGJzZXR0aW5nc1xcWyhcXFMrKVxcXSQvLmV4ZWMoa2V5KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXN1bHRbbWF0Y2hbMV1dID0gdmFsdWU7XG4gICAgZGVsZXRlIGNhcHNba2V5XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQge1xuICBpbnNwZWN0LFxuICBwYXJzZUNhcHNGb3JJbm5lckRyaXZlcixcbiAgaW5zZXJ0QXBwaXVtUHJlZml4ZXMsXG4gIGdldFBhY2thZ2VWZXJzaW9uLFxuICBwdWxsU2V0dGluZ3MsXG4gIHJlbW92ZUFwcGl1bVByZWZpeGVzLFxufTtcblxuLyoqXG4gKiBAdG9kbyBwcm90b2NvbCBpcyBtb3JlIHNwZWNpZmljXG4gKiBAdHlwZWRlZiBQYXJzZWREcml2ZXJDYXBzXG4gKiBAcHJvcGVydHkge0NhcGFiaWxpdGllc30gZGVzaXJlZENhcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcm90b2NvbFxuICogQHByb3BlcnR5IHthbnl9IFtwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXNdXG4gKiBAcHJvcGVydHkge1czQ0NhcGFiaWxpdGllc30gW3Byb2Nlc3NlZFczQ0NhcGFiaWxpdGllc11cbiAqL1xuXG4vKipcbiAqIEB0b2RvIHByb3RvY29sIGlzIG1vcmUgc3BlY2lmaWNcbiAqIEB0eXBlZGVmIEludmFsaWRDYXBzXG4gKiBAcHJvcGVydHkge0Vycm9yfSBlcnJvclxuICogQHByb3BlcnR5IHtzdHJpbmd9IHByb3RvY29sXG4gKiBAcHJvcGVydHkge0NhcGFiaWxpdGllc30gW2Rlc2lyZWRDYXBzXVxuICogQHByb3BlcnR5IHthbnl9IFtwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXNdXG4gKiBAcHJvcGVydHkge1czQ0NhcGFiaWxpdGllc30gW3Byb2Nlc3NlZFczQ0NhcGFiaWxpdGllc11cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5XM0NDYXBhYmlsaXRpZXN9IFczQ0NhcGFiaWxpdGllc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNhcGFiaWxpdGllc30gQ2FwYWJpbGl0aWVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQXBwaXVtVzNDQ2FwYWJpbGl0aWVzfSBBcHBpdW1XM0NDYXBhYmlsaXRpZXNcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsaUJBQWlCLEdBQUcsUUFBMUI7QUFTQSxNQUFNQyxXQUFXLEdBQUdDLE9BQU8sQ0FBQ0MsTUFBUixDQUFlQyxLQUFuQzs7QUFPQSxNQUFNQyxPQUFPLEdBQUdDLGVBQUEsQ0FBRUMsSUFBRixDQUNkRCxlQUFBLENBQUVFLFlBQUYsQ0FDa0ZDLGFBRGxGLEVBRUU7RUFBQ0MsTUFBTSxFQUFFLElBQVQ7RUFBZUMsS0FBSyxFQUFFLElBQXRCO0VBQTRCQyxPQUFPLEVBQUUsQ0FBQ1g7QUFBdEMsQ0FGRixDQURjLEVBS2QsQ0FBQyxHQUFHWSxJQUFKLEtBQWE7RUFDWEMsZUFBQSxDQUFPQyxJQUFQLENBQVksR0FBR0YsSUFBZjtBQUNELENBUGEsQ0FBaEI7Ozs7QUFvQkEsU0FBU0csdUJBQVQsQ0FDRUMsa0JBREYsRUFFRUMsZUFGRixFQUdFQyxXQUFXLEdBQUcsRUFIaEIsRUFJRUMsbUJBQW1CLEdBQUcsRUFKeEIsRUFLRTtFQUVBLE1BQU1DLFVBQVUsR0FDZGYsZUFBQSxDQUFFZ0IsYUFBRixDQUFnQkosZUFBaEIsTUFDQ1osZUFBQSxDQUFFaUIsR0FBRixDQUFNTCxlQUFOLEVBQXVCLGFBQXZCLEtBQXlDWixlQUFBLENBQUVpQixHQUFGLENBQU1MLGVBQU4sRUFBdUIsWUFBdkIsQ0FEMUMsQ0FERjs7RUFHQSxNQUFNTSxhQUFhLEdBQUdsQixlQUFBLENBQUVnQixhQUFGLENBQWdCTCxrQkFBaEIsQ0FBdEI7O0VBQ0EsSUFBSVEsV0FBVyxHQUFtRCxFQUFsRTtFQUVBLElBQUlDLHdCQUFKO0VBRUEsSUFBSUMsMkJBQUo7O0VBRUEsSUFBSSxDQUFDTixVQUFMLEVBQWlCO0lBQ2YsT0FBbUM7TUFDakNPLFFBQVEsRUFBRUMscUJBQUEsQ0FBVUMsR0FEYTtNQUVqQ0MsS0FBSyxFQUFFLElBQUlDLEtBQUosQ0FBVSxxQ0FBVjtJQUYwQixDQUFuQztFQUlEOztFQUVELE1BQU07SUFBQ0Y7RUFBRCxJQUFRRCxxQkFBZDtFQUNBLE1BQU1ELFFBQVEsR0FBR0UsR0FBakI7RUFHQWIsa0JBQWtCLEdBQUdYLGVBQUEsQ0FBRTJCLFNBQUYsQ0FBWWhCLGtCQUFaLENBQXJCO0VBQ0FDLGVBQWUsR0FBR1osZUFBQSxDQUFFMkIsU0FBRixDQUFZZixlQUFaLENBQWxCO0VBQ0FFLG1CQUFtQixHQUFHZCxlQUFBLENBQUUyQixTQUFGLENBQVliLG1CQUFaLENBQXRCOztFQUVBLElBQUksQ0FBQ2QsZUFBQSxDQUFFNEIsT0FBRixDQUFVZCxtQkFBVixDQUFMLEVBQXFDO0lBQ25DLElBQUlDLFVBQUosRUFBZ0I7TUFDZCxLQUFLLE1BQU0sQ0FBQ2MsYUFBRCxFQUFnQkMsZUFBaEIsQ0FBWCxJQUErQzlCLGVBQUEsQ0FBRStCLE9BQUYsQ0FBVWpCLG1CQUFWLENBQS9DLEVBQStFO1FBQzdFLElBQUlrQixlQUFlLEdBQUcsS0FBdEI7O1FBRUEsS0FBSyxNQUFNQyxlQUFYLElBQThCckIsZUFBZSxDQUFDc0IsVUFBaEIsSUFBOEIsRUFBNUQsRUFBZ0U7VUFDOUQsSUFDRWxDLGVBQUEsQ0FBRWdCLGFBQUYsQ0FBZ0JpQixlQUFoQixLQUNBakMsZUFBQSxDQUFFaUIsR0FBRixDQUFNa0Isb0JBQW9CLENBQUNGLGVBQUQsQ0FBMUIsRUFBNkNHLGtCQUFrQixDQUFDUCxhQUFELENBQS9ELENBRkYsRUFHRTtZQUNBRyxlQUFlLEdBQUcsSUFBbEI7WUFDQTtVQUNEO1FBQ0Y7O1FBRURBLGVBQWUsR0FDYkEsZUFBZSxJQUNkaEMsZUFBQSxDQUFFZ0IsYUFBRixDQUFnQkosZUFBZSxDQUFDeUIsV0FBaEMsS0FDQ3JDLGVBQUEsQ0FBRWlCLEdBQUYsQ0FDRWtCLG9CQUFvQixDQUFDdkIsZUFBZSxDQUFDeUIsV0FBakIsQ0FEdEIsRUFFRUQsa0JBQWtCLENBQUNQLGFBQUQsQ0FGcEIsQ0FISjs7UUFPQSxJQUFJRyxlQUFKLEVBQXFCO1VBRW5CO1FBQ0Q7O1FBR0QsSUFBSWhDLGVBQUEsQ0FBRTRCLE9BQUYsQ0FBVWhCLGVBQWUsQ0FBQ3NCLFVBQTFCLENBQUosRUFBMkM7VUFDekN0QixlQUFlLENBQUNzQixVQUFoQixHQUE2QixDQUFDO1lBQUMsQ0FBQ0wsYUFBRCxHQUFpQkM7VUFBbEIsQ0FBRCxDQUE3QjtRQUNELENBRkQsTUFFTztVQUNMbEIsZUFBZSxDQUFDc0IsVUFBaEIsQ0FBMkIsQ0FBM0IsRUFBOEJMLGFBQTlCLElBQStDQyxlQUEvQztRQUNEO01BQ0Y7SUFDRjs7SUFDRCxJQUFJWixhQUFKLEVBQW1CO01BQ2pCUCxrQkFBa0IsR0FBRyxFQUNuQixHQUFHd0Isb0JBQW9CLENBQUNyQixtQkFBRCxDQURKO1FBRW5CLEdBQUdIO01BRmdCLENBQXJCO0lBSUQ7RUFDRjs7RUFHRCxJQUFJTyxhQUFKLEVBQW1CO0lBQ2pCRywyQkFBMkIsR0FBRyxFQUFDLEdBQUdWO0lBQUosQ0FBOUI7RUFDRDs7RUFHRCxJQUFJSSxVQUFKLEVBQWdCO0lBR2QsSUFBSTtNQUNGSSxXQUFXLEdBQUcsSUFBQW1CLCtCQUFBLEVBQW9CMUIsZUFBcEIsRUFBcUNDLFdBQXJDLEVBQWtELElBQWxELENBQWQ7SUFDRCxDQUZELENBRUUsT0FBT1ksS0FBUCxFQUFjO01BQ2RqQixlQUFBLENBQU9DLElBQVAsQ0FBYSxxQ0FBb0NnQixLQUFLLENBQUNjLE9BQVEsRUFBL0Q7O01BQ0EsT0FBbUM7UUFDakNwQixXQURpQztRQUVqQ0UsMkJBRmlDO1FBR2pDRCx3QkFIaUM7UUFJakNFLFFBSmlDO1FBS2pDRztNQUxpQyxDQUFuQztJQU9EOztJQUdETCx3QkFBd0IsR0FBRztNQUN6QmlCLFdBQVcsRUFBRSxFQUFDLEdBQUdHLG9CQUFvQixDQUFDckIsV0FBRDtNQUF4QixDQURZO01BRXpCZSxVQUFVLEVBQUUsQ0FBQyxFQUFEO0lBRmEsQ0FBM0I7RUFJRDs7RUFFRCxPQUF3QztJQUN0Q2YsV0FEc0M7SUFFdENFLDJCQUZzQztJQUd0Q0Qsd0JBSHNDO0lBSXRDRTtFQUpzQyxDQUF4QztBQU1EOztBQU9ELFNBQVNrQixvQkFBVCxDQUE4QkMsSUFBOUIsRUFBb0M7RUFFbEMsTUFBTUMsYUFBYSxHQUFHLENBQ3BCLGFBRG9CLEVBRXBCLGdCQUZvQixFQUdwQixjQUhvQixFQUlwQixxQkFKb0IsRUFLcEIsa0JBTG9CLEVBTXBCLE9BTm9CLEVBT3BCLGVBUG9CLEVBUXBCLFVBUm9CLEVBU3BCLHlCQVRvQixDQUF0QjtFQVlBLElBQUlDLFlBQVksR0FBRyxFQUFuQjs7RUFDQSxLQUFLLElBQUksQ0FBQ0MsSUFBRCxFQUFPQyxLQUFQLENBQVQsSUFBMEI3QyxlQUFBLENBQUUrQixPQUFGLENBQVVVLElBQVYsQ0FBMUIsRUFBMkM7SUFDekMsSUFBSUMsYUFBYSxDQUFDSSxRQUFkLENBQXVCRixJQUF2QixLQUFnQ0EsSUFBSSxDQUFDRSxRQUFMLENBQWMsR0FBZCxDQUFwQyxFQUF3RDtNQUN0REgsWUFBWSxDQUFDQyxJQUFELENBQVosR0FBcUJDLEtBQXJCO0lBQ0QsQ0FGRCxNQUVPO01BQ0xGLFlBQVksQ0FBRSxHQUFFakQsaUJBQWtCLElBQUdrRCxJQUFLLEVBQTlCLENBQVosR0FBK0NDLEtBQS9DO0lBQ0Q7RUFDRjs7RUFDRCxPQUFPRixZQUFQO0FBQ0Q7O0FBT0QsU0FBU1Isb0JBQVQsQ0FBOEJNLElBQTlCLEVBQW9DO0VBQ2xDLElBQUksQ0FBQ3pDLGVBQUEsQ0FBRWdCLGFBQUYsQ0FBZ0J5QixJQUFoQixDQUFMLEVBQTRCO0lBQzFCLE9BQU9BLElBQVA7RUFDRDs7RUFHRCxNQUFNTSxTQUFTLEdBQUcsRUFBbEI7O0VBQ0EsS0FBSyxJQUFJLENBQUNILElBQUQsRUFBT0MsS0FBUCxDQUFULElBQTBCN0MsZUFBQSxDQUFFK0IsT0FBRixDQUFVVSxJQUFWLENBQTFCLEVBQTJDO0lBQ3pDTSxTQUFTLENBQUNYLGtCQUFrQixDQUFDUSxJQUFELENBQW5CLENBQVQsR0FBc0NDLEtBQXRDO0VBQ0Q7O0VBQ0QsT0FBT0UsU0FBUDtBQUNEOztBQUVELFNBQVNYLGtCQUFULENBQTRCWSxHQUE1QixFQUFpQztFQUMvQixNQUFNQyxNQUFNLEdBQUksR0FBRXZELGlCQUFrQixHQUFwQztFQUNBLE9BQU9NLGVBQUEsQ0FBRWtELFVBQUYsQ0FBYUYsR0FBYixFQUFrQkMsTUFBbEIsSUFBNEJELEdBQUcsQ0FBQ0csU0FBSixDQUFjRixNQUFNLENBQUNHLE1BQXJCLENBQTVCLEdBQTJESixHQUFsRTtBQUNEOztBQUVELFNBQVNLLGlCQUFULENBQTJCQyxPQUEzQixFQUFvQztFQUNsQyxNQUFNQyxPQUFPLEdBQUdDLE9BQU8sQ0FBRSxHQUFFRixPQUFRLGVBQVosQ0FBUCxJQUFzQyxFQUF0RDtFQUNBLE9BQU9DLE9BQU8sQ0FBQ0UsT0FBZjtBQUNEOztBQWtCRCxTQUFTQyxZQUFULENBQXNCakIsSUFBdEIsRUFBNEI7RUFDMUIsSUFBSSxDQUFDekMsZUFBQSxDQUFFZ0IsYUFBRixDQUFnQnlCLElBQWhCLENBQUQsSUFBMEJ6QyxlQUFBLENBQUU0QixPQUFGLENBQVVhLElBQVYsQ0FBOUIsRUFBK0M7SUFDN0MsT0FBTyxFQUFQO0VBQ0Q7O0VBRUQsTUFBTWtCLE1BQU0sR0FBRyxFQUFmOztFQUNBLEtBQUssTUFBTSxDQUFDWCxHQUFELEVBQU1ILEtBQU4sQ0FBWCxJQUEyQjdDLGVBQUEsQ0FBRStCLE9BQUYsQ0FBVVUsSUFBVixDQUEzQixFQUE0QztJQUMxQyxNQUFNbUIsS0FBSyxHQUFHLHVCQUF1QkMsSUFBdkIsQ0FBNEJiLEdBQTVCLENBQWQ7O0lBQ0EsSUFBSSxDQUFDWSxLQUFMLEVBQVk7TUFDVjtJQUNEOztJQUVERCxNQUFNLENBQUNDLEtBQUssQ0FBQyxDQUFELENBQU4sQ0FBTixHQUFtQmYsS0FBbkI7SUFDQSxPQUFPSixJQUFJLENBQUNPLEdBQUQsQ0FBWDtFQUNEOztFQUNELE9BQU9XLE1BQVA7QUFDRCJ9
|
|
252
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXM0NfQVBQSVVNX1BSRUZJWCIsImlzU3Rkb3V0VFRZIiwicHJvY2VzcyIsInN0ZG91dCIsImlzVFRZIiwiaW5zcGVjdCIsIl8iLCJmbG93IiwicGFydGlhbFJpZ2h0IiwiZHVtcCIsImNvbG9ycyIsImRlcHRoIiwiY29tcGFjdCIsImFyZ3MiLCJsb2dnZXIiLCJpbmZvIiwicGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIiLCJqc29ud3BDYXBhYmlsaXRpZXMiLCJ3M2NDYXBhYmlsaXRpZXMiLCJjb25zdHJhaW50cyIsImRlZmF1bHRDYXBhYmlsaXRpZXMiLCJoYXNXM0NDYXBzIiwiaXNQbGFpbk9iamVjdCIsImhhcyIsImhhc0pTT05XUENhcHMiLCJkZXNpcmVkQ2FwcyIsInByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyIsInByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyIsInByb3RvY29sIiwiUFJPVE9DT0xTIiwiVzNDIiwiZXJyb3IiLCJFcnJvciIsImNsb25lRGVlcCIsImlzRW1wdHkiLCJkZWZhdWx0Q2FwS2V5IiwiZGVmYXVsdENhcFZhbHVlIiwidG9QYWlycyIsImlzQ2FwQWxyZWFkeVNldCIsImZpcnN0TWF0Y2hFbnRyeSIsImZpcnN0TWF0Y2giLCJyZW1vdmVBcHBpdW1QcmVmaXhlcyIsInJlbW92ZUFwcGl1bVByZWZpeCIsImFsd2F5c01hdGNoIiwicHJvY2Vzc0NhcGFiaWxpdGllcyIsIm1lc3NhZ2UiLCJpbnNlcnRBcHBpdW1QcmVmaXhlcyIsImNhcHMiLCJTVEFOREFSRF9DQVBTIiwicHJlZml4ZWRDYXBzIiwibmFtZSIsInZhbHVlIiwiaW5jbHVkZXMiLCJmaXhlZENhcHMiLCJrZXkiLCJwcmVmaXgiLCJzdGFydHNXaXRoIiwic3Vic3RyaW5nIiwibGVuZ3RoIiwiZ2V0UGFja2FnZVZlcnNpb24iLCJwa2dOYW1lIiwicGtnSW5mbyIsInJlcXVpcmUiLCJ2ZXJzaW9uIiwiYWRqdXN0Tm9kZVBhdGgiLCJzZWxmUm9vdCIsIm5vZGUiLCJnZXRNb2R1bGVSb290U3luYyIsIl9fZmlsZW5hbWUiLCJwYXRoIiwiZGlybmFtZSIsIm5vZGVNb2R1bGVzUm9vdCIsInJlZnJlc2hSZXF1aXJlUGF0aHMiLCJNb2R1bGUiLCJfaW5pdFBhdGhzIiwiZSIsImVudiIsIk5PREVfUEFUSCIsIkFQUElVTV9PTUlUX1BFRVJfREVQUyIsIm5vZGVQYXRoUGFydHMiLCJzcGxpdCIsImRlbGltaXRlciIsInB1c2giLCJqb2luIiwid2l0aG91dCIsInB1bGxTZXR0aW5ncyIsInJlc3VsdCIsIm1hdGNoIiwiZXhlYyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQge3Byb2Nlc3NDYXBhYmlsaXRpZXMsIFBST1RPQ09MU30gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQge2luc3BlY3QgYXMgZHVtcH0gZnJvbSAndXRpbCc7XG5pbXBvcnQge25vZGV9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuY29uc3QgVzNDX0FQUElVTV9QUkVGSVggPSAnYXBwaXVtJztcblxuLyoqXG4gKlxuICogSWYgYHN0ZG91dGAgaXMgYSBUVFksIHRoaXMgaXMgYHRydWVgLlxuICpcbiAqIFVzZWQgZm9yIHRpZ2h0ZXIgY29udHJvbCBvdmVyIGxvZyBvdXRwdXQuXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaXNTdGRvdXRUVFkgPSBwcm9jZXNzLnN0ZG91dC5pc1RUWTtcblxuLyoqXG4gKiBEdW1wcyB0byB2YWx1ZSB0byB0aGUgY29uc29sZSB1c2luZyBgaW5mb2AgbG9nZ2VyLlxuICpcbiAqIEB0b2RvIE1heSB3YW50IHRvIGZvcmNlIGNvbG9yIHRvIGJlIGBmYWxzZWAgaWYge0BsaW5rIGlzU3Rkb3V0VFRZfSBpcyBgZmFsc2VgLlxuICovXG5jb25zdCBpbnNwZWN0ID0gXy5mbG93KFxuICBfLnBhcnRpYWxSaWdodChcbiAgICAvKiogQHR5cGUgeyhvYmplY3Q6IGFueSwgb3B0aW9uczogaW1wb3J0KCd1dGlsJykuSW5zcGVjdE9wdGlvbnMpID0+IHN0cmluZ30gKi8gKGR1bXApLFxuICAgIHtjb2xvcnM6IHRydWUsIGRlcHRoOiBudWxsLCBjb21wYWN0OiAhaXNTdGRvdXRUVFl9XG4gICksXG4gICguLi5hcmdzKSA9PiB7XG4gICAgbG9nZ2VyLmluZm8oLi4uYXJncyk7XG4gIH1cbik7XG5cbi8qKlxuICogVGFrZXMgdGhlIGNhcHMgdGhhdCB3ZXJlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGFuZCB0cmFuc2xhdGVzIHRoZW1cbiAqIGludG8gY2FwcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBpbm5lciBkcml2ZXJzLlxuICpcbiAqIEBwYXJhbSB7YW55fSBqc29ud3BDYXBhYmlsaXRpZXNcbiAqIEBwYXJhbSB7VzNDQ2FwYWJpbGl0aWVzfSB3M2NDYXBhYmlsaXRpZXNcbiAqIEBwYXJhbSB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ29uc3RyYWludHN9IGNvbnN0cmFpbnRzXG4gKiBAcGFyYW0ge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRlZmF1bHRDYXBhYmlsaXRpZXNDb25maWd9IFtkZWZhdWx0Q2FwYWJpbGl0aWVzXVxuICogQHJldHVybnMge1BhcnNlZERyaXZlckNhcHN8SW52YWxpZENhcHN9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyKFxuICBqc29ud3BDYXBhYmlsaXRpZXMsXG4gIHczY0NhcGFiaWxpdGllcyxcbiAgY29uc3RyYWludHMgPSB7fSxcbiAgZGVmYXVsdENhcGFiaWxpdGllcyA9IHt9XG4pIHtcbiAgLy8gQ2hlY2sgaWYgdGhlIGNhbGxlciBzZW50IEpTT05XUCBjYXBzLCBXM0MgY2Fwcywgb3IgYm90aFxuICBjb25zdCBoYXNXM0NDYXBzID1cbiAgICBfLmlzUGxhaW5PYmplY3QodzNjQ2FwYWJpbGl0aWVzKSAmJlxuICAgIChfLmhhcyh3M2NDYXBhYmlsaXRpZXMsICdhbHdheXNNYXRjaCcpIHx8IF8uaGFzKHczY0NhcGFiaWxpdGllcywgJ2ZpcnN0TWF0Y2gnKSk7XG4gIGNvbnN0IGhhc0pTT05XUENhcHMgPSBfLmlzUGxhaW5PYmplY3QoanNvbndwQ2FwYWJpbGl0aWVzKTtcbiAgbGV0IGRlc2lyZWRDYXBzID0gLyoqIEB0eXBlIHtQYXJzZWREcml2ZXJDYXBzWydkZXNpcmVkQ2FwcyddfSAqLyAoe30pO1xuICAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHNbJ3Byb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyddfSAqL1xuICBsZXQgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzO1xuICAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHNbJ3Byb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyddfSAqL1xuICBsZXQgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzO1xuXG4gIGlmICghaGFzVzNDQ2Fwcykge1xuICAgIHJldHVybiAvKiogQHR5cGUge0ludmFsaWRDYXBzfSAqLyAoe1xuICAgICAgcHJvdG9jb2w6IFBST1RPQ09MUy5XM0MsXG4gICAgICBlcnJvcjogbmV3IEVycm9yKCdXM0MgY2FwYWJpbGl0aWVzIHNob3VsZCBiZSBwcm92aWRlZCcpLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qge1czQ30gPSBQUk9UT0NPTFM7XG4gIGNvbnN0IHByb3RvY29sID0gVzNDO1xuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBtdXRhdGUgdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuICBqc29ud3BDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChqc29ud3BDYXBhYmlsaXRpZXMpO1xuICB3M2NDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcCh3M2NDYXBhYmlsaXRpZXMpO1xuICBkZWZhdWx0Q2FwYWJpbGl0aWVzID0gXy5jbG9uZURlZXAoZGVmYXVsdENhcGFiaWxpdGllcyk7XG5cbiAgaWYgKCFfLmlzRW1wdHkoZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICBpZiAoaGFzVzNDQ2Fwcykge1xuICAgICAgZm9yIChjb25zdCBbZGVmYXVsdENhcEtleSwgZGVmYXVsdENhcFZhbHVlXSBvZiBfLnRvUGFpcnMoZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICAgICAgbGV0IGlzQ2FwQWxyZWFkeVNldCA9IGZhbHNlO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiBmaXJzdE1hdGNoIGVudHJpZXNcbiAgICAgICAgZm9yIChjb25zdCBmaXJzdE1hdGNoRW50cnkgb2YgdzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggfHwgW10pIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBfLmlzUGxhaW5PYmplY3QoZmlyc3RNYXRjaEVudHJ5KSAmJlxuICAgICAgICAgICAgXy5oYXMocmVtb3ZlQXBwaXVtUHJlZml4ZXMoZmlyc3RNYXRjaEVudHJ5KSwgcmVtb3ZlQXBwaXVtUHJlZml4KGRlZmF1bHRDYXBLZXkpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNDYXBBbHJlYWR5U2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiB0aGUga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiBhbHdheXNNYXRjaCBlbnRyaWVzXG4gICAgICAgIGlzQ2FwQWxyZWFkeVNldCA9XG4gICAgICAgICAgaXNDYXBBbHJlYWR5U2V0IHx8XG4gICAgICAgICAgKF8uaXNQbGFpbk9iamVjdCh3M2NDYXBhYmlsaXRpZXMuYWx3YXlzTWF0Y2gpICYmXG4gICAgICAgICAgICBfLmhhcyhcbiAgICAgICAgICAgICAgcmVtb3ZlQXBwaXVtUHJlZml4ZXModzNjQ2FwYWJpbGl0aWVzLmFsd2F5c01hdGNoKSxcbiAgICAgICAgICAgICAgcmVtb3ZlQXBwaXVtUHJlZml4KGRlZmF1bHRDYXBLZXkpXG4gICAgICAgICAgICApKTtcbiAgICAgICAgaWYgKGlzQ2FwQWxyZWFkeVNldCkge1xuICAgICAgICAgIC8vIFNraXAgaWYgdGhlIGtleSBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIHByb3ZpZGVkIGNhcHNcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkgYWRkIHRoZSBkZWZhdWx0IGNhcGFiaWxpdHkgaWYgaXQgaXMgbm90IG92ZXJyaWRkZW5cbiAgICAgICAgaWYgKF8uaXNFbXB0eSh3M2NDYXBhYmlsaXRpZXMuZmlyc3RNYXRjaCkpIHtcbiAgICAgICAgICB3M2NDYXBhYmlsaXRpZXMuZmlyc3RNYXRjaCA9IFt7W2RlZmF1bHRDYXBLZXldOiBkZWZhdWx0Q2FwVmFsdWV9XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3M2NDYXBhYmlsaXRpZXMuZmlyc3RNYXRjaFswXVtkZWZhdWx0Q2FwS2V5XSA9IGRlZmF1bHRDYXBWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGFzSlNPTldQQ2Fwcykge1xuICAgICAganNvbndwQ2FwYWJpbGl0aWVzID0ge1xuICAgICAgICAuLi5yZW1vdmVBcHBpdW1QcmVmaXhlcyhkZWZhdWx0Q2FwYWJpbGl0aWVzKSxcbiAgICAgICAgLi4uanNvbndwQ2FwYWJpbGl0aWVzLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXQgTUpTT05XUCBjYXBzXG4gIGlmIChoYXNKU09OV1BDYXBzKSB7XG4gICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzID0gey4uLmpzb253cENhcGFiaWxpdGllc307XG4gIH1cblxuICAvLyBHZXQgVzNDIGNhcHNcbiAgaWYgKGhhc1czQ0NhcHMpIHtcbiAgICAvLyBDYWxsIHRoZSBwcm9jZXNzIGNhcGFiaWxpdGllcyBhbGdvcml0aG0gdG8gZmluZCBtYXRjaGluZyBjYXBzIG9uIHRoZSBXM0NcbiAgICAvLyAoc2VlOiBodHRwczovL2dpdGh1Yi5jb20vamxpcHBzL3NpbXBsZS13ZC1zcGVjI3Byb2Nlc3NpbmctY2FwYWJpbGl0aWVzKVxuICAgIHRyeSB7XG4gICAgICBkZXNpcmVkQ2FwcyA9IHByb2Nlc3NDYXBhYmlsaXRpZXModzNjQ2FwYWJpbGl0aWVzLCBjb25zdHJhaW50cywgdHJ1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBDb3VsZCBub3QgcGFyc2UgVzNDIGNhcGFiaWxpdGllczogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7SW52YWxpZENhcHN9ICovICh7XG4gICAgICAgIGRlc2lyZWRDYXBzLFxuICAgICAgICBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMsXG4gICAgICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIGVycm9yLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IHczYyBjYXBhYmlsaXRpZXMgcGF5bG9hZCB0aGF0IGNvbnRhaW5zIG9ubHkgdGhlIG1hdGNoaW5nIGNhcHMgaW4gYGFsd2F5c01hdGNoYFxuICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyA9IHtcbiAgICAgIGFsd2F5c01hdGNoOiB7Li4uaW5zZXJ0QXBwaXVtUHJlZml4ZXMoZGVzaXJlZENhcHMpfSxcbiAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHN9ICovICh7XG4gICAgZGVzaXJlZENhcHMsXG4gICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLFxuICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyxcbiAgICBwcm90b2NvbCxcbiAgfSk7XG59XG5cbi8qKlxuICogVGFrZXMgYSBjYXBhYmlsaXRpZXMgb2JqZWN0cyBhbmQgcHJlZml4ZXMgY2FwYWJpbGl0aWVzIHdpdGggYGFwcGl1bTpgXG4gKiBAcGFyYW0ge0NhcGFiaWxpdGllc30gY2FwcyBEZXNpcmVkIGNhcGFiaWxpdGllcyBvYmplY3RcbiAqIEByZXR1cm5zIHtBcHBpdW1XM0NDYXBhYmlsaXRpZXN9XG4gKi9cbmZ1bmN0aW9uIGluc2VydEFwcGl1bVByZWZpeGVzKGNhcHMpIHtcbiAgLy8gU3RhbmRhcmQsIG5vbi1wcmVmaXhlZCBjYXBhYmlsaXRpZXMgKHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViZHJpdmVyLyNkZm4tdGFibGUtb2Ytc3RhbmRhcmQtY2FwYWJpbGl0aWVzKVxuICBjb25zdCBTVEFOREFSRF9DQVBTID0gW1xuICAgICdicm93c2VyTmFtZScsXG4gICAgJ2Jyb3dzZXJWZXJzaW9uJyxcbiAgICAncGxhdGZvcm1OYW1lJyxcbiAgICAnYWNjZXB0SW5zZWN1cmVDZXJ0cycsXG4gICAgJ3BhZ2VMb2FkU3RyYXRlZ3knLFxuICAgICdwcm94eScsXG4gICAgJ3NldFdpbmRvd1JlY3QnLFxuICAgICd0aW1lb3V0cycsXG4gICAgJ3VuaGFuZGxlZFByb21wdEJlaGF2aW9yJyxcbiAgXTtcblxuICBsZXQgcHJlZml4ZWRDYXBzID0ge307XG4gIGZvciAobGV0IFtuYW1lLCB2YWx1ZV0gb2YgXy50b1BhaXJzKGNhcHMpKSB7XG4gICAgaWYgKFNUQU5EQVJEX0NBUFMuaW5jbHVkZXMobmFtZSkgfHwgbmFtZS5pbmNsdWRlcygnOicpKSB7XG4gICAgICBwcmVmaXhlZENhcHNbbmFtZV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJlZml4ZWRDYXBzW2Ake1czQ19BUFBJVU1fUFJFRklYfToke25hbWV9YF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHByZWZpeGVkQ2Fwcztcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtBcHBpdW1XM0NDYXBhYmlsaXRpZXN9IGNhcHNcbiAqIEByZXR1cm5zIHtDYXBhYmlsaXRpZXN9XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFwcGl1bVByZWZpeGVzKGNhcHMpIHtcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY2FwcykpIHtcbiAgICByZXR1cm4gY2FwcztcbiAgfVxuXG4gIC8qKiBAdHlwZSB7Q2FwYWJpbGl0aWVzfSAqL1xuICBjb25zdCBmaXhlZENhcHMgPSB7fTtcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoY2FwcykpIHtcbiAgICBmaXhlZENhcHNbcmVtb3ZlQXBwaXVtUHJlZml4KG5hbWUpXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBmaXhlZENhcHM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUFwcGl1bVByZWZpeChrZXkpIHtcbiAgY29uc3QgcHJlZml4ID0gYCR7VzNDX0FQUElVTV9QUkVGSVh9OmA7XG4gIHJldHVybiBfLnN0YXJ0c1dpdGgoa2V5LCBwcmVmaXgpID8ga2V5LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKSA6IGtleTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFja2FnZVZlcnNpb24ocGtnTmFtZSkge1xuICBjb25zdCBwa2dJbmZvID0gcmVxdWlyZShgJHtwa2dOYW1lfS9wYWNrYWdlLmpzb25gKSB8fCB7fTtcbiAgcmV0dXJuIHBrZ0luZm8udmVyc2lvbjtcbn1cblxuLyoqXG4gKiBBZGp1c3RzIE5PREVfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSxcbiAqIHNvIGRyaXZlcnMgYW5kIHBsdWdpbnMgY291bGQgbG9hZCB0aGVpciBwZWVyIGRlcGVuZGVuY2llcy5cbiAqIFJlYWQgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9tb2R1bGVzLmh0bWwjbG9hZGluZy1mcm9tLXRoZS1nbG9iYWwtZm9sZGVyc1xuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBhZGp1c3ROb2RlUGF0aCgpIHtcbiAgY29uc3Qgc2VsZlJvb3QgPSBub2RlLmdldE1vZHVsZVJvb3RTeW5jKCdhcHBpdW0nLCBfX2ZpbGVuYW1lKTtcbiAgaWYgKCFzZWxmUm9vdCB8fCBwYXRoLmRpcm5hbWUoc2VsZlJvb3QpLmxlbmd0aCA+PSBzZWxmUm9vdC5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgbm9kZU1vZHVsZXNSb290ID0gcGF0aC5kaXJuYW1lKHNlbGZSb290KTtcblxuICBjb25zdCByZWZyZXNoUmVxdWlyZVBhdGhzID0gKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyAhIFRoaXMgaGFjayBhbGxvd3MgdXMgdG8gYXZvaWQgbW9kaWZpY2F0aW9uIG9mIGltcG9ydFxuICAgICAgLy8gISBzdGF0ZW1lbnRzIGluIGNsaWVudCBtb2R1bGVzLiBJdCB1c2VzIGEgcHJpdmF0ZSBBUEkgdGhvdWdoLFxuICAgICAgLy8gISBzbyBpdCBjb3VsZCBicmVhayAobWF5YmUsIGV2ZW50dWFsbHkpLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2JyYW5uZW1hbi84MDQ4NTIwIzctdGhlLWhhY2tcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJlcXVpcmUoJ21vZHVsZScpLk1vZHVsZS5faW5pdFBhdGhzKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgTW9kdWxlIGluaXQgcGF0aHMgY2Fubm90IGJlIHJlZnJlc2hlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICBpZiAoIXByb2Nlc3MuZW52Lk5PREVfUEFUSCkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfUEFUSCA9IG5vZGVNb2R1bGVzUm9vdDtcbiAgICBpZiAocmVmcmVzaFJlcXVpcmVQYXRocygpKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgU2V0dGluZyBOT0RFX1BBVEggdG8gJyR7bm9kZU1vZHVsZXNSb290fSdgKTtcbiAgICAgIHByb2Nlc3MuZW52LkFQUElVTV9PTUlUX1BFRVJfREVQUyA9ICcxJztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52Lk5PREVfUEFUSDtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgbm9kZVBhdGhQYXJ0cyA9IHByb2Nlc3MuZW52Lk5PREVfUEFUSC5zcGxpdChwYXRoLmRlbGltaXRlcik7XG4gIGlmIChub2RlUGF0aFBhcnRzLmluY2x1ZGVzKG5vZGVNb2R1bGVzUm9vdCkpIHtcbiAgICBsb2dnZXIuaW5mbyhgTk9ERV9QQVRIIGFscmVhZHkgaW5jbHVkZXMgJyR7bm9kZU1vZHVsZXNSb290fSdgKTtcbiAgICBwcm9jZXNzLmVudi5BUFBJVU1fT01JVF9QRUVSX0RFUFMgPSAnMSc7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbm9kZVBhdGhQYXJ0cy5wdXNoKG5vZGVNb2R1bGVzUm9vdCk7XG4gIHByb2Nlc3MuZW52Lk5PREVfUEFUSCA9IG5vZGVQYXRoUGFydHMuam9pbihwYXRoLmRlbGltaXRlcik7XG4gIGlmIChyZWZyZXNoUmVxdWlyZVBhdGhzKCkpIHtcbiAgICBsb2dnZXIuaW5mbyhgQWRkaW5nICcke25vZGVNb2R1bGVzUm9vdH0nIHRvIE5PREVfUEFUSGApO1xuICAgIHByb2Nlc3MuZW52LkFQUElVTV9PTUlUX1BFRVJfREVQUyA9ICcxJztcbiAgfSBlbHNlIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX1BBVEggPSBfLndpdGhvdXQobm9kZVBhdGhQYXJ0cywgbm9kZU1vZHVsZXNSb290KS5qb2luKHBhdGguZGVsaW1pdGVyKTtcbiAgfVxufVxuXG4vKipcbiAqIFB1bGxzIHRoZSBpbml0aWFsIHZhbHVlcyBvZiBBcHBpdW0gc2V0dGluZ3MgZnJvbSB0aGUgZ2l2ZW4gY2FwYWJpbGl0aWVzIGFyZ3VtZW50LlxuICogRWFjaCBzZXR0aW5nIGl0ZW0gbXVzdCBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuICogYHNldHRpbmdbc2V0dGluZ19uYW1lXTogc2V0dGluZ192YWx1ZWBcbiAqIFRoZSBjYXBhYmlsaXRpZXMgYXJndW1lbnQgaXRzZWxmIGdldHMgbXV0YXRlZCwgc28gaXQgZG9lcyBub3QgY29udGFpbiBwYXJzZWRcbiAqIHNldHRpbmdzIGFueW1vcmUgdG8gYXZvaWQgZnVydGhlciBwYXJzaW5nIGlzc3Vlcy5cbiAqIENoZWNrXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9ibG9iL21hc3Rlci9kb2NzL2VuL2FkdmFuY2VkLWNvbmNlcHRzL3NldHRpbmdzLm1kXG4gKiBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBhdmFpbGFibGUgc2V0dGluZ3MuXG4gKlxuICogQHBhcmFtIHs/T2JqZWN0fSBjYXBzIC0gQ2FwYWJpbGl0aWVzIGRpY3Rpb25hcnkuIEl0IGlzIG11dGF0ZWQgaWZcbiAqIG9uZSBvciBtb3JlIHNldHRpbmdzIGhhdmUgYmVlbiBwdWxsZWQgZnJvbSBpdFxuICogQHJldHVybiB7T2JqZWN0fSAtIEFuIGVtcHR5IGRpY3Rpb25hcnkgaWYgdGhlIGdpdmVuIGNhcHMgY29udGFpbnMgbm9cbiAqIHNldHRpbmcgaXRlbXMgb3IgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgcGFyc2VkIEFwcGl1bSBzZXR0aW5nIG5hbWVzIGFsb25nIHdpdGhcbiAqIHRoZWlyIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gcHVsbFNldHRpbmdzKGNhcHMpIHtcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY2FwcykgfHwgXy5pc0VtcHR5KGNhcHMpKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhjYXBzKSkge1xuICAgIGNvbnN0IG1hdGNoID0gL1xcYnNldHRpbmdzXFxbKFxcUyspXFxdJC8uZXhlYyhrZXkpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc3VsdFttYXRjaFsxXV0gPSB2YWx1ZTtcbiAgICBkZWxldGUgY2Fwc1trZXldO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCB7XG4gIGluc3BlY3QsXG4gIHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyLFxuICBpbnNlcnRBcHBpdW1QcmVmaXhlcyxcbiAgZ2V0UGFja2FnZVZlcnNpb24sXG4gIHB1bGxTZXR0aW5ncyxcbiAgcmVtb3ZlQXBwaXVtUHJlZml4ZXMsXG4gIGFkanVzdE5vZGVQYXRoLFxufTtcblxuLyoqXG4gKiBAdG9kbyBwcm90b2NvbCBpcyBtb3JlIHNwZWNpZmljXG4gKiBAdHlwZWRlZiBQYXJzZWREcml2ZXJDYXBzXG4gKiBAcHJvcGVydHkge0NhcGFiaWxpdGllc30gZGVzaXJlZENhcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcm90b2NvbFxuICogQHByb3BlcnR5IHthbnl9IFtwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXNdXG4gKiBAcHJvcGVydHkge1czQ0NhcGFiaWxpdGllc30gW3Byb2Nlc3NlZFczQ0NhcGFiaWxpdGllc11cbiAqL1xuXG4vKipcbiAqIEB0b2RvIHByb3RvY29sIGlzIG1vcmUgc3BlY2lmaWNcbiAqIEB0eXBlZGVmIEludmFsaWRDYXBzXG4gKiBAcHJvcGVydHkge0Vycm9yfSBlcnJvclxuICogQHByb3BlcnR5IHtzdHJpbmd9IHByb3RvY29sXG4gKiBAcHJvcGVydHkge0NhcGFiaWxpdGllc30gW2Rlc2lyZWRDYXBzXVxuICogQHByb3BlcnR5IHthbnl9IFtwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXNdXG4gKiBAcHJvcGVydHkge1czQ0NhcGFiaWxpdGllc30gW3Byb2Nlc3NlZFczQ0NhcGFiaWxpdGllc11cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5XM0NDYXBhYmlsaXRpZXN9IFczQ0NhcGFiaWxpdGllc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNhcGFiaWxpdGllc30gQ2FwYWJpbGl0aWVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQXBw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
|