appium-android-driver 5.0.6 → 5.0.9
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/README.md +0 -1
- package/build/lib/commands/actions.js +16 -20
- package/build/lib/commands/app-management.js +15 -17
- package/build/lib/commands/context.js +46 -66
- package/build/lib/commands/coverage.js +2 -6
- package/build/lib/commands/element.js +3 -9
- package/build/lib/commands/emu-console.js +3 -5
- package/build/lib/commands/execute.js +3 -6
- package/build/lib/commands/file-actions.js +22 -29
- package/build/lib/commands/general.js +18 -30
- package/build/lib/commands/ime.js +8 -21
- package/build/lib/commands/network.js +14 -27
- package/build/lib/commands/performance.js +3 -6
- package/build/lib/commands/recordscreen.js +27 -38
- package/build/lib/commands/shell.js +6 -7
- package/build/lib/commands/streamscreen.js +29 -43
- package/build/lib/commands/system-bars.js +10 -16
- package/build/lib/commands/touch.js +4 -10
- package/build/lib/driver.js +61 -67
- package/build/lib/webview-helpers.js +2 -7
- package/lib/commands/actions.js +18 -19
- package/lib/commands/app-management.js +13 -12
- package/lib/commands/context.js +36 -40
- package/lib/commands/coverage.js +1 -4
- package/lib/commands/element.js +2 -3
- package/lib/commands/emu-console.js +2 -2
- package/lib/commands/execute.js +2 -3
- package/lib/commands/file-actions.js +31 -25
- package/lib/commands/general.js +16 -18
- package/lib/commands/ime.js +7 -8
- package/lib/commands/network.js +15 -16
- package/lib/commands/performance.js +2 -3
- package/lib/commands/recordscreen.js +23 -22
- package/lib/commands/shell.js +6 -6
- package/lib/commands/streamscreen.js +22 -23
- package/lib/commands/system-bars.js +11 -10
- package/lib/commands/touch.js +3 -4
- package/lib/driver.js +45 -46
- package/lib/webview-helpers.js +1 -7
- package/package.json +2 -2
|
@@ -15,12 +15,12 @@ var _androidHelpers = _interopRequireDefault(require("../android-helpers"));
|
|
|
15
15
|
|
|
16
16
|
var _support = require("@appium/support");
|
|
17
17
|
|
|
18
|
-
var _logger = _interopRequireDefault(require("../logger"));
|
|
19
|
-
|
|
20
18
|
var _moment = _interopRequireDefault(require("moment"));
|
|
21
19
|
|
|
22
20
|
var _asyncbox = require("asyncbox");
|
|
23
21
|
|
|
22
|
+
var _baseDriver = require("@appium/base-driver");
|
|
23
|
+
|
|
24
24
|
const MOMENT_FORMAT_ISO8601 = 'YYYY-MM-DDTHH:mm:ssZ';
|
|
25
25
|
let commands = {},
|
|
26
26
|
helpers = {},
|
|
@@ -47,17 +47,14 @@ commands.doSendKeys = async function doSendKeys(params) {
|
|
|
47
47
|
};
|
|
48
48
|
|
|
49
49
|
commands.getDeviceTime = async function getDeviceTime(format = MOMENT_FORMAT_ISO8601) {
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
this.log.debug('Attempting to capture android device date and time. ' + `The format specifier is '${format}'`);
|
|
52
51
|
const deviceTimestamp = (await this.adb.shell(['date', '+%Y-%m-%dT%T%z'])).trim();
|
|
53
|
-
|
|
54
|
-
_logger.default.debug(`Got device timestamp: ${deviceTimestamp}`);
|
|
52
|
+
this.log.debug(`Got device timestamp: ${deviceTimestamp}`);
|
|
55
53
|
|
|
56
54
|
const parsedTimestamp = _moment.default.utc(deviceTimestamp, 'YYYY-MM-DDTHH:mm:ssZZ');
|
|
57
55
|
|
|
58
56
|
if (!parsedTimestamp.isValid()) {
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
this.log.warn('Cannot parse the returned timestamp. Returning as is');
|
|
61
58
|
return deviceTimestamp;
|
|
62
59
|
}
|
|
63
60
|
|
|
@@ -143,8 +140,7 @@ commands.background = async function background(seconds) {
|
|
|
143
140
|
}) => {
|
|
144
141
|
const waitSecs = (elapsedMs / 1000).toFixed(0);
|
|
145
142
|
const progressPct = (progress * 100).toFixed(2);
|
|
146
|
-
|
|
147
|
-
_logger.default.debug(`Waited ${waitSecs}s so far (${progressPct}%)`);
|
|
143
|
+
this.log.debug(`Waited ${waitSecs}s so far (${progressPct}%)`);
|
|
148
144
|
};
|
|
149
145
|
|
|
150
146
|
await (0, _asyncbox.longSleep)(sleepMs, {
|
|
@@ -158,8 +154,7 @@ commands.background = async function background(seconds) {
|
|
|
158
154
|
args = this._cachedActivityArgs[`${appPackage}/${appActivity}`];
|
|
159
155
|
} else {
|
|
160
156
|
try {
|
|
161
|
-
|
|
162
|
-
|
|
157
|
+
this.log.debug(`Activating app '${appPackage}' in order to restore it`);
|
|
163
158
|
await this.activateApp(appPackage);
|
|
164
159
|
return true;
|
|
165
160
|
} catch (ign) {}
|
|
@@ -187,17 +182,14 @@ commands.background = async function background(seconds) {
|
|
|
187
182
|
}
|
|
188
183
|
|
|
189
184
|
args = await _support.util.filterObject(args);
|
|
190
|
-
|
|
191
|
-
_logger.default.debug(`Bringing application back to foreground with arguments: ${JSON.stringify(args)}`);
|
|
192
|
-
|
|
185
|
+
this.log.debug(`Bringing application back to foreground with arguments: ${JSON.stringify(args)}`);
|
|
193
186
|
return await this.adb.startApp(args);
|
|
194
187
|
};
|
|
195
188
|
|
|
196
189
|
commands.getStrings = async function getStrings(language) {
|
|
197
190
|
if (!language) {
|
|
198
191
|
language = await this.adb.getDeviceLanguage();
|
|
199
|
-
|
|
200
|
-
_logger.default.info(`No language specified, returning strings for: ${language}`);
|
|
192
|
+
this.log.info(`No language specified, returning strings for: ${language}`);
|
|
201
193
|
}
|
|
202
194
|
|
|
203
195
|
const preprocessStringsMap = mapping => {
|
|
@@ -229,7 +221,7 @@ commands.launchApp = async function launchApp() {
|
|
|
229
221
|
};
|
|
230
222
|
|
|
231
223
|
commands.startActivity = async function startActivity(appPackage, appActivity, appWaitPackage, appWaitActivity, intentAction, intentCategory, intentFlags, optionalIntentArguments, dontStopAppOnReset) {
|
|
232
|
-
|
|
224
|
+
this.log.debug(`Starting package '${appPackage}' and activity '${appActivity}'`);
|
|
233
225
|
|
|
234
226
|
if (!_support.util.hasValue(dontStopAppOnReset)) {
|
|
235
227
|
dontStopAppOnReset = !!this.opts.dontStopAppOnReset;
|
|
@@ -295,7 +287,7 @@ commands.getDisplayDensity = async function getDisplayDensity() {
|
|
|
295
287
|
return val;
|
|
296
288
|
}
|
|
297
289
|
|
|
298
|
-
|
|
290
|
+
this.log.debug(`Parsed density value was NaN: "${out}"`);
|
|
299
291
|
}
|
|
300
292
|
|
|
301
293
|
out = await this.adb.shell(['getprop', 'qemu.sf.lcd_density']);
|
|
@@ -307,10 +299,10 @@ commands.getDisplayDensity = async function getDisplayDensity() {
|
|
|
307
299
|
return val;
|
|
308
300
|
}
|
|
309
301
|
|
|
310
|
-
|
|
302
|
+
this.log.debug(`Parsed density value was NaN: "${out}"`);
|
|
311
303
|
}
|
|
312
304
|
|
|
313
|
-
|
|
305
|
+
this.log.errorAndThrow('Failed to get display density property.');
|
|
314
306
|
};
|
|
315
307
|
|
|
316
308
|
commands.mobilePerformEditorAction = async function mobilePerformEditorAction(opts = {}) {
|
|
@@ -319,7 +311,7 @@ commands.mobilePerformEditorAction = async function mobilePerformEditorAction(op
|
|
|
319
311
|
} = opts;
|
|
320
312
|
|
|
321
313
|
if (!_support.util.hasValue(action)) {
|
|
322
|
-
|
|
314
|
+
throw new _baseDriver.errors.InvalidArgumentError(`'action' argument is required`);
|
|
323
315
|
}
|
|
324
316
|
|
|
325
317
|
await this.adb.performEditorAction(action);
|
|
@@ -338,7 +330,7 @@ commands.mobileChangePermissions = async function mobileChangePermissions(opts =
|
|
|
338
330
|
} = opts;
|
|
339
331
|
|
|
340
332
|
if (!_support.util.hasValue(permissions)) {
|
|
341
|
-
|
|
333
|
+
throw new _baseDriver.errors.InvalidArgumentError(`'permissions' argument is required`);
|
|
342
334
|
}
|
|
343
335
|
|
|
344
336
|
let actionFunc;
|
|
@@ -355,9 +347,7 @@ commands.mobileChangePermissions = async function mobileChangePermissions(opts =
|
|
|
355
347
|
break;
|
|
356
348
|
|
|
357
349
|
default:
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
break;
|
|
350
|
+
throw new _baseDriver.errors.InvalidArgumentError(`Unknown action '${action}'. ` + `Only ${JSON.stringify(_lodash.default.values(PERMISSION_ACTION))} actions are supported`);
|
|
361
351
|
}
|
|
362
352
|
|
|
363
353
|
for (const permission of _lodash.default.isArray(permissions) ? permissions : [permissions]) {
|
|
@@ -395,9 +385,7 @@ commands.mobileGetPermissions = async function mobileGetPermissions(opts = {}) {
|
|
|
395
385
|
break;
|
|
396
386
|
|
|
397
387
|
default:
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
break;
|
|
388
|
+
throw new _baseDriver.errors.InvalidArgumentError(`Unknown permissions type '${type}'. ` + `Only ${JSON.stringify(_lodash.default.values(PERMISSIONS_TYPE))} types are supported`);
|
|
401
389
|
}
|
|
402
390
|
|
|
403
391
|
return await actionFunc(appPackage);
|
|
@@ -431,4 +419,4 @@ var _default = extensions;
|
|
|
431
419
|
exports.default = _default;require('source-map-support').install();
|
|
432
420
|
|
|
433
421
|
|
|
434
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9nZW5lcmFsLmpzIl0sIm5hbWVzIjpbIk1PTUVOVF9GT1JNQVRfSVNPODYwMSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJrZXlzIiwiXyIsImlzQXJyYXkiLCJqb2luIiwicGFyYW1zIiwidGV4dCIsInJlcGxhY2UiLCJvcHRzIiwidW5pY29kZUtleWJvYXJkIiwiZG9TZW5kS2V5cyIsImJvb3RzdHJhcCIsInNlbmRBY3Rpb24iLCJnZXREZXZpY2VUaW1lIiwiZm9ybWF0IiwibG9nIiwiZGVidWciLCJkZXZpY2VUaW1lc3RhbXAiLCJhZGIiLCJzaGVsbCIsInRyaW0iLCJwYXJzZWRUaW1lc3RhbXAiLCJtb21lbnQiLCJ1dGMiLCJpc1ZhbGlkIiwid2FybiIsInV0Y09mZnNldCIsIl90em0iLCJtb2JpbGVHZXREZXZpY2VUaW1lIiwiZ2V0UGFnZVNvdXJjZSIsImJhY2siLCJpc0tleWJvYXJkU2hvd24iLCJpc1NvZnRLZXlib2FyZFByZXNlbnQiLCJoaWRlS2V5Ym9hcmQiLCJvcGVuU2V0dGluZ3NBY3Rpdml0eSIsInNldHRpbmciLCJhcHBQYWNrYWdlIiwiYXBwQWN0aXZpdHkiLCJnZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5Iiwid2FpdEZvck5vdEFjdGl2aXR5IiwiZ2V0V2luZG93U2l6ZSIsImdldFdpbmRvd1JlY3QiLCJ3aWR0aCIsImhlaWdodCIsIngiLCJ5IiwiZ2V0Q3VycmVudEFjdGl2aXR5IiwiZ2V0Q3VycmVudFBhY2thZ2UiLCJiYWNrZ3JvdW5kIiwic2Vjb25kcyIsImdvVG9Ib21lIiwic2xlZXBNcyIsInRocmVzaG9sZE1zIiwiaW50ZXJ2YWxNcyIsIm1pbiIsInBhcnNlSW50IiwicHJvZ3Jlc3NDYiIsImVsYXBzZWRNcyIsInByb2dyZXNzIiwid2FpdFNlY3MiLCJ0b0ZpeGVkIiwicHJvZ3Jlc3NQY3QiLCJhcmdzIiwiX2NhY2hlZEFjdGl2aXR5QXJncyIsImFjdGl2YXRlQXBwIiwiaWduIiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJzcGxpdCIsImluY2x1ZGVzIiwicGtnIiwiYWN0aXZpdHkiLCJhY3Rpb24iLCJpbnRlbnRBY3Rpb24iLCJjYXRlZ29yeSIsImludGVudENhdGVnb3J5IiwiZmxhZ3MiLCJpbnRlbnRGbGFncyIsIndhaXRQa2ciLCJ3YWl0QWN0aXZpdHkiLCJ3YWl0Rm9yTGF1bmNoIiwiYXBwV2FpdEZvckxhdW5jaCIsIndhaXREdXJhdGlvbiIsImFwcFdhaXREdXJhdGlvbiIsIm9wdGlvbmFsSW50ZW50QXJndW1lbnRzIiwic3RvcEFwcCIsInVzZXIiLCJ1c2VyUHJvZmlsZSIsInV0aWwiLCJmaWx0ZXJPYmplY3QiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhcnRBcHAiLCJnZXRTdHJpbmdzIiwibGFuZ3VhZ2UiLCJnZXREZXZpY2VMYW5ndWFnZSIsImluZm8iLCJwcmVwcm9jZXNzU3RyaW5nc01hcCIsIm1hcHBpbmciLCJyZXN1bHQiLCJrZXkiLCJ2YWx1ZSIsInRvUGFpcnMiLCJpc1N0cmluZyIsImFwa1N0cmluZ3MiLCJhbmRyb2lkSGVscGVycyIsInB1c2hTdHJpbmdzIiwibGF1bmNoQXBwIiwiaW5pdEFVVCIsInN0YXJ0QVVUIiwic3RhcnRBY3Rpdml0eSIsImRvbnRTdG9wQXBwT25SZXNldCIsImhhc1ZhbHVlIiwicmVzZXQiLCJyZXNldEFwcCIsIk9iamVjdCIsImFzc2lnbiIsImZhc3RSZXNldCIsInNldENvbnRleHQiLCJpc0Nocm9tZVNlc3Npb24iLCJzdGFydENocm9tZVNlc3Npb24iLCJzZXRVcmwiLCJ1cmkiLCJzdGFydFVyaSIsImNsb3NlQXBwIiwiZm9yY2VTdG9wIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJvdXQiLCJ2YWwiLCJpc05hTiIsImVycm9yQW5kVGhyb3ciLCJtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsIlBFUk1JU1NJT05fQUNUSU9OIiwiR1JBTlQiLCJSRVZPS0UiLCJtb2JpbGVDaGFuZ2VQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiYWN0aW9uRnVuYyIsInRvTG93ZXIiLCJwZXJtaXNzaW9uIiwiZ3JhbnRQZXJtaXNzaW9uIiwicmV2b2tlUGVybWlzc2lvbiIsInZhbHVlcyIsIlBFUk1JU1NJT05TX1RZUEUiLCJERU5JRUQiLCJHUkFOVEVEIiwiUkVRVUVTVEVEIiwibW9iaWxlR2V0UGVybWlzc2lvbnMiLCJ0eXBlIiwiZ2V0UmVxUGVybWlzc2lvbnMiLCJnZXRHcmFudGVkUGVybWlzc2lvbnMiLCJnZXREZW5pZWRQZXJtaXNzaW9ucyIsIm1vYmlsZUdldE5vdGlmaWNhdGlvbnMiLCJnZXROb3RpZmljYXRpb25zIiwibW9iaWxlTGlzdFNtcyIsImdldFNtc0xpc3QiLCJtb2JpbGVVbmxvY2siLCJzdHJhdGVneSIsInRpbWVvdXRNcyIsInVubG9jayIsInVubG9ja0tleSIsInVubG9ja1R5cGUiLCJ1bmxvY2tTdHJhdGVneSIsInVubG9ja1N1Y2Nlc3NUaW1lb3V0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLHFCQUFxQixHQUFHLHNCQUE5QjtBQUVBLElBQUlDLFFBQVEsR0FBRyxFQUFmO0FBQUEsSUFBbUJDLE9BQU8sR0FBRyxFQUE3QjtBQUFBLElBQWlDQyxVQUFVLEdBQUcsRUFBOUM7Ozs7QUFFQUYsUUFBUSxDQUFDRyxJQUFULEdBQWdCLGVBQWVBLElBQWYsQ0FBcUJBLElBQXJCLEVBQTJCO0FBRXpDQSxFQUFBQSxJQUFJLEdBQUdDLGdCQUFFQyxPQUFGLENBQVVGLElBQVYsSUFBa0JBLElBQUksQ0FBQ0csSUFBTCxDQUFVLEVBQVYsQ0FBbEIsR0FBa0NILElBQXpDO0FBQ0EsTUFBSUksTUFBTSxHQUFHO0FBQ1hDLElBQUFBLElBQUksRUFBRUwsSUFESztBQUVYTSxJQUFBQSxPQUFPLEVBQUU7QUFGRSxHQUFiOztBQUlBLE1BQUksS0FBS0MsSUFBTCxDQUFVQyxlQUFkLEVBQStC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QVQsRUFBYjtBQUNELENBRkQ7O0FBaUJBNUosUUFBUSxDQUFDNkosYUFBVCxHQUF5QixlQUFlQSxhQUFmLENBQThCbkosSUFBSSxHQUFHLEVBQXJDLEVBQXlDO0FBQ2hFLFNBQU8sTUFBTSxLQUFLVSxHQUFMLENBQVMwSSxVQUFULENBQW9CcEosSUFBcEIsQ0FBYjtBQUNELENBRkQ7O0FBeUJBVixRQUFRLENBQUMrSixZQUFULEdBQXdCLGVBQWVBLFlBQWYsQ0FBNkJySixJQUFJLEdBQUcsRUFBcEMsRUFBd0M7QUFDOUQsUUFBTTtBQUFFNEYsSUFBQUEsR0FBRjtBQUFPaUQsSUFBQUEsSUFBUDtBQUFhUyxJQUFBQSxRQUFiO0FBQXVCQyxJQUFBQTtBQUF2QixNQUFxQ3ZKLElBQTNDO0FBQ0EsUUFBTWlHLHdCQUFldUQsTUFBZixDQUFzQixJQUF0QixFQUE0QixLQUFLOUksR0FBakMsRUFBc0M7QUFDMUMrSSxJQUFBQSxTQUFTLEVBQUU3RCxHQUQrQjtBQUUxQzhELElBQUFBLFVBQVUsRUFBRWIsSUFGOEI7QUFHMUNjLElBQUFBLGNBQWMsRUFBRUwsUUFIMEI7QUFJMUNNLElBQUFBLG9CQUFvQixFQUFFTDtBQUpvQixHQUF0QyxDQUFOO0FBTUQsQ0FSRDs7QUFVQTVDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjcEgsVUFBZCxFQUEwQkYsUUFBMUIsRUFBb0NDLE9BQXBDO2VBRWVDLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGFuZHJvaWRIZWxwZXJzIGZyb20gJy4uL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGxvbmdTbGVlcCB9IGZyb20gJ2FzeW5jYm94JztcblxuY29uc3QgTU9NRU5UX0ZPUk1BVF9JU084NjAxID0gJ1lZWVktTU0tRERUSEg6bW06c3NaJztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5jb21tYW5kcy5rZXlzID0gYXN5bmMgZnVuY3Rpb24ga2V5cyAoa2V5cykge1xuICAvLyBQcm90b2NvbCBzZW5kcyBhbiBhcnJheTsgcmV0aGluayBhcHByb2FjaFxuICBrZXlzID0gXy5pc0FycmF5KGtleXMpID8ga2V5cy5qb2luKCcnKSA6IGtleXM7XG4gIGxldCBwYXJhbXMgPSB7XG4gICAgdGV4dDoga2V5cyxcbiAgICByZXBsYWNlOiBmYWxzZVxuICB9O1xuICBpZiAodGhpcy5vcHRzLnVuaWNvZGVLZXlib2FyZCkge1xuICAgIHBhcmFtcy51bmljb2RlS2V5Ym9hcmQgPSB0cnVlO1xuICB9XG4gIGF3YWl0IHRoaXMuZG9TZW5kS2V5cyhwYXJhbXMpO1xufTtcblxuY29tbWFuZHMuZG9TZW5kS2V5cyA9IGFzeW5jIGZ1bmN0aW9uIGRvU2VuZEtleXMgKHBhcmFtcykge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignc2V0VGV4dCcsIHBhcmFtcyk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBkZXZpY2UncyB0aW1lc3RhbXAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCAtIFRoZSBzZXQgb2YgZm9ybWF0IHNwZWNpZmllcnMuIFJlYWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL21vbWVudGpzLmNvbS9kb2NzLyB0byBnZXQgdGhlIGZ1bGwgbGlzdCBvZiBzdXBwb3J0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRldGltZSBmb3JtYXQgc3BlY2lmaWVycy4gVGhlIGRlZmF1bHQgZm9ybWF0IGlzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYFlZWVktTU0tRERUSEg6bW06c3NaYCwgd2hpY2ggY29tcGxpZXMgdG8gSVNPLTg2MDFcbiAqIEByZXR1cm4ge3N0cmluZ30gRm9ybWF0dGVkIGRhdGV0aW1lIHN0cmluZyBvciB0aGUgcmF3IGNvbW1hbmQgb3V0cHV0IGlmIGZvcm1hdHRpbmcgZmFpbHNcbiAqL1xuY29tbWFuZHMuZ2V0RGV2aWNlVGltZSA9IGFzeW5jIGZ1bmN0aW9uIGdldERldmljZVRpbWUgKGZvcm1hdCA9IE1PTUVOVF9GT1JNQVRfSVNPODYwMSkge1xuICBsb2cuZGVidWcoJ0F0dGVtcHRpbmcgdG8gY2FwdHVyZSBhbmRyb2lkIGRldmljZSBkYXRlIGFuZCB0aW1lLiAnICtcbiAgICBgVGhlIGZvcm1hdCBzcGVjaWZpZXIgaXMgJyR7Zm9ybWF0fSdgKTtcbiAgY29uc3QgZGV2aWNlVGltZXN0YW1wID0gKGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnZGF0ZScsICcrJVktJW0tJWRUJVQleiddKSkudHJpbSgpO1xuICBsb2cuZGVidWcoYEdvdCBkZXZpY2UgdGltZXN0YW1wOiAke2RldmljZVRpbWVzdGFtcH1gKTtcbiAgY29uc3QgcGFyc2VkVGltZXN0YW1wID0gbW9tZW50LnV0YyhkZXZpY2VUaW1lc3RhbXAsICdZWVlZLU1NLUREVEhIOm1tOnNzWlonKTtcbiAgaWYgKCFwYXJzZWRUaW1lc3RhbXAuaXNWYWxpZCgpKSB7XG4gICAgbG9nLndhcm4oJ0Nhbm5vdCBwYXJzZSB0aGUgcmV0dXJuZWQgdGltZXN0YW1wLiBSZXR1cm5pbmcgYXMgaXMnKTtcbiAgICByZXR1cm4gZGV2aWNlVGltZXN0YW1wO1xuICB9XG4gIHJldHVybiBwYXJzZWRUaW1lc3RhbXAudXRjT2Zmc2V0KHBhcnNlZFRpbWVzdGFtcC5fdHptIHx8IDApLmZvcm1hdChmb3JtYXQpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZXZpY2VUaW1lT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGZvcm1hdCBbWVlZWS1NTS1ERFRISDptbTpzc1pdIC0gU2VlIGdldERldmljZVRpbWUjZm9ybWF0XG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZGV2aWNlIHRpbWVcbiAqXG4gKiBAcGFyYW0ge0RldmljZVRpbWVPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEZvcm1hdHRlZCBkYXRldGltZSBzdHJpbmcgb3IgdGhlIHJhdyBjb21tYW5kIG91dHB1dCBpZiBmb3JtYXR0aW5nIGZhaWxzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZVRpbWUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXREZXZpY2VUaW1lIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RGV2aWNlVGltZShvcHRzLmZvcm1hdCk7XG59O1xuXG5jb21tYW5kcy5nZXRQYWdlU291cmNlID0gYXN5bmMgZnVuY3Rpb24gZ2V0UGFnZVNvdXJjZSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdzb3VyY2UnKTtcbn07XG5cbmNvbW1hbmRzLmJhY2sgPSBhc3luYyBmdW5jdGlvbiBiYWNrICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3ByZXNzQmFjaycpO1xufTtcblxuY29tbWFuZHMuaXNLZXlib2FyZFNob3duID0gYXN5bmMgZnVuY3Rpb24gaXNLZXlib2FyZFNob3duICgpIHtcbiAgY29uc3Qge2lzS2V5Ym9hcmRTaG93bn0gPSBhd2FpdCB0aGlzLmFkYi5pc1NvZnRLZXlib2FyZFByZXNlbnQoKTtcbiAgcmV0dXJuIGlzS2V5Ym9hcmRTaG93bjtcbn07XG5cbmNvbW1hbmRzLmhpZGVLZXlib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGhpZGVLZXlib2FyZCAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5oaWRlS2V5Ym9hcmQoKTtcbn07XG5cbmNvbW1hbmRzLm9wZW5TZXR0aW5nc0FjdGl2aXR5ID0gYXN5bmMgZnVuY3Rpb24gb3BlblNldHRpbmdzQWN0aXZpdHkgKHNldHRpbmcpIHtcbiAgbGV0IHthcHBQYWNrYWdlLCBhcHBBY3Rpdml0eX0gPSBhd2FpdCB0aGlzLmFkYi5nZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5KCk7XG4gIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnYW0nLCAnc3RhcnQnLCAnLWEnLCBgYW5kcm9pZC5zZXR0aW5ncy4ke3NldHRpbmd9YF0pO1xuICBhd2FpdCB0aGlzLmFkYi53YWl0Rm9yTm90QWN0aXZpdHkoYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksIDUwMDApO1xufTtcblxuY29tbWFuZHMuZ2V0V2luZG93U2l6ZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFdpbmRvd1NpemUgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZ2V0RGV2aWNlU2l6ZScpO1xufTtcblxuLy8gRm9yIFczQ1xuY29tbWFuZHMuZ2V0V2luZG93UmVjdCA9IGFzeW5jIGZ1bmN0aW9uIGdldFdpbmRvd1JlY3QgKCkge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGF3YWl0IHRoaXMuZ2V0V2luZG93U2l6ZSgpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcbn07XG5cbmNvbW1hbmRzLmdldEN1cnJlbnRBY3Rpdml0eSA9IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRBY3Rpdml0eSAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5hZGIuZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSgpKS5hcHBBY3Rpdml0eTtcbn07XG5cbmNvbW1hbmRzLmdldEN1cnJlbnRQYWNrYWdlID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q3VycmVudFBhY2thZ2UgKCkge1xuICByZXR1cm4gKGF3YWl0IHRoaXMuYWRiLmdldEZvY3VzZWRQYWNrYWdlQW5kQWN0aXZpdHkoKSkuYXBwUGFja2FnZTtcbn07XG5cbmNvbW1hbmRzLmJhY2tncm91bmQgPSBhc3luYyBmdW5jdGlvbiBiYWNrZ3JvdW5kIChzZWNvbmRzKSB7XG4gIGlmIChzZWNvbmRzIDwgMCkge1xuICAgIC8vIGlmIHVzZXIgcGFzc2VzIGluIGEgbmVnYXRpdmUgc2Vjb25kcyB2YWx1ZSwgaW50ZXJwcmV0IHRoYXQgYXMgdGhlIGluc3RydWN0aW9uXG4gICAgLy8gdG8gbm90IGJyaW5nIHRoZSBhcHAgYmFjayBhdCBhbGxcbiAgICBhd2FpdCB0aGlzLmFkYi5nb1RvSG9tZSgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGxldCB7YXBwUGFja2FnZSwgYXBwQWN0aXZpdHl9ID0gYXdhaXQgdGhpcy5hZGIuZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSgpO1xuICBhd2FpdCB0aGlzLmFkYi5nb1RvSG9tZSgpO1xuXG4gIC8vIHBlb3BsZSBjYW4gd2FpdCBmb3IgYSBsb25nIHRpbWUsIHNvIHRvIGJlIHNhZmUgbGV0J3MgdXNlIHRoZSBsb25nU2xlZXAgZnVuY3Rpb24gYW5kIGxvZ1xuICAvLyBwcm9ncmVzcyBwZXJpb2RpY2FsbHkuXG4gIGNvbnN0IHNsZWVwTXMgPSBzZWNvbmRzICogMTAwMDtcbiAgY29uc3QgdGhyZXNob2xkTXMgPSAzMCAqIDEwMDA7IC8vIHVzZSB0aGUgc3Bpbi13YWl0IGZvciBhbnl0aGluZyBvdmVyIHRoaXMgdGhyZXNob2xkXG4gIC8vIGZvciBvdXIgc3BpbiBpbnRlcnZhbCwgdXNlIDElIG9mIHRoZSB0b3RhbCB3YWl0IHRpbWUsIGJ1dCBub3RoaW5nIGJpZ2dlciB0aGFuIDMwc1xuICBjb25zdCBpbnRlcnZhbE1zID0gXy5taW4oWzMwICogMTAwMCwgcGFyc2VJbnQoc2xlZXBNcyAvIDEwMCwgMTApXSk7XG4gIGNvbnN0IHByb2dyZXNzQ2IgPSAoe2VsYXBzZWRNcywgcHJvZ3Jlc3N9KSA9PiB7XG4gICAgY29uc3Qgd2FpdFNlY3MgPSAoZWxhcHNlZE1zIC8gMTAwMCkudG9GaXhlZCgwKTtcbiAgICBjb25zdCBwcm9ncmVzc1BjdCA9IChwcm9ncmVzcyAqIDEwMCkudG9GaXhlZCgyKTtcbiAgICBsb2cuZGVidWcoYFdhaXRlZCAke3dhaXRTZWNzfXMgc28gZmFyICgke3Byb2dyZXNzUGN0fSUpYCk7XG4gIH07XG4gIGF3YWl0IGxvbmdTbGVlcChzbGVlcE1zLCB7dGhyZXNob2xkTXMsIGludGVydmFsTXMsIHByb2dyZXNzQ2J9KTtcblxuICBsZXQgYXJncztcbiAgaWYgKHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJncyAmJiB0aGlzLl9jYWNoZWRBY3Rpdml0eUFyZ3NbYCR7YXBwUGFja2FnZX0vJHthcHBBY3Rpdml0eX1gXSkge1xuICAgIC8vIHRoZSBhY3Rpdml0eSB3YXMgc3RhcnRlZCB3aXRoIGBzdGFydEFjdGl2aXR5YCwgc28gdXNlIHRob3NlIGFyZ3MgdG8gcmVzdGFydFxuICAgIGFyZ3MgPSB0aGlzLl9jYWNoZWRBY3Rpdml0eUFyZ3NbYCR7YXBwUGFja2FnZX0vJHthcHBBY3Rpdml0eX1gXTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgbG9nLmRlYnVnKGBBY3RpdmF0aW5nIGFwcCAnJHthcHBQYWNrYWdlfScgaW4gb3JkZXIgdG8gcmVzdG9yZSBpdGApO1xuICAgICAgYXdhaXQgdGhpcy5hY3RpdmF0ZUFwcChhcHBQYWNrYWdlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICBhcmdzID0gKChhcHBQYWNrYWdlID09PSB0aGlzLm9wdHMuYXBwUGFja2FnZSAmJiBhcHBBY3Rpdml0eSA9PT0gdGhpcy5vcHRzLmFwcEFjdGl2aXR5KSB8fFxuICAgICAgICAgICAgKGFwcFBhY2thZ2UgPT09IHRoaXMub3B0cy5hcHBXYWl0UGFja2FnZSAmJiAodGhpcy5vcHRzLmFwcFdhaXRBY3Rpdml0eSB8fCAnJykuc3BsaXQoJywnKS5pbmNsdWRlcyhhcHBBY3Rpdml0eSkpKVxuICAgICAgPyB7Ly8gdGhlIGFjdGl2aXR5IGlzIHRoZSBvcmlnaW5hbCBzZXNzaW9uIGFjdGl2aXR5LCBzbyB1c2UgdGhlIG9yaWdpbmFsIGFyZ3NcbiAgICAgICAgcGtnOiB0aGlzLm9wdHMuYXBwUGFja2FnZSxcbiAgICAgICAgYWN0aXZpdHk6IHRoaXMub3B0cy5hcHBBY3Rpdml0eSxcbiAgICAgICAgYWN0aW9uOiB0aGlzLm9wdHMuaW50ZW50QWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogdGhpcy5vcHRzLmludGVudENhdGVnb3J5LFxuICAgICAgICBmbGFnczogdGhpcy5vcHRzLmludGVudEZsYWdzLFxuICAgICAgICB3YWl0UGtnOiB0aGlzLm9wdHMuYXBwV2FpdFBhY2thZ2UsXG4gICAgICAgIHdhaXRBY3Rpdml0eTogdGhpcy5vcHRzLmFwcFdhaXRBY3Rpdml0eSxcbiAgICAgICAgd2FpdEZvckxhdW5jaDogdGhpcy5vcHRzLmFwcFdhaXRGb3JMYXVuY2gsXG4gICAgICAgIHdhaXREdXJhdGlvbjogdGhpcy5vcHRzLmFwcFdhaXREdXJhdGlvbixcbiAgICAgICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHM6IHRoaXMub3B0cy5vcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICAgICAgc3RvcEFwcDogZmFsc2UsXG4gICAgICAgIHVzZXI6IHRoaXMub3B0cy51c2VyUHJvZmlsZX1cbiAgICAgIDogey8vIHRoZSBhY3Rpdml0eSB3YXMgc3RhcnRlZCBzb21lIG90aGVyIHdheSwgc28gdXNlIGRlZmF1bHRzXG4gICAgICAgIHBrZzogYXBwUGFja2FnZSxcbiAgICAgICAgYWN0aXZpdHk6IGFwcEFjdGl2aXR5LFxuICAgICAgICB3YWl0UGtnOiBhcHBQYWNrYWdlLFxuICAgICAgICB3YWl0QWN0aXZpdHk6IGFwcEFjdGl2aXR5LFxuICAgICAgICBzdG9wQXBwOiBmYWxzZX07XG4gIH1cbiAgYXJncyA9IGF3YWl0IHV0aWwuZmlsdGVyT2JqZWN0KGFyZ3MpO1xuICBsb2cuZGVidWcoYEJyaW5naW5nIGFwcGxpY2F0aW9uIGJhY2sgdG8gZm9yZWdyb3VuZCB3aXRoIGFyZ3VtZW50czogJHtKU09OLnN0cmluZ2lmeShhcmdzKX1gKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnN0YXJ0QXBwKGFyZ3MpO1xufTtcblxuY29tbWFuZHMuZ2V0U3RyaW5ncyA9IGFzeW5jIGZ1bmN0aW9uIGdldFN0cmluZ3MgKGxhbmd1YWdlKSB7XG4gIGlmICghbGFuZ3VhZ2UpIHtcbiAgICBsYW5ndWFnZSA9IGF3YWl0IHRoaXMuYWRiLmdldERldmljZUxhbmd1YWdlKCk7XG4gICAgbG9nLmluZm8oYE5vIGxhbmd1YWdlIHNwZWNpZmllZCwgcmV0dXJuaW5nIHN0cmluZ3MgZm9yOiAke2xhbmd1YWdlfWApO1xuICB9XG5cbiAgLy8gQ2xpZW50cyByZXF1aXJlIHRoZSByZXN1bHRpbmcgbWFwcGluZyB0byBoYXZlIGJvdGgga2V5c1xuICAvLyBhbmQgdmFsdWVzIG9mIHR5cGUgc3RyaW5nXG4gIGNvbnN0IHByZXByb2Nlc3NTdHJpbmdzTWFwID0gKG1hcHBpbmcpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMobWFwcGluZykpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBpZiAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSkge1xuICAgIC8vIFJldHVybiBjYWNoZWQgc3RyaW5nc1xuICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcCh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKTtcbiAgfVxuXG4gIHRoaXMuYXBrU3RyaW5nc1tsYW5ndWFnZV0gPSBhd2FpdCBhbmRyb2lkSGVscGVycy5wdXNoU3RyaW5ncyhsYW5ndWFnZSwgdGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gIGlmICh0aGlzLmJvb3RzdHJhcCkge1xuICAgIC8vIFRPRE86IFRoaXMgaXMgbXV0YXRpbmcgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UsIGJ1dCBpdCdzIGhvdyBhcHBpdW0gY3VycmVudGx5IHdvcmtzXG4gICAgYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbigndXBkYXRlU3RyaW5ncycpO1xuICB9XG5cbiAgcmV0dXJuIHByZXByb2Nlc3NTdHJpbmdzTWFwKHRoaXMuYXBrU3RyaW5nc1tsYW5ndWFnZV0pO1xufTtcblxuY29tbWFuZHMubGF1bmNoQXBwID0gYXN5bmMgZnVuY3Rpb24gbGF1bmNoQXBwICgpIHtcbiAgYXdhaXQgdGhpcy5pbml0QVVUKCk7XG4gIGF3YWl0IHRoaXMuc3RhcnRBVVQoKTtcbn07XG5cbmNvbW1hbmRzLnN0YXJ0QWN0aXZpdHkgPSBhc3luYyBmdW5jdGlvbiBzdGFydEFjdGl2aXR5IChhcHBQYWNrYWdlLCBhcHBBY3Rpdml0eSxcbiAgYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSwgaW50ZW50QWN0aW9uLCBpbnRlbnRDYXRlZ29yeSwgaW50ZW50RmxhZ3MsXG4gIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLCBkb250U3RvcEFwcE9uUmVzZXQpIHtcbiAgbG9nLmRlYnVnKGBTdGFydGluZyBwYWNrYWdlICcke2FwcFBhY2thZ2V9JyBhbmQgYWN0aXZpdHkgJyR7YXBwQWN0aXZpdHl9J2ApO1xuXG4gIC8vIGRvbnRTdG9wQXBwT25SZXNldCBpcyBib3RoIGFuIGFyZ3VtZW50IGhlcmUsIGFuZCBhIGRlc2lyZWQgY2FwYWJpbGl0eVxuICAvLyBpZiB0aGUgYXJndW1lbnQgaXMgc2V0LCB1c2UgaXQsIG90aGVyd2lzZSB1c2UgdGhlIGNhcFxuICBpZiAoIXV0aWwuaGFzVmFsdWUoZG9udFN0b3BBcHBPblJlc2V0KSkge1xuICAgIGRvbnRTdG9wQXBwT25SZXNldCA9ICEhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldDtcbiAgfVxuXG4gIGxldCBhcmdzID0ge1xuICAgIHBrZzogYXBwUGFja2FnZSxcbiAgICBhY3Rpdml0eTogYXBwQWN0aXZpdHksXG4gICAgd2FpdFBrZzogYXBwV2FpdFBhY2thZ2UgfHwgYXBwUGFja2FnZSxcbiAgICB3YWl0QWN0aXZpdHk6IGFwcFdhaXRBY3Rpdml0eSB8fCBhcHBBY3Rpdml0eSxcbiAgICBhY3Rpb246IGludGVudEFjdGlvbixcbiAgICBjYXRlZ29yeTogaW50ZW50Q2F0ZWdvcnksXG4gICAgZmxhZ3M6IGludGVudEZsYWdzLFxuICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLFxuICAgIHN0b3BBcHA6ICFkb250U3RvcEFwcE9uUmVzZXRcbiAgfTtcbiAgdGhpcy5fY2FjaGVkQWN0aXZpdHlBcmdzID0gdGhpcy5fY2FjaGVkQWN0aXZpdHlBcmdzIHx8IHt9O1xuICB0aGlzLl9jYWNoZWRBY3Rpdml0eUFyZ3NbYCR7YXJncy53YWl0UGtnfS8ke2FyZ3Mud2FpdEFjdGl2aXR5fWBdID0gYXJncztcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRBcHAoYXJncyk7XG59O1xuXG5jb21tYW5kcy5yZXNldCA9IGFzeW5jIGZ1bmN0aW9uIHJlc2V0ICgpIHtcbiAgYXdhaXQgYW5kcm9pZEhlbHBlcnMucmVzZXRBcHAodGhpcy5hZGIsIE9iamVjdC5hc3NpZ24oe30sIHRoaXMub3B0cywge2Zhc3RSZXNldDogdHJ1ZX0pKTtcbiAgLy8gcmVzZXQgY29udGV4dCBzaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQga2luZCBvbiBjb250ZXh0IHdlIHdpbGwgZW5kIHVwIGFmdGVyIGFwcCBsYXVuY2guXG4gIGF3YWl0IHRoaXMuc2V0Q29udGV4dCgpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5pc0Nocm9tZVNlc3Npb24gPyB0aGlzLnN0YXJ0Q2hyb21lU2Vzc2lvbigpIDogdGhpcy5zdGFydEFVVCgpO1xufTtcblxuY29tbWFuZHMuc3RhcnRBVVQgPSBhc3luYyBmdW5jdGlvbiBzdGFydEFVVCAoKSB7XG4gIGF3YWl0IHRoaXMuYWRiLnN0YXJ0QXBwKHtcbiAgICBwa2c6IHRoaXMub3B0cy5hcHBQYWNrYWdlLFxuICAgIGFjdGl2aXR5OiB0aGlzLm9wdHMuYXBwQWN0aXZpdHksXG4gICAgYWN0aW9uOiB0aGlzLm9wdHMuaW50ZW50QWN0aW9uLFxuICAgIGNhdGVnb3J5OiB0aGlzLm9wdHMuaW50ZW50Q2F0ZWdvcnksXG4gICAgZmxhZ3M6IHRoaXMub3B0cy5pbnRlbnRGbGFncyxcbiAgICB3YWl0UGtnOiB0aGlzLm9wdHMuYXBwV2FpdFBhY2thZ2UsXG4gICAgd2FpdEFjdGl2aXR5OiB0aGlzLm9wdHMuYXBwV2FpdEFjdGl2aXR5LFxuICAgIHdhaXRGb3JMYXVuY2g6IHRoaXMub3B0cy5hcHBXYWl0Rm9yTGF1bmNoLFxuICAgIHdhaXREdXJhdGlvbjogdGhpcy5vcHRzLmFwcFdhaXREdXJhdGlvbixcbiAgICBvcHRpb25hbEludGVudEFyZ3VtZW50czogdGhpcy5vcHRzLm9wdGlvbmFsSW50ZW50QXJndW1lbnRzLFxuICAgIHN0b3BBcHA6ICF0aGlzLm9wdHMuZG9udFN0b3BBcHBPblJlc2V0LFxuICAgIHVzZXI6IHRoaXMub3B0cy51c2VyUHJvZmlsZSxcbiAgfSk7XG59O1xuXG4vLyB3ZSBvdmVycmlkZSBzZXRVcmwgdG8gdGFrZSBhbiBhbmRyb2lkIFVSSSB3aGljaCBjYW4gYmUgdXNlZCBmb3IgZGVlcC1saW5raW5nXG4vLyBpbnNpZGUgYW4gYXBwLCBzaW1pbGFyIHRvIHN0YXJ0aW5nIGFuIGludGVudFxuY29tbWFuZHMuc2V0VXJsID0gYXN5bmMgZnVuY3Rpb24gc2V0VXJsICh1cmkpIHtcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRVcmkodXJpLCB0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG59O1xuXG4vLyBjbG9zaW5nIGFwcCB1c2luZyBmb3JjZSBzdG9wXG5jb21tYW5kcy5jbG9zZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIGNsb3NlQXBwICgpIHtcbiAgYXdhaXQgdGhpcy5hZGIuZm9yY2VTdG9wKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgLy8gcmVzZXQgY29udGV4dCBzaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQga2luZCBvbiBjb250ZXh0IHdlIHdpbGwgZW5kIHVwIGFmdGVyIGFwcCBsYXVuY2guXG4gIGF3YWl0IHRoaXMuc2V0Q29udGV4dCgpO1xufTtcblxuY29tbWFuZHMuZ2V0RGlzcGxheURlbnNpdHkgPSBhc3luYyBmdW5jdGlvbiBnZXREaXNwbGF5RGVuc2l0eSAoKSB7XG4gIC8vIGZpcnN0IHRyeSB0aGUgcHJvcGVydHkgZm9yIGRldmljZXNcbiAgbGV0IG91dCA9IGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnZ2V0cHJvcCcsICdyby5zZi5sY2RfZGVuc2l0eSddKTtcbiAgaWYgKG91dCkge1xuICAgIGxldCB2YWwgPSBwYXJzZUludChvdXQsIDEwKTtcbiAgICAvLyBpZiB0aGUgdmFsdWUgaXMgTmFOLCB0cnkgZ2V0dGluZyB0aGUgZW11bGF0b3IgcHJvcGVydHlcbiAgICBpZiAoIWlzTmFOKHZhbCkpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgUGFyc2VkIGRlbnNpdHkgdmFsdWUgd2FzIE5hTjogXCIke291dH1cImApO1xuICB9XG4gIC8vIGZhbGxiYWNrIHRvIHRyeWluZyBwcm9wZXJ0eSBmb3IgZW11bGF0b3JzXG4gIG91dCA9IGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnZ2V0cHJvcCcsICdxZW11LnNmLmxjZF9kZW5zaXR5J10pO1xuICBpZiAob3V0KSB7XG4gICAgbGV0IHZhbCA9IHBhcnNlSW50KG91dCwgMTApO1xuICAgIGlmICghaXNOYU4odmFsKSkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBQYXJzZWQgZGVuc2l0eSB2YWx1ZSB3YXMgTmFOOiBcIiR7b3V0fVwiYCk7XG4gIH1cbiAgLy8gY291bGRuJ3QgZ2V0IGFueXRoaW5nLCBzbyBlcnJvciBvdXRcbiAgbG9nLmVycm9yQW5kVGhyb3coJ0ZhaWxlZCB0byBnZXQgZGlzcGxheSBkZW5zaXR5IHByb3BlcnR5LicpO1xufTtcblxuY29tbWFuZHMubW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7YWN0aW9ufSA9IG9wdHM7XG4gIGlmICghdXRpbC5oYXNWYWx1ZShhY3Rpb24pKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYCdhY3Rpb24nIGFyZ3VtZW50IGlzIHJlcXVpcmVkYCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLmFkYi5wZXJmb3JtRWRpdG9yQWN0aW9uKGFjdGlvbik7XG59O1xuXG5jb25zdCBQRVJNSVNTSU9OX0FDVElPTiA9IHtcbiAgR1JBTlQ6ICdncmFudCcsXG4gIFJFVk9LRTogJ3Jldm9rZScsXG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENoYW5nZVBlcm1pc3Npb25zT3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfEFycmF5PHN0cmluZz59IHBlcm1pc3Npb25zIC0gVGhlIGZ1bGwgbmFtZSBvZiB0aGUgcGVybWlzc2lvbiB0byBiZSBjaGFuZ2VkXG4gKiBvciBhIGxpc3Qgb2YgcGVybWlzc2lvbnMuIE1hbmRhdG9yeSBhcmd1bWVudC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBQYWNrYWdlIFt0aGlzLm9wdHMuYXBwUGFja2FnZV0gLSBUaGUgYXBwbGljYXRpb24gcGFja2FnZSB0byBzZXQgY2hhbmdlXG4gKiBwZXJtaXNzaW9ucyBvbi4gRGVmYXVsdHMgdG8gdGhlIHBhY2thZ2UgbmFtZSB1bmRlciB0ZXN0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFjdGlvbiBbZ3JhbnRdIC0gT25lIG9mIGBQRVJNSVNTSU9OX0FDVElPTmAgdmFsdWVzXG4gKi9cblxuLyoqXG4gKiBDaGFuZ2VzIHBhY2thZ2UgcGVybWlzc2lvbnMgaW4gcnVudGltZS5cbiAqXG4gKiBAcGFyYW0gez9DaGFuZ2VQZXJtaXNzaW9uc09wdGlvbnN9IG9wdHMgLSBBdmFpbGFibGUgb3B0aW9ucyBtYXBwaW5nLlxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgY2hhbmdpbmcgcGVybWlzc2lvbnNcbiAqL1xuY29tbWFuZHMubW9iaWxlQ2hhbmdlUGVybWlzc2lvbnMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVDaGFuZ2VQZXJtaXNzaW9ucyAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBwZXJtaXNzaW9ucyxcbiAgICBhcHBQYWNrYWdlID0gdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gICAgYWN0aW9uID0gUEVSTUlTU0lPTl9BQ1RJT04uR1JBTlQsXG4gIH0gPSBvcHRzO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUocGVybWlzc2lvbnMpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYCdwZXJtaXNzaW9ucycgYXJndW1lbnQgaXMgcmVxdWlyZWRgKTtcbiAgfVxuXG4gIGxldCBhY3Rpb25GdW5jO1xuICBzd2l0Y2ggKF8udG9Mb3dlcihhY3Rpb24pKSB7XG4gICAgY2FzZSBQRVJNSVNTSU9OX0FDVElPTi5HUkFOVDpcbiAgICAgIGFjdGlvbkZ1bmMgPSAoYXBwUGFja2FnZSwgcGVybWlzc2lvbikgPT4gdGhpcy5hZGIuZ3JhbnRQZXJtaXNzaW9uKGFwcFBhY2thZ2UsIHBlcm1pc3Npb24pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBQRVJNSVNTSU9OX0FDVElPTi5SRVZPS0U6XG4gICAgICBhY3Rpb25GdW5jID0gKGFwcFBhY2thZ2UsIHBlcm1pc3Npb24pID0+IHRoaXMuYWRiLnJldm9rZVBlcm1pc3Npb24oYXBwUGFja2FnZSwgcGVybWlzc2lvbik7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYFVua25vd24gYWN0aW9uICcke2FjdGlvbn0nLiBgICtcbiAgICAgICAgYE9ubHkgJHtKU09OLnN0cmluZ2lmeShfLnZhbHVlcyhQRVJNSVNTSU9OX0FDVElPTikpfSBhY3Rpb25zIGFyZSBzdXBwb3J0ZWRgKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGZvciAoY29uc3QgcGVybWlzc2lvbiBvZiAoXy5pc0FycmF5KHBlcm1pc3Npb25zKSA/IHBlcm1pc3Npb25zIDogW3Blcm1pc3Npb25zXSkpIHtcbiAgICBhd2FpdCBhY3Rpb25GdW5jKGFwcFBhY2thZ2UsIHBlcm1pc3Npb24pO1xuICB9XG59O1xuXG5jb25zdCBQRVJNSVNTSU9OU19UWVBFID0ge1xuICBERU5JRUQ6ICdkZW5pZWQnLFxuICBHUkFOVEVEOiAnZ3JhbnRlZCcsXG4gIFJFUVVFU1RFRDogJ3JlcXVlc3RlZCcsXG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEdldFBlcm1pc3Npb25zT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUgW3JlcXVlc3RlZF0gLSBPbmUgb2YgcG9zc2libGUgcGVybWlzc2lvbiB0eXBlcyB0byBnZXQuXG4gKiBDYW4gYmUgYW55IG9mIGBQRVJNSVNTSU9OU19UWVBFYCB2YWx1ZXMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwUGFja2FnZSBbdGhpcy5vcHRzLmFwcFBhY2thZ2VdIC0gVGhlIGFwcGxpY2F0aW9uIHBhY2thZ2UgdG8gc2V0IGNoYW5nZVxuICogcGVybWlzc2lvbnMgb24uIERlZmF1bHRzIHRvIHRoZSBwYWNrYWdlIG5hbWUgdW5kZXIgdGVzdC5cbiAqL1xuXG4vKipcbiAqIEdldHMgcnVudGltZSBwZXJtaXNzaW9ucyBsaXN0IGZvciB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gcGFja2FnZS5cbiAqXG4gKiBAcGFyYW0ge0dldFBlcm1pc3Npb25zT3B0aW9uc30gb3B0cyAtIEF2YWlsYWJsZSBvcHRpb25zIG1hcHBpbmcuXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gVGhlIGxpc3Qgb2YgcmV0cmlldmVkIHBlcm1pc3Npb25zIGZvciB0aGUgZ2l2ZW4gdHlwZVxuICogKGNhbiBhbHNvIGJlIGVtcHR5KS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZ2V0dGluZyBwZXJtaXNzaW9ucy5cbiAqL1xuY29tbWFuZHMubW9iaWxlR2V0UGVybWlzc2lvbnMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXRQZXJtaXNzaW9ucyAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlID0gUEVSTUlTU0lPTlNfVFlQRS5SRVFVRVNURUQsXG4gICAgYXBwUGFja2FnZSA9IHRoaXMub3B0cy5hcHBQYWNrYWdlLFxuICB9ID0gb3B0cztcblxuICBsZXQgYWN0aW9uRnVuYztcbiAgc3dpdGNoIChfLnRvTG93ZXIodHlwZSkpIHtcbiAgICBjYXNlIFBFUk1JU1NJT05TX1RZUEUuUkVRVUVTVEVEOlxuICAgICAgYWN0aW9uRnVuYyA9IChhcHBQYWNrYWdlKSA9PiB0aGlzLmFkYi5nZXRSZXFQZXJtaXNzaW9ucyhhcHBQYWNrYWdlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgUEVSTUlTU0lPTlNfVFlQRS5HUkFOVEVEOlxuICAgICAgYWN0aW9uRnVuYyA9IChhcHBQYWNrYWdlKSA9PiB0aGlzLmFkYi5nZXRHcmFudGVkUGVybWlzc2lvbnMoYXBwUGFja2FnZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFBFUk1JU1NJT05TX1RZUEUuREVOSUVEOlxuICAgICAgYWN0aW9uRnVuYyA9IChhcHBQYWNrYWdlKSA9PiB0aGlzLmFkYi5nZXREZW5pZWRQZXJtaXNzaW9ucyhhcHBQYWNrYWdlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgVW5rbm93biBwZXJtaXNzaW9ucyB0eXBlICcke3R5cGV9Jy4gYCArXG4gICAgICAgIGBPbmx5ICR7SlNPTi5zdHJpbmdpZnkoXy52YWx1ZXMoUEVSTUlTU0lPTlNfVFlQRSkpfSB0eXBlcyBhcmUgc3VwcG9ydGVkYCk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gYXdhaXQgYWN0aW9uRnVuYyhhcHBQYWNrYWdlKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsaXN0IG9mIHJlY2VudCBzeXN0ZW0gbm90aWZpY2F0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBTZWUgdGhlIGRvY3VtZW50YXRpb24gb24gYGFkYi5nZXROb3RpZmljYXRpb25zYCBmb3JcbiAqIG1vcmUgZGV0YWlsc1xuICovXG5jb21tYW5kcy5tb2JpbGVHZXROb3RpZmljYXRpb25zID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0Tm90aWZpY2F0aW9ucyAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5nZXROb3RpZmljYXRpb25zKCk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNtc0xpc3RPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gbWF4IFsxMDBdIC0gVGhlIG1heGltdW0gY291bnQgb2YgcmVjZW50IFNNUyBtZXNzYWdlc1xuICogdG8gcmV0cmlldmVcbiAqL1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiByZWNlbnQgU01TIG1lc3NhZ2VzIHdpdGggdGhlaXIgcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0ge1Ntc0xpc3RPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBTZWUgdGhlIGRvY3VtZW50YXRpb24gb24gYGFkYi5nZXRTbXNMaXN0YCBmb3JcbiAqIG1vcmUgZGV0YWlsc1xuICovXG5jb21tYW5kcy5tb2JpbGVMaXN0U21zID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGlzdFNtcyAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5nZXRTbXNMaXN0KG9wdHMpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBVbmxvY2tPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30ga2V5IFRoZSB1bmxvY2sga2V5LiBUaGUgdmFsdWUgb2YgdGhpcyBrZXkgZGVwZW5kc1xuICogb24gdGhlIGFjdHVhbCB1bmxvY2sgdHlwZSBhbmQgY291bGQgYmUgYSBwaW4vcGFzc3dvcmQvcGF0dGVybiB2YWx1ZSBvclxuICogYSBiaW9tZXRyaWMgZmluZ2VyIGlkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUgVGhlIHVubG9jayB0eXBlLiBUaGUgZm9sbG93aW5nIHVubG9jayB0eXBlc1xuICogYXJlIHN1cHBvcnRlZDogYHBpbmAsIGBwaW5XaXRoS2V5RXZlbnRgLCBgcGFzc3dvcmRgLCBgcGF0dGVybmAgYW5kIGBmaW5nZXJwcmludGAuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHN0cmF0ZWd5IEVpdGhlciAnbG9ja3NldHRpbmdzJyAoZGVmYXVsdCkgb3IgJ3VpYXV0b21hdG9yJy5cbiAqIFNldHRpbmcgaXQgdG8gJ3VpYXV0b21hdG9yJyB3aWxsIGVuZm9yY2UgdGhlIGRyaXZlciB0byBhdm9pZCB1c2luZyBzcGVjaWFsXG4gKiBBREIgc2hvcnRjdXRzIGluIG9yZGVyIHRvIHNwZWVkIHVwIHRoZSB1bmxvY2sgcHJvY2VkdXJlLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB0aW1lb3V0TXMgWzIwMDBdIFRoZSBtYXhpbXVtIHRpbWUgaW4gbWlsbGlzZWNvbmRzXG4gKiB0byB3YWl0IHVudGlsIHRoZSBzY3JlZW4gZ2V0cyB1bmxvY2tlZFxuICovXG5cbi8qKlxuICogVW5sb2NrcyB0aGUgZGV2aWNlIGlmIGl0IGlzIGxvY2tlZC4gTm9vcCBpZiB0aGUgZGV2aWNlJ3Mgc2NyZWVuIGlzIG5vdCBsb2NrZWQuXG4gKlxuICogQHBhcmFtIHs/VW5sb2NrT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHVubG9jayBvcGVyYXRpb24gZmFpbHMgb3IgdGhlIHByb3ZpZGVkXG4gKiBhcmd1bWVudHMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVVbmxvY2sgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVVbmxvY2sgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGtleSwgdHlwZSwgc3RyYXRlZ3ksIHRpbWVvdXRNcyB9ID0gb3B0cztcbiAgYXdhaXQgYW5kcm9pZEhlbHBlcnMudW5sb2NrKHRoaXMsIHRoaXMuYWRiLCB7XG4gICAgdW5sb2NrS2V5OiBrZXksXG4gICAgdW5sb2NrVHlwZTogdHlwZSxcbiAgICB1bmxvY2tTdHJhdGVneTogc3RyYXRlZ3ksXG4gICAgdW5sb2NrU3VjY2Vzc1RpbWVvdXQ6IHRpbWVvdXRNcyxcbiAgfSk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvZ2VuZXJhbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
422
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9nZW5lcmFsLmpzIl0sIm5hbWVzIjpbIk1PTUVOVF9GT1JNQVRfSVNPODYwMSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJrZXlzIiwiXyIsImlzQXJyYXkiLCJqb2luIiwicGFyYW1zIiwidGV4dCIsInJlcGxhY2UiLCJvcHRzIiwidW5pY29kZUtleWJvYXJkIiwiZG9TZW5kS2V5cyIsImJvb3RzdHJhcCIsInNlbmRBY3Rpb24iLCJnZXREZXZpY2VUaW1lIiwiZm9ybWF0IiwibG9nIiwiZGVidWciLCJkZXZpY2VUaW1lc3RhbXAiLCJhZGIiLCJzaGVsbCIsInRyaW0iLCJwYXJzZWRUaW1lc3RhbXAiLCJtb21lbnQiLCJ1dGMiLCJpc1ZhbGlkIiwid2FybiIsInV0Y09mZnNldCIsIl90em0iLCJtb2JpbGVHZXREZXZpY2VUaW1lIiwiZ2V0UGFnZVNvdXJjZSIsImJhY2siLCJpc0tleWJvYXJkU2hvd24iLCJpc1NvZnRLZXlib2FyZFByZXNlbnQiLCJoaWRlS2V5Ym9hcmQiLCJvcGVuU2V0dGluZ3NBY3Rpdml0eSIsInNldHRpbmciLCJhcHBQYWNrYWdlIiwiYXBwQWN0aXZpdHkiLCJnZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5Iiwid2FpdEZvck5vdEFjdGl2aXR5IiwiZ2V0V2luZG93U2l6ZSIsImdldFdpbmRvd1JlY3QiLCJ3aWR0aCIsImhlaWdodCIsIngiLCJ5IiwiZ2V0Q3VycmVudEFjdGl2aXR5IiwiZ2V0Q3VycmVudFBhY2thZ2UiLCJiYWNrZ3JvdW5kIiwic2Vjb25kcyIsImdvVG9Ib21lIiwic2xlZXBNcyIsInRocmVzaG9sZE1zIiwiaW50ZXJ2YWxNcyIsIm1pbiIsInBhcnNlSW50IiwicHJvZ3Jlc3NDYiIsImVsYXBzZWRNcyIsInByb2dyZXNzIiwid2FpdFNlY3MiLCJ0b0ZpeGVkIiwicHJvZ3Jlc3NQY3QiLCJhcmdzIiwiX2NhY2hlZEFjdGl2aXR5QXJncyIsImFjdGl2YXRlQXBwIiwiaWduIiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJzcGxpdCIsImluY2x1ZGVzIiwicGtnIiwiYWN0aXZpdHkiLCJhY3Rpb24iLCJpbnRlbnRBY3Rpb24iLCJjYXRlZ29yeSIsImludGVudENhdGVnb3J5IiwiZmxhZ3MiLCJpbnRlbnRGbGFncyIsIndhaXRQa2ciLCJ3YWl0QWN0aXZpdHkiLCJ3YWl0Rm9yTGF1bmNoIiwiYXBwV2FpdEZvckxhdW5jaCIsIndhaXREdXJhdGlvbiIsImFwcFdhaXREdXJhdGlvbiIsIm9wdGlvbmFsSW50ZW50QXJndW1lbnRzIiwic3RvcEFwcCIsInVzZXIiLCJ1c2VyUHJvZmlsZSIsInV0aWwiLCJmaWx0ZXJPYmplY3QiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhcnRBcHAiLCJnZXRTdHJpbmdzIiwibGFuZ3VhZ2UiLCJnZXREZXZpY2VMYW5ndWFnZSIsImluZm8iLCJwcmVwcm9jZXNzU3RyaW5nc01hcCIsIm1hcHBpbmciLCJyZXN1bHQiLCJrZXkiLCJ2YWx1ZSIsInRvUGFpcnMiLCJpc1N0cmluZyIsImFwa1N0cmluZ3MiLCJhbmRyb2lkSGVscGVycyIsInB1c2hTdHJpbmdzIiwibGF1bmNoQXBwIiwiaW5pdEFVVCIsInN0YXJ0QVVUIiwic3RhcnRBY3Rpdml0eSIsImRvbnRTdG9wQXBwT25SZXNldCIsImhhc1ZhbHVlIiwicmVzZXQiLCJyZXNldEFwcCIsIk9iamVjdCIsImFzc2lnbiIsImZhc3RSZXNldCIsInNldENvbnRleHQiLCJpc0Nocm9tZVNlc3Npb24iLCJzdGFydENocm9tZVNlc3Npb24iLCJzZXRVcmwiLCJ1cmkiLCJzdGFydFVyaSIsImNsb3NlQXBwIiwiZm9yY2VTdG9wIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJvdXQiLCJ2YWwiLCJpc05hTiIsImVycm9yQW5kVGhyb3ciLCJtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uIiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJwZXJmb3JtRWRpdG9yQWN0aW9uIiwiUEVSTUlTU0lPTl9BQ1RJT04iLCJHUkFOVCIsIlJFVk9LRSIsIm1vYmlsZUNoYW5nZVBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhY3Rpb25GdW5jIiwidG9Mb3dlciIsInBlcm1pc3Npb24iLCJncmFudFBlcm1pc3Npb24iLCJyZXZva2VQZXJtaXNzaW9uIiwidmFsdWVzIiwiUEVSTUlTU0lPTlNfVFlQRSIsIkRFTklFRCIsIkdSQU5URUQiLCJSRVFVRVNURUQiLCJtb2JpbGVHZXRQZXJtaXNzaW9ucyIsInR5cGUiLCJnZXRSZXFQZXJtaXNzaW9ucyIsImdldEdyYW50ZWRQZXJtaXNzaW9ucyIsImdldERlbmllZFBlcm1pc3Npb25zIiwibW9iaWxlR2V0Tm90aWZpY2F0aW9ucyIsImdldE5vdGlmaWNhdGlvbnMiLCJtb2JpbGVMaXN0U21zIiwiZ2V0U21zTGlzdCIsIm1vYmlsZVVubG9jayIsInN0cmF0ZWd5IiwidGltZW91dE1zIiwidW5sb2NrIiwidW5sb2NrS2V5IiwidW5sb2NrVHlwZSIsInVubG9ja1N0cmF0ZWd5IiwidW5sb2NrU3VjY2Vzc1RpbWVvdXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEscUJBQXFCLEdBQUcsc0JBQTlCO0FBRUEsSUFBSUMsUUFBUSxHQUFHLEVBQWY7QUFBQSxJQUFtQkMsT0FBTyxHQUFHLEVBQTdCO0FBQUEsSUFBaUNDLFVBQVUsR0FBRyxFQUE5Qzs7OztBQUVBRixRQUFRLENBQUNHLElBQVQsR0FBZ0IsZUFBZUEsSUFBZixDQUFxQkEsSUFBckIsRUFBMkI7QUFFekNBLEVBQUFBLElBQUksR0FBR0MsZ0JBQUVDLE9BQUYsQ0FBVUYsSUFBVixJQUFrQkEsSUFBSSxDQUFDRyxJQUFMLENBQVUsRUFBVixDQUFsQixHQUFrQ0gsSUFBekM7QUFDQSxNQUFJSSxNQUFNLEdBQUc7QUFDWEMsSUFBQUEsSUFBSSxFQUFFTCxJQURLO0FBRVhNLElBQUFBLE9BQU8sRUFBRTtBQUZFLEdBQWI7O0FBSUEs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QVNDLGdCQUFULENBQWYsQ0FBMkMsc0JBRC9DLENBQU47QUFYSjs7QUFjQSxTQUFPLE1BQU1OLFVBQVUsQ0FBQ3hHLFVBQUQsQ0FBdkI7QUFDRCxDQXRCRDs7QUE4QkF0QyxRQUFRLENBQUM2SixzQkFBVCxHQUFrQyxlQUFlQSxzQkFBZixHQUF5QztBQUN6RSxTQUFPLE1BQU0sS0FBS3pJLEdBQUwsQ0FBUzBJLGdCQUFULEVBQWI7QUFDRCxDQUZEOztBQWlCQTlKLFFBQVEsQ0FBQytKLGFBQVQsR0FBeUIsZUFBZUEsYUFBZixDQUE4QnJKLElBQUksR0FBRyxFQUFyQyxFQUF5QztBQUNoRSxTQUFPLE1BQU0sS0FBS1UsR0FBTCxDQUFTNEksVUFBVCxDQUFvQnRKLElBQXBCLENBQWI7QUFDRCxDQUZEOztBQXlCQVYsUUFBUSxDQUFDaUssWUFBVCxHQUF3QixlQUFlQSxZQUFmLENBQTZCdkosSUFBSSxHQUFHLEVBQXBDLEVBQXdDO0FBQzlELFFBQU07QUFBRTRGLElBQUFBLEdBQUY7QUFBT21ELElBQUFBLElBQVA7QUFBYVMsSUFBQUEsUUFBYjtBQUF1QkMsSUFBQUE7QUFBdkIsTUFBcUN6SixJQUEzQztBQUNBLFFBQU1pRyx3QkFBZXlELE1BQWYsQ0FBc0IsSUFBdEIsRUFBNEIsS0FBS2hKLEdBQWpDLEVBQXNDO0FBQzFDaUosSUFBQUEsU0FBUyxFQUFFL0QsR0FEK0I7QUFFMUNnRSxJQUFBQSxVQUFVLEVBQUViLElBRjhCO0FBRzFDYyxJQUFBQSxjQUFjLEVBQUVMLFFBSDBCO0FBSTFDTSxJQUFBQSxvQkFBb0IsRUFBRUw7QUFKb0IsR0FBdEMsQ0FBTjtBQU1ELENBUkQ7O0FBVUE5QyxNQUFNLENBQUNDLE1BQVAsQ0FBY3BILFVBQWQsRUFBMEJGLFFBQTFCLEVBQW9DQyxPQUFwQztlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBhbmRyb2lkSGVscGVycyBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBsb25nU2xlZXAgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcblxuY29uc3QgTU9NRU5UX0ZPUk1BVF9JU084NjAxID0gJ1lZWVktTU0tRERUSEg6bW06c3NaJztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5jb21tYW5kcy5rZXlzID0gYXN5bmMgZnVuY3Rpb24ga2V5cyAoa2V5cykge1xuICAvLyBQcm90b2NvbCBzZW5kcyBhbiBhcnJheTsgcmV0aGluayBhcHByb2FjaFxuICBrZXlzID0gXy5pc0FycmF5KGtleXMpID8ga2V5cy5qb2luKCcnKSA6IGtleXM7XG4gIGxldCBwYXJhbXMgPSB7XG4gICAgdGV4dDoga2V5cyxcbiAgICByZXBsYWNlOiBmYWxzZVxuICB9O1xuICBpZiAodGhpcy5vcHRzLnVuaWNvZGVLZXlib2FyZCkge1xuICAgIHBhcmFtcy51bmljb2RlS2V5Ym9hcmQgPSB0cnVlO1xuICB9XG4gIGF3YWl0IHRoaXMuZG9TZW5kS2V5cyhwYXJhbXMpO1xufTtcblxuY29tbWFuZHMuZG9TZW5kS2V5cyA9IGFzeW5jIGZ1bmN0aW9uIGRvU2VuZEtleXMgKHBhcmFtcykge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignc2V0VGV4dCcsIHBhcmFtcyk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBkZXZpY2UncyB0aW1lc3RhbXAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCAtIFRoZSBzZXQgb2YgZm9ybWF0IHNwZWNpZmllcnMuIFJlYWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL21vbWVudGpzLmNvbS9kb2NzLyB0byBnZXQgdGhlIGZ1bGwgbGlzdCBvZiBzdXBwb3J0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRldGltZSBmb3JtYXQgc3BlY2lmaWVycy4gVGhlIGRlZmF1bHQgZm9ybWF0IGlzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYFlZWVktTU0tRERUSEg6bW06c3NaYCwgd2hpY2ggY29tcGxpZXMgdG8gSVNPLTg2MDFcbiAqIEByZXR1cm4ge3N0cmluZ30gRm9ybWF0dGVkIGRhdGV0aW1lIHN0cmluZyBvciB0aGUgcmF3IGNvbW1hbmQgb3V0cHV0IGlmIGZvcm1hdHRpbmcgZmFpbHNcbiAqL1xuY29tbWFuZHMuZ2V0RGV2aWNlVGltZSA9IGFzeW5jIGZ1bmN0aW9uIGdldERldmljZVRpbWUgKGZvcm1hdCA9IE1PTUVOVF9GT1JNQVRfSVNPODYwMSkge1xuICB0aGlzLmxvZy5kZWJ1ZygnQXR0ZW1wdGluZyB0byBjYXB0dXJlIGFuZHJvaWQgZGV2aWNlIGRhdGUgYW5kIHRpbWUuICcgK1xuICAgIGBUaGUgZm9ybWF0IHNwZWNpZmllciBpcyAnJHtmb3JtYXR9J2ApO1xuICBjb25zdCBkZXZpY2VUaW1lc3RhbXAgPSAoYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydkYXRlJywgJyslWS0lbS0lZFQlVCV6J10pKS50cmltKCk7XG4gIHRoaXMubG9nLmRlYnVnKGBHb3QgZGV2aWNlIHRpbWVzdGFtcDogJHtkZXZpY2VUaW1lc3RhbXB9YCk7XG4gIGNvbnN0IHBhcnNlZFRpbWVzdGFtcCA9IG1vbWVudC51dGMoZGV2aWNlVGltZXN0YW1wLCAnWVlZWS1NTS1ERFRISDptbTpzc1paJyk7XG4gIGlmICghcGFyc2VkVGltZXN0YW1wLmlzVmFsaWQoKSkge1xuICAgIHRoaXMubG9nLndhcm4oJ0Nhbm5vdCBwYXJzZSB0aGUgcmV0dXJuZWQgdGltZXN0YW1wLiBSZXR1cm5pbmcgYXMgaXMnKTtcbiAgICByZXR1cm4gZGV2aWNlVGltZXN0YW1wO1xuICB9XG4gIHJldHVybiBwYXJzZWRUaW1lc3RhbXAudXRjT2Zmc2V0KHBhcnNlZFRpbWVzdGFtcC5fdHptIHx8IDApLmZvcm1hdChmb3JtYXQpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZXZpY2VUaW1lT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGZvcm1hdCBbWVlZWS1NTS1ERFRISDptbTpzc1pdIC0gU2VlIGdldERldmljZVRpbWUjZm9ybWF0XG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZGV2aWNlIHRpbWVcbiAqXG4gKiBAcGFyYW0ge0RldmljZVRpbWVPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEZvcm1hdHRlZCBkYXRldGltZSBzdHJpbmcgb3IgdGhlIHJhdyBjb21tYW5kIG91dHB1dCBpZiBmb3JtYXR0aW5nIGZhaWxzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZVRpbWUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXREZXZpY2VUaW1lIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RGV2aWNlVGltZShvcHRzLmZvcm1hdCk7XG59O1xuXG5jb21tYW5kcy5nZXRQYWdlU291cmNlID0gYXN5bmMgZnVuY3Rpb24gZ2V0UGFnZVNvdXJjZSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdzb3VyY2UnKTtcbn07XG5cbmNvbW1hbmRzLmJhY2sgPSBhc3luYyBmdW5jdGlvbiBiYWNrICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3ByZXNzQmFjaycpO1xufTtcblxuY29tbWFuZHMuaXNLZXlib2FyZFNob3duID0gYXN5bmMgZnVuY3Rpb24gaXNLZXlib2FyZFNob3duICgpIHtcbiAgY29uc3Qge2lzS2V5Ym9hcmRTaG93bn0gPSBhd2FpdCB0aGlzLmFkYi5pc1NvZnRLZXlib2FyZFByZXNlbnQoKTtcbiAgcmV0dXJuIGlzS2V5Ym9hcmRTaG93bjtcbn07XG5cbmNvbW1hbmRzLmhpZGVLZXlib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGhpZGVLZXlib2FyZCAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5oaWRlS2V5Ym9hcmQoKTtcbn07XG5cbmNvbW1hbmRzLm9wZW5TZXR0aW5nc0FjdGl2aXR5ID0gYXN5bmMgZnVuY3Rpb24gb3BlblNldHRpbmdzQWN0aXZpdHkgKHNldHRpbmcpIHtcbiAgbGV0IHthcHBQYWNrYWdlLCBhcHBBY3Rpdml0eX0gPSBhd2FpdCB0aGlzLmFkYi5nZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5KCk7XG4gIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnYW0nLCAnc3RhcnQnLCAnLWEnLCBgYW5kcm9pZC5zZXR0aW5ncy4ke3NldHRpbmd9YF0pO1xuICBhd2FpdCB0aGlzLmFkYi53YWl0Rm9yTm90QWN0aXZpdHkoYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksIDUwMDApO1xufTtcblxuY29tbWFuZHMuZ2V0V2luZG93U2l6ZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFdpbmRvd1NpemUgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZ2V0RGV2aWNlU2l6ZScpO1xufTtcblxuLy8gRm9yIFczQ1xuY29tbWFuZHMuZ2V0V2luZG93UmVjdCA9IGFzeW5jIGZ1bmN0aW9uIGdldFdpbmRvd1JlY3QgKCkge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGF3YWl0IHRoaXMuZ2V0V2luZG93U2l6ZSgpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcbn07XG5cbmNvbW1hbmRzLmdldEN1cnJlbnRBY3Rpdml0eSA9IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRBY3Rpdml0eSAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5hZGIuZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSgpKS5hcHBBY3Rpdml0eTtcbn07XG5cbmNvbW1hbmRzLmdldEN1cnJlbnRQYWNrYWdlID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q3VycmVudFBhY2thZ2UgKCkge1xuICByZXR1cm4gKGF3YWl0IHRoaXMuYWRiLmdldEZvY3VzZWRQYWNrYWdlQW5kQWN0aXZpdHkoKSkuYXBwUGFja2FnZTtcbn07XG5cbmNvbW1hbmRzLmJhY2tncm91bmQgPSBhc3luYyBmdW5jdGlvbiBiYWNrZ3JvdW5kIChzZWNvbmRzKSB7XG4gIGlmIChzZWNvbmRzIDwgMCkge1xuICAgIC8vIGlmIHVzZXIgcGFzc2VzIGluIGEgbmVnYXRpdmUgc2Vjb25kcyB2YWx1ZSwgaW50ZXJwcmV0IHRoYXQgYXMgdGhlIGluc3RydWN0aW9uXG4gICAgLy8gdG8gbm90IGJyaW5nIHRoZSBhcHAgYmFjayBhdCBhbGxcbiAgICBhd2FpdCB0aGlzLmFkYi5nb1RvSG9tZSgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGxldCB7YXBwUGFja2FnZSwgYXBwQWN0aXZpdHl9ID0gYXdhaXQgdGhpcy5hZGIuZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSgpO1xuICBhd2FpdCB0aGlzLmFkYi5nb1RvSG9tZSgpO1xuXG4gIC8vIHBlb3BsZSBjYW4gd2FpdCBmb3IgYSBsb25nIHRpbWUsIHNvIHRvIGJlIHNhZmUgbGV0J3MgdXNlIHRoZSBsb25nU2xlZXAgZnVuY3Rpb24gYW5kIGxvZ1xuICAvLyBwcm9ncmVzcyBwZXJpb2RpY2FsbHkuXG4gIGNvbnN0IHNsZWVwTXMgPSBzZWNvbmRzICogMTAwMDtcbiAgY29uc3QgdGhyZXNob2xkTXMgPSAzMCAqIDEwMDA7IC8vIHVzZSB0aGUgc3Bpbi13YWl0IGZvciBhbnl0aGluZyBvdmVyIHRoaXMgdGhyZXNob2xkXG4gIC8vIGZvciBvdXIgc3BpbiBpbnRlcnZhbCwgdXNlIDElIG9mIHRoZSB0b3RhbCB3YWl0IHRpbWUsIGJ1dCBub3RoaW5nIGJpZ2dlciB0aGFuIDMwc1xuICBjb25zdCBpbnRlcnZhbE1zID0gXy5taW4oWzMwICogMTAwMCwgcGFyc2VJbnQoc2xlZXBNcyAvIDEwMCwgMTApXSk7XG4gIGNvbnN0IHByb2dyZXNzQ2IgPSAoe2VsYXBzZWRNcywgcHJvZ3Jlc3N9KSA9PiB7XG4gICAgY29uc3Qgd2FpdFNlY3MgPSAoZWxhcHNlZE1zIC8gMTAwMCkudG9GaXhlZCgwKTtcbiAgICBjb25zdCBwcm9ncmVzc1BjdCA9IChwcm9ncmVzcyAqIDEwMCkudG9GaXhlZCgyKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgV2FpdGVkICR7d2FpdFNlY3N9cyBzbyBmYXIgKCR7cHJvZ3Jlc3NQY3R9JSlgKTtcbiAgfTtcbiAgYXdhaXQgbG9uZ1NsZWVwKHNsZWVwTXMsIHt0aHJlc2hvbGRNcywgaW50ZXJ2YWxNcywgcHJvZ3Jlc3NDYn0pO1xuXG4gIGxldCBhcmdzO1xuICBpZiAodGhpcy5fY2FjaGVkQWN0aXZpdHlBcmdzICYmIHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJnc1tgJHthcHBQYWNrYWdlfS8ke2FwcEFjdGl2aXR5fWBdKSB7XG4gICAgLy8gdGhlIGFjdGl2aXR5IHdhcyBzdGFydGVkIHdpdGggYHN0YXJ0QWN0aXZpdHlgLCBzbyB1c2UgdGhvc2UgYXJncyB0byByZXN0YXJ0XG4gICAgYXJncyA9IHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJnc1tgJHthcHBQYWNrYWdlfS8ke2FwcEFjdGl2aXR5fWBdO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgQWN0aXZhdGluZyBhcHAgJyR7YXBwUGFja2FnZX0nIGluIG9yZGVyIHRvIHJlc3RvcmUgaXRgKTtcbiAgICAgIGF3YWl0IHRoaXMuYWN0aXZhdGVBcHAoYXBwUGFja2FnZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgYXJncyA9ICgoYXBwUGFja2FnZSA9PT0gdGhpcy5vcHRzLmFwcFBhY2thZ2UgJiYgYXBwQWN0aXZpdHkgPT09IHRoaXMub3B0cy5hcHBBY3Rpdml0eSkgfHxcbiAgICAgICAgICAgIChhcHBQYWNrYWdlID09PSB0aGlzLm9wdHMuYXBwV2FpdFBhY2thZ2UgJiYgKHRoaXMub3B0cy5hcHBXYWl0QWN0aXZpdHkgfHwgJycpLnNwbGl0KCcsJykuaW5jbHVkZXMoYXBwQWN0aXZpdHkpKSlcbiAgICAgID8gey8vIHRoZSBhY3Rpdml0eSBpcyB0aGUgb3JpZ2luYWwgc2Vzc2lvbiBhY3Rpdml0eSwgc28gdXNlIHRoZSBvcmlnaW5hbCBhcmdzXG4gICAgICAgIHBrZzogdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gICAgICAgIGFjdGl2aXR5OiB0aGlzLm9wdHMuYXBwQWN0aXZpdHksXG4gICAgICAgIGFjdGlvbjogdGhpcy5vcHRzLmludGVudEFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IHRoaXMub3B0cy5pbnRlbnRDYXRlZ29yeSxcbiAgICAgICAgZmxhZ3M6IHRoaXMub3B0cy5pbnRlbnRGbGFncyxcbiAgICAgICAgd2FpdFBrZzogdGhpcy5vcHRzLmFwcFdhaXRQYWNrYWdlLFxuICAgICAgICB3YWl0QWN0aXZpdHk6IHRoaXMub3B0cy5hcHBXYWl0QWN0aXZpdHksXG4gICAgICAgIHdhaXRGb3JMYXVuY2g6IHRoaXMub3B0cy5hcHBXYWl0Rm9yTGF1bmNoLFxuICAgICAgICB3YWl0RHVyYXRpb246IHRoaXMub3B0cy5hcHBXYWl0RHVyYXRpb24sXG4gICAgICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzOiB0aGlzLm9wdHMub3B0aW9uYWxJbnRlbnRBcmd1bWVudHMsXG4gICAgICAgIHN0b3BBcHA6IGZhbHNlLFxuICAgICAgICB1c2VyOiB0aGlzLm9wdHMudXNlclByb2ZpbGV9XG4gICAgICA6IHsvLyB0aGUgYWN0aXZpdHkgd2FzIHN0YXJ0ZWQgc29tZSBvdGhlciB3YXksIHNvIHVzZSBkZWZhdWx0c1xuICAgICAgICBwa2c6IGFwcFBhY2thZ2UsXG4gICAgICAgIGFjdGl2aXR5OiBhcHBBY3Rpdml0eSxcbiAgICAgICAgd2FpdFBrZzogYXBwUGFja2FnZSxcbiAgICAgICAgd2FpdEFjdGl2aXR5OiBhcHBBY3Rpdml0eSxcbiAgICAgICAgc3RvcEFwcDogZmFsc2V9O1xuICB9XG4gIGFyZ3MgPSBhd2FpdCB1dGlsLmZpbHRlck9iamVjdChhcmdzKTtcbiAgdGhpcy5sb2cuZGVidWcoYEJyaW5naW5nIGFwcGxpY2F0aW9uIGJhY2sgdG8gZm9yZWdyb3VuZCB3aXRoIGFyZ3VtZW50czogJHtKU09OLnN0cmluZ2lmeShhcmdzKX1gKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnN0YXJ0QXBwKGFyZ3MpO1xufTtcblxuY29tbWFuZHMuZ2V0U3RyaW5ncyA9IGFzeW5jIGZ1bmN0aW9uIGdldFN0cmluZ3MgKGxhbmd1YWdlKSB7XG4gIGlmICghbGFuZ3VhZ2UpIHtcbiAgICBsYW5ndWFnZSA9IGF3YWl0IHRoaXMuYWRiLmdldERldmljZUxhbmd1YWdlKCk7XG4gICAgdGhpcy5sb2cuaW5mbyhgTm8gbGFuZ3VhZ2Ugc3BlY2lmaWVkLCByZXR1cm5pbmcgc3RyaW5ncyBmb3I6ICR7bGFuZ3VhZ2V9YCk7XG4gIH1cblxuICAvLyBDbGllbnRzIHJlcXVpcmUgdGhlIHJlc3VsdGluZyBtYXBwaW5nIHRvIGhhdmUgYm90aCBrZXlzXG4gIC8vIGFuZCB2YWx1ZXMgb2YgdHlwZSBzdHJpbmdcbiAgY29uc3QgcHJlcHJvY2Vzc1N0cmluZ3NNYXAgPSAobWFwcGluZykgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhtYXBwaW5nKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBfLmlzU3RyaW5nKHZhbHVlKSA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGlmICh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKSB7XG4gICAgLy8gUmV0dXJuIGNhY2hlZCBzdHJpbmdzXG4gICAgcmV0dXJuIHByZXByb2Nlc3NTdHJpbmdzTWFwKHRoaXMuYXBrU3RyaW5nc1tsYW5ndWFnZV0pO1xuICB9XG5cbiAgdGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSA9IGF3YWl0IGFuZHJvaWRIZWxwZXJzLnB1c2hTdHJpbmdzKGxhbmd1YWdlLCB0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgaWYgKHRoaXMuYm9vdHN0cmFwKSB7XG4gICAgLy8gVE9ETzogVGhpcyBpcyBtdXRhdGluZyB0aGUgY3VycmVudCBsYW5ndWFnZSwgYnV0IGl0J3MgaG93IGFwcGl1bSBjdXJyZW50bHkgd29ya3NcbiAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCd1cGRhdGVTdHJpbmdzJyk7XG4gIH1cblxuICByZXR1cm4gcHJlcHJvY2Vzc1N0cmluZ3NNYXAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSk7XG59O1xuXG5jb21tYW5kcy5sYXVuY2hBcHAgPSBhc3luYyBmdW5jdGlvbiBsYXVuY2hBcHAgKCkge1xuICBhd2FpdCB0aGlzLmluaXRBVVQoKTtcbiAgYXdhaXQgdGhpcy5zdGFydEFVVCgpO1xufTtcblxuY29tbWFuZHMuc3RhcnRBY3Rpdml0eSA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0QWN0aXZpdHkgKGFwcFBhY2thZ2UsIGFwcEFjdGl2aXR5LFxuICBhcHBXYWl0UGFja2FnZSwgYXBwV2FpdEFjdGl2aXR5LCBpbnRlbnRBY3Rpb24sIGludGVudENhdGVnb3J5LCBpbnRlbnRGbGFncyxcbiAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMsIGRvbnRTdG9wQXBwT25SZXNldCkge1xuICB0aGlzLmxvZy5kZWJ1ZyhgU3RhcnRpbmcgcGFja2FnZSAnJHthcHBQYWNrYWdlfScgYW5kIGFjdGl2aXR5ICcke2FwcEFjdGl2aXR5fSdgKTtcblxuICAvLyBkb250U3RvcEFwcE9uUmVzZXQgaXMgYm90aCBhbiBhcmd1bWVudCBoZXJlLCBhbmQgYSBkZXNpcmVkIGNhcGFiaWxpdHlcbiAgLy8gaWYgdGhlIGFyZ3VtZW50IGlzIHNldCwgdXNlIGl0LCBvdGhlcndpc2UgdXNlIHRoZSBjYXBcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKGRvbnRTdG9wQXBwT25SZXNldCkpIHtcbiAgICBkb250U3RvcEFwcE9uUmVzZXQgPSAhIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXQ7XG4gIH1cblxuICBsZXQgYXJncyA9IHtcbiAgICBwa2c6IGFwcFBhY2thZ2UsXG4gICAgYWN0aXZpdHk6IGFwcEFjdGl2aXR5LFxuICAgIHdhaXRQa2c6IGFwcFdhaXRQYWNrYWdlIHx8IGFwcFBhY2thZ2UsXG4gICAgd2FpdEFjdGl2aXR5OiBhcHBXYWl0QWN0aXZpdHkgfHwgYXBwQWN0aXZpdHksXG4gICAgYWN0aW9uOiBpbnRlbnRBY3Rpb24sXG4gICAgY2F0ZWdvcnk6IGludGVudENhdGVnb3J5LFxuICAgIGZsYWdzOiBpbnRlbnRGbGFncyxcbiAgICBvcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICBzdG9wQXBwOiAhZG9udFN0b3BBcHBPblJlc2V0XG4gIH07XG4gIHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJncyA9IHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJncyB8fCB7fTtcbiAgdGhpcy5fY2FjaGVkQWN0aXZpdHlBcmdzW2Ake2FyZ3Mud2FpdFBrZ30vJHthcmdzLndhaXRBY3Rpdml0eX1gXSA9IGFyZ3M7XG4gIGF3YWl0IHRoaXMuYWRiLnN0YXJ0QXBwKGFyZ3MpO1xufTtcblxuY29tbWFuZHMucmVzZXQgPSBhc3luYyBmdW5jdGlvbiByZXNldCAoKSB7XG4gIGF3YWl0IGFuZHJvaWRIZWxwZXJzLnJlc2V0QXBwKHRoaXMuYWRiLCBPYmplY3QuYXNzaWduKHt9LCB0aGlzLm9wdHMsIHtmYXN0UmVzZXQ6IHRydWV9KSk7XG4gIC8vIHJlc2V0IGNvbnRleHQgc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGF0IGtpbmQgb24gY29udGV4dCB3ZSB3aWxsIGVuZCB1cCBhZnRlciBhcHAgbGF1bmNoLlxuICBhd2FpdCB0aGlzLnNldENvbnRleHQoKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuaXNDaHJvbWVTZXNzaW9uID8gdGhpcy5zdGFydENocm9tZVNlc3Npb24oKSA6IHRoaXMuc3RhcnRBVVQoKTtcbn07XG5cbmNvbW1hbmRzLnN0YXJ0QVVUID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRBVVQgKCkge1xuICBhd2FpdCB0aGlzLmFkYi5zdGFydEFwcCh7XG4gICAgcGtnOiB0aGlzLm9wdHMuYXBwUGFja2FnZSxcbiAgICBhY3Rpdml0eTogdGhpcy5vcHRzLmFwcEFjdGl2aXR5LFxuICAgIGFjdGlvbjogdGhpcy5vcHRzLmludGVudEFjdGlvbixcbiAgICBjYXRlZ29yeTogdGhpcy5vcHRzLmludGVudENhdGVnb3J5LFxuICAgIGZsYWdzOiB0aGlzLm9wdHMuaW50ZW50RmxhZ3MsXG4gICAgd2FpdFBrZzogdGhpcy5vcHRzLmFwcFdhaXRQYWNrYWdlLFxuICAgIHdhaXRBY3Rpdml0eTogdGhpcy5vcHRzLmFwcFdhaXRBY3Rpdml0eSxcbiAgICB3YWl0Rm9yTGF1bmNoOiB0aGlzLm9wdHMuYXBwV2FpdEZvckxhdW5jaCxcbiAgICB3YWl0RHVyYXRpb246IHRoaXMub3B0cy5hcHBXYWl0RHVyYXRpb24sXG4gICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHM6IHRoaXMub3B0cy5vcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICBzdG9wQXBwOiAhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldCxcbiAgICB1c2VyOiB0aGlzLm9wdHMudXNlclByb2ZpbGUsXG4gIH0pO1xufTtcblxuLy8gd2Ugb3ZlcnJpZGUgc2V0VXJsIHRvIHRha2UgYW4gYW5kcm9pZCBVUkkgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGRlZXAtbGlua2luZ1xuLy8gaW5zaWRlIGFuIGFwcCwgc2ltaWxhciB0byBzdGFydGluZyBhbiBpbnRlbnRcbmNvbW1hbmRzLnNldFVybCA9IGFzeW5jIGZ1bmN0aW9uIHNldFVybCAodXJpKSB7XG4gIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVyaSwgdGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xufTtcblxuLy8gY2xvc2luZyBhcHAgdXNpbmcgZm9yY2Ugc3RvcFxuY29tbWFuZHMuY2xvc2VBcHAgPSBhc3luYyBmdW5jdGlvbiBjbG9zZUFwcCAoKSB7XG4gIGF3YWl0IHRoaXMuYWRiLmZvcmNlU3RvcCh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gIC8vIHJlc2V0IGNvbnRleHQgc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGF0IGtpbmQgb24gY29udGV4dCB3ZSB3aWxsIGVuZCB1cCBhZnRlciBhcHAgbGF1bmNoLlxuICBhd2FpdCB0aGlzLnNldENvbnRleHQoKTtcbn07XG5cbmNvbW1hbmRzLmdldERpc3BsYXlEZW5zaXR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGlzcGxheURlbnNpdHkgKCkge1xuICAvLyBmaXJzdCB0cnkgdGhlIHByb3BlcnR5IGZvciBkZXZpY2VzXG4gIGxldCBvdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2dldHByb3AnLCAncm8uc2YubGNkX2RlbnNpdHknXSk7XG4gIGlmIChvdXQpIHtcbiAgICBsZXQgdmFsID0gcGFyc2VJbnQob3V0LCAxMCk7XG4gICAgLy8gaWYgdGhlIHZhbHVlIGlzIE5hTiwgdHJ5IGdldHRpbmcgdGhlIGVtdWxhdG9yIHByb3BlcnR5XG4gICAgaWYgKCFpc05hTih2YWwpKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICB0aGlzLmxvZy5kZWJ1ZyhgUGFyc2VkIGRlbnNpdHkgdmFsdWUgd2FzIE5hTjogXCIke291dH1cImApO1xuICB9XG4gIC8vIGZhbGxiYWNrIHRvIHRyeWluZyBwcm9wZXJ0eSBmb3IgZW11bGF0b3JzXG4gIG91dCA9IGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnZ2V0cHJvcCcsICdxZW11LnNmLmxjZF9kZW5zaXR5J10pO1xuICBpZiAob3V0KSB7XG4gICAgbGV0IHZhbCA9IHBhcnNlSW50KG91dCwgMTApO1xuICAgIGlmICghaXNOYU4odmFsKSkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgdGhpcy5sb2cuZGVidWcoYFBhcnNlZCBkZW5zaXR5IHZhbHVlIHdhcyBOYU46IFwiJHtvdXR9XCJgKTtcbiAgfVxuICAvLyBjb3VsZG4ndCBnZXQgYW55dGhpbmcsIHNvIGVycm9yIG91dFxuICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdGYWlsZWQgdG8gZ2V0IGRpc3BsYXkgZGVuc2l0eSBwcm9wZXJ0eS4nKTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2FjdGlvbn0gPSBvcHRzO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUoYWN0aW9uKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYCdhY3Rpb24nIGFyZ3VtZW50IGlzIHJlcXVpcmVkYCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLmFkYi5wZXJmb3JtRWRpdG9yQWN0aW9uKGFjdGlvbik7XG59O1xuXG5jb25zdCBQRVJNSVNTSU9OX0FDVElPTiA9IHtcbiAgR1JBTlQ6ICdncmFudCcsXG4gIFJFVk9LRTogJ3Jldm9rZScsXG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENoYW5nZVBlcm1pc3Npb25zT3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfEFycmF5PHN0cmluZz59IHBlcm1pc3Npb25zIC0gVGhlIGZ1bGwgbmFtZSBvZiB0aGUgcGVybWlzc2lvbiB0byBiZSBjaGFuZ2VkXG4gKiBvciBhIGxpc3Qgb2YgcGVybWlzc2lvbnMuIE1hbmRhdG9yeSBhcmd1bWVudC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBQYWNrYWdlIFt0aGlzLm9wdHMuYXBwUGFja2FnZV0gLSBUaGUgYXBwbGljYXRpb24gcGFja2FnZSB0byBzZXQgY2hhbmdlXG4gKiBwZXJtaXNzaW9ucyBvbi4gRGVmYXVsdHMgdG8gdGhlIHBhY2thZ2UgbmFtZSB1bmRlciB0ZXN0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFjdGlvbiBbZ3JhbnRdIC0gT25lIG9mIGBQRVJNSVNTSU9OX0FDVElPTmAgdmFsdWVzXG4gKi9cblxuLyoqXG4gKiBDaGFuZ2VzIHBhY2thZ2UgcGVybWlzc2lvbnMgaW4gcnVudGltZS5cbiAqXG4gKiBAcGFyYW0gez9DaGFuZ2VQZXJtaXNzaW9uc09wdGlvbnN9IG9wdHMgLSBBdmFpbGFibGUgb3B0aW9ucyBtYXBwaW5nLlxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgY2hhbmdpbmcgcGVybWlzc2lvbnNcbiAqL1xuY29tbWFuZHMubW9iaWxlQ2hhbmdlUGVybWlzc2lvbnMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVDaGFuZ2VQZXJtaXNzaW9ucyAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBwZXJtaXNzaW9ucyxcbiAgICBhcHBQYWNrYWdlID0gdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gICAgYWN0aW9uID0gUEVSTUlTU0lPTl9BQ1RJT04uR1JBTlQsXG4gIH0gPSBvcHRzO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUocGVybWlzc2lvbnMpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgJ3Blcm1pc3Npb25zJyBhcmd1bWVudCBpcyByZXF1aXJlZGApO1xuICB9XG5cbiAgbGV0IGFjdGlvbkZ1bmM7XG4gIHN3aXRjaCAoXy50b0xvd2VyKGFjdGlvbikpIHtcbiAgICBjYXNlIFBFUk1JU1NJT05fQUNUSU9OLkdSQU5UOlxuICAgICAgYWN0aW9uRnVuYyA9IChhcHBQYWNrYWdlLCBwZXJtaXNzaW9uKSA9PiB0aGlzLmFkYi5ncmFudFBlcm1pc3Npb24oYXBwUGFja2FnZSwgcGVybWlzc2lvbik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFBFUk1JU1NJT05fQUNUSU9OLlJFVk9LRTpcbiAgICAgIGFjdGlvbkZ1bmMgPSAoYXBwUGFja2FnZSwgcGVybWlzc2lvbikgPT4gdGhpcy5hZGIucmV2b2tlUGVybWlzc2lvbihhcHBQYWNrYWdlLCBwZXJtaXNzaW9uKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBVbmtub3duIGFjdGlvbiAnJHthY3Rpb259Jy4gYCArXG4gICAgICAgIGBPbmx5ICR7SlNPTi5zdHJpbmdpZnkoXy52YWx1ZXMoUEVSTUlTU0lPTl9BQ1RJT04pKX0gYWN0aW9ucyBhcmUgc3VwcG9ydGVkYCk7XG4gIH1cbiAgZm9yIChjb25zdCBwZXJtaXNzaW9uIG9mIChfLmlzQXJyYXkocGVybWlzc2lvbnMpID8gcGVybWlzc2lvbnMgOiBbcGVybWlzc2lvbnNdKSkge1xuICAgIGF3YWl0IGFjdGlvbkZ1bmMoYXBwUGFja2FnZSwgcGVybWlzc2lvbik7XG4gIH1cbn07XG5cbmNvbnN0IFBFUk1JU1NJT05TX1RZUEUgPSB7XG4gIERFTklFRDogJ2RlbmllZCcsXG4gIEdSQU5URUQ6ICdncmFudGVkJyxcbiAgUkVRVUVTVEVEOiAncmVxdWVzdGVkJyxcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gR2V0UGVybWlzc2lvbnNPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZSBbcmVxdWVzdGVkXSAtIE9uZSBvZiBwb3NzaWJsZSBwZXJtaXNzaW9uIHR5cGVzIHRvIGdldC5cbiAqIENhbiBiZSBhbnkgb2YgYFBFUk1JU1NJT05TX1RZUEVgIHZhbHVlcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBQYWNrYWdlIFt0aGlzLm9wdHMuYXBwUGFja2FnZV0gLSBUaGUgYXBwbGljYXRpb24gcGFja2FnZSB0byBzZXQgY2hhbmdlXG4gKiBwZXJtaXNzaW9ucyBvbi4gRGVmYXVsdHMgdG8gdGhlIHBhY2thZ2UgbmFtZSB1bmRlciB0ZXN0LlxuICovXG5cbi8qKlxuICogR2V0cyBydW50aW1lIHBlcm1pc3Npb25zIGxpc3QgZm9yIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiBwYWNrYWdlLlxuICpcbiAqIEBwYXJhbSB7R2V0UGVybWlzc2lvbnNPcHRpb25zfSBvcHRzIC0gQXZhaWxhYmxlIG9wdGlvbnMgbWFwcGluZy5cbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSBUaGUgbGlzdCBvZiByZXRyaWV2ZWQgcGVybWlzc2lvbnMgZm9yIHRoZSBnaXZlbiB0eXBlXG4gKiAoY2FuIGFsc28gYmUgZW1wdHkpLlxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBnZXR0aW5nIHBlcm1pc3Npb25zLlxuICovXG5jb21tYW5kcy5tb2JpbGVHZXRQZXJtaXNzaW9ucyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUdldFBlcm1pc3Npb25zIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHR5cGUgPSBQRVJNSVNTSU9OU19UWVBFLlJFUVVFU1RFRCxcbiAgICBhcHBQYWNrYWdlID0gdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gIH0gPSBvcHRzO1xuXG4gIGxldCBhY3Rpb25GdW5jO1xuICBzd2l0Y2ggKF8udG9Mb3dlcih0eXBlKSkge1xuICAgIGNhc2UgUEVSTUlTU0lPTlNfVFlQRS5SRVFVRVNURUQ6XG4gICAgICBhY3Rpb25GdW5jID0gKGFwcFBhY2thZ2UpID0+IHRoaXMuYWRiLmdldFJlcVBlcm1pc3Npb25zKGFwcFBhY2thZ2UpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBQRVJNSVNTSU9OU19UWVBFLkdSQU5URUQ6XG4gICAgICBhY3Rpb25GdW5jID0gKGFwcFBhY2thZ2UpID0+IHRoaXMuYWRiLmdldEdyYW50ZWRQZXJtaXNzaW9ucyhhcHBQYWNrYWdlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgUEVSTUlTU0lPTlNfVFlQRS5ERU5JRUQ6XG4gICAgICBhY3Rpb25GdW5jID0gKGFwcFBhY2thZ2UpID0+IHRoaXMuYWRiLmdldERlbmllZFBlcm1pc3Npb25zKGFwcFBhY2thZ2UpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFVua25vd24gcGVybWlzc2lvbnMgdHlwZSAnJHt0eXBlfScuIGAgK1xuICAgICAgICBgT25seSAke0pTT04uc3RyaW5naWZ5KF8udmFsdWVzKFBFUk1JU1NJT05TX1RZUEUpKX0gdHlwZXMgYXJlIHN1cHBvcnRlZGApO1xuICB9XG4gIHJldHVybiBhd2FpdCBhY3Rpb25GdW5jKGFwcFBhY2thZ2UpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgcmVjZW50IHN5c3RlbSBub3RpZmljYXRpb25zLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvbiBgYWRiLmdldE5vdGlmaWNhdGlvbnNgIGZvclxuICogbW9yZSBkZXRhaWxzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldE5vdGlmaWNhdGlvbnMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXROb3RpZmljYXRpb25zICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLmdldE5vdGlmaWNhdGlvbnMoKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU21zTGlzdE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYXggWzEwMF0gLSBUaGUgbWF4aW11bSBjb3VudCBvZiByZWNlbnQgU01TIG1lc3NhZ2VzXG4gKiB0byByZXRyaWV2ZVxuICovXG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsaXN0IG9mIHJlY2VudCBTTVMgbWVzc2FnZXMgd2l0aCB0aGVpciBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSB7U21zTGlzdE9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvbiBgYWRiLmdldFNtc0xpc3RgIGZvclxuICogbW9yZSBkZXRhaWxzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUxpc3RTbXMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVMaXN0U21zIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLmdldFNtc0xpc3Qob3B0cyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFVubG9ja09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBrZXkgVGhlIHVubG9jayBrZXkuIFRoZSB2YWx1ZSBvZiB0aGlzIGtleSBkZXBlbmRzXG4gKiBvbiB0aGUgYWN0dWFsIHVubG9jayB0eXBlIGFuZCBjb3VsZCBiZSBhIHBpbi9wYXNzd29yZC9wYXR0ZXJuIHZhbHVlIG9yXG4gKiBhIGJpb21ldHJpYyBmaW5nZXIgaWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZSBUaGUgdW5sb2NrIHR5cGUuIFRoZSBmb2xsb3dpbmcgdW5sb2NrIHR5cGVzXG4gKiBhcmUgc3VwcG9ydGVkOiBgcGluYCwgYHBpbldpdGhLZXlFdmVudGAsIGBwYXNzd29yZGAsIGBwYXR0ZXJuYCBhbmQgYGZpbmdlcnByaW50YC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gc3RyYXRlZ3kgRWl0aGVyICdsb2Nrc2V0dGluZ3MnIChkZWZhdWx0KSBvciAndWlhdXRvbWF0b3InLlxuICogU2V0dGluZyBpdCB0byAndWlhdXRvbWF0b3InIHdpbGwgZW5mb3JjZSB0aGUgZHJpdmVyIHRvIGF2b2lkIHVzaW5nIHNwZWNpYWxcbiAqIEFEQiBzaG9ydGN1dHMgaW4gb3JkZXIgdG8gc3BlZWQgdXAgdGhlIHVubG9jayBwcm9jZWR1cmUuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRpbWVvdXRNcyBbMjAwMF0gVGhlIG1heGltdW0gdGltZSBpbiBtaWxsaXNlY29uZHNcbiAqIHRvIHdhaXQgdW50aWwgdGhlIHNjcmVlbiBnZXRzIHVubG9ja2VkXG4gKi9cblxuLyoqXG4gKiBVbmxvY2tzIHRoZSBkZXZpY2UgaWYgaXQgaXMgbG9ja2VkLiBOb29wIGlmIHRoZSBkZXZpY2UncyBzY3JlZW4gaXMgbm90IGxvY2tlZC5cbiAqXG4gKiBAcGFyYW0gez9VbmxvY2tPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdW5sb2NrIG9wZXJhdGlvbiBmYWlscyBvciB0aGUgcHJvdmlkZWRcbiAqIGFyZ3VtZW50cyBhcmUgbm90IHZhbGlkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVVubG9jayAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsga2V5LCB0eXBlLCBzdHJhdGVneSwgdGltZW91dE1zIH0gPSBvcHRzO1xuICBhd2FpdCBhbmRyb2lkSGVscGVycy51bmxvY2sodGhpcywgdGhpcy5hZGIsIHtcbiAgICB1bmxvY2tLZXk6IGtleSxcbiAgICB1bmxvY2tUeXBlOiB0eXBlLFxuICAgIHVubG9ja1N0cmF0ZWd5OiBzdHJhdGVneSxcbiAgICB1bmxvY2tTdWNjZXNzVGltZW91dDogdGltZW91dE1zLFxuICB9KTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9nZW5lcmFsLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
@@ -9,8 +7,6 @@ exports.helpers = exports.default = exports.commands = void 0;
|
|
|
9
7
|
|
|
10
8
|
require("source-map-support/register");
|
|
11
9
|
|
|
12
|
-
var _logger = _interopRequireDefault(require("../logger"));
|
|
13
|
-
|
|
14
10
|
var _baseDriver = require("@appium/base-driver");
|
|
15
11
|
|
|
16
12
|
let commands = {},
|
|
@@ -24,43 +20,34 @@ commands.isIMEActivated = async function isIMEActivated() {
|
|
|
24
20
|
};
|
|
25
21
|
|
|
26
22
|
commands.availableIMEEngines = async function availableIMEEngines() {
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
this.log.debug('Retrieving available IMEs');
|
|
29
24
|
let engines = await this.adb.availableIMEs();
|
|
30
|
-
|
|
31
|
-
_logger.default.debug(`Engines: ${JSON.stringify(engines)}`);
|
|
32
|
-
|
|
25
|
+
this.log.debug(`Engines: ${JSON.stringify(engines)}`);
|
|
33
26
|
return engines;
|
|
34
27
|
};
|
|
35
28
|
|
|
36
29
|
commands.getActiveIMEEngine = async function getActiveIMEEngine() {
|
|
37
|
-
|
|
38
|
-
|
|
30
|
+
this.log.debug('Retrieving current default IME');
|
|
39
31
|
return await this.adb.defaultIME();
|
|
40
32
|
};
|
|
41
33
|
|
|
42
34
|
commands.activateIMEEngine = async function activateIMEEngine(imeId) {
|
|
43
|
-
|
|
44
|
-
|
|
35
|
+
this.log.debug(`Attempting to activate IME ${imeId}`);
|
|
45
36
|
let availableEngines = await this.adb.availableIMEs();
|
|
46
37
|
|
|
47
38
|
if (availableEngines.indexOf(imeId) === -1) {
|
|
48
|
-
|
|
49
|
-
|
|
39
|
+
this.log.debug('IME not found, failing');
|
|
50
40
|
throw new _baseDriver.errors.IMENotAvailableError();
|
|
51
41
|
}
|
|
52
42
|
|
|
53
|
-
|
|
54
|
-
|
|
43
|
+
this.log.debug('Found installed IME, attempting to activate');
|
|
55
44
|
await this.adb.enableIME(imeId);
|
|
56
45
|
await this.adb.setIME(imeId);
|
|
57
46
|
};
|
|
58
47
|
|
|
59
48
|
commands.deactivateIMEEngine = async function deactivateIMEEngine() {
|
|
60
49
|
let currentEngine = await this.getActiveIMEEngine();
|
|
61
|
-
|
|
62
|
-
_logger.default.debug(`Attempting to deactivate ${currentEngine}`);
|
|
63
|
-
|
|
50
|
+
this.log.debug(`Attempting to deactivate ${currentEngine}`);
|
|
64
51
|
await this.adb.disableIME(currentEngine);
|
|
65
52
|
};
|
|
66
53
|
|
|
@@ -69,4 +56,4 @@ var _default = extensions;
|
|
|
69
56
|
exports.default = _default;require('source-map-support').install();
|
|
70
57
|
|
|
71
58
|
|
|
72
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9pbWUuanMiXSwibmFtZXMiOlsiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsImlzSU1FQWN0aXZhdGVkIiwiYXZhaWxhYmxlSU1FRW5naW5lcyIsImxvZyIsImRlYnVnIiwiZW5naW5lcyIsImFkYiIsImF2YWlsYWJsZUlNRXMiLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0QWN0aXZlSU1FRW5naW5lIiwiZGVmYXVsdElNRSIsImFjdGl2YXRlSU1FRW5naW5lIiwiaW1lSWQiLCJhdmFpbGFibGVFbmdpbmVzIiwiaW5kZXhPZiIsImVycm9ycyIsIklNRU5vdEF2YWlsYWJsZUVycm9yIiwiZW5hYmxlSU1FIiwic2V0SU1FIiwiZGVhY3RpdmF0ZUlNRUVuZ2luZSIsImN1cnJlbnRFbmdpbmUiLCJkaXNhYmxlSU1FIiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFFQSxJQUFJQSxRQUFRLEdBQUcsRUFBZjtBQUFBLElBQW1CQyxPQUFPLEdBQUcsRUFBN0I7QUFBQSxJQUFpQ0MsVUFBVSxHQUFHLEVBQTlDOzs7O0FBRUFGLFFBQVEsQ0FBQ0csY0FBVCxHQUEwQixlQUFlQSxjQUFmLEdBQWlDO0FBRXpELFNBQU8sSUFBUDtBQUNELENBSEQ7O0FBS0FILFFBQVEsQ0FBQ0ksbUJBQVQsR0FBK0IsZUFBZUEsbUJBQWYsR0FBc0M7QUFDbkUsT0FBS0MsR0FBTCxDQUFTQyxLQUFULENBQWUsMkJBQWY7QUFDQSxNQUFJQyxPQUFPLEdBQUcsTUFBTSxLQUFLQyxHQUFMLENBQVNDLGFBQVQsRUFBcEI7QUFDQSxPQUFLSixHQUFMLENBQVNDLEtBQVQsQ0FBZ0IsWUFBV0ksSUFBSSxDQUFDQyxTQUFMLENBQWVKLE9BQWYsQ0FBd0IsRUFBbkQ7QUFDQSxTQUFPQSxPQUFQO0FBQ0QsQ0FMRDs7QUFPQVAsUUFBUSxDQUFDWSxrQkFBVCxHQUE4QixlQUFlQSxrQkFBZixHQUFxQztBQUNqRSxPQUFLUCxHQUFMLENBQVNDLEtBQVQsQ0FBZSxnQ0FBZjtBQUNBLFNBQU8sTUFBTSxLQUFLRSxHQUFMLENBQVNLLFVBQVQsRUFBYjtBQUNELENBSEQ7O0FBS0FiLFFBQVEsQ0FBQ2MsaUJBQVQsR0FBNkIsZUFBZUEsaUJBQWYsQ0FBa0NDLEtBQWxDLEVBQXlDO0FBQ3BFLE9BQUtWLEdBQUwsQ0FBU0MsS0FBVCxDQUFnQiw4QkFBNkJTLEtBQU0sRUFBbkQ7QUFDQSxNQUFJQyxnQkFBZ0IsR0FBRyxNQUFNLEtBQUtSLEdBQUwsQ0FBU0MsYUFBVCxFQUE3Qjs7QUFDQSxNQUFJTyxnQkFBZ0IsQ0FBQ0MsT0FBakIsQ0FBeUJGLEtBQXpCLE1BQW9DLENBQUMsQ0FBekMsRUFBNEM7QUFDMUMsU0FBS1YsR0FBTCxDQUFTQyxLQUFULENBQWUsd0JBQWY7QUFDQSxVQUFNLElBQUlZLG1CQUFPQyxvQkFBWCxFQUFOO0FBQ0Q7O0FBQ0QsT0FBS2QsR0FBTCxDQUFTQyxLQUFULENBQWUsNkNBQWY7QUFDQSxRQUFNLEtBQUtFLEdBQUwsQ0FBU1ksU0FBVCxDQUFtQkwsS0FBbkIsQ0FBTjtBQUNBLFFBQU0sS0FBS1AsR0FBTCxDQUFTYSxNQUFULENBQWdCTixLQUFoQixDQUFOO0FBQ0QsQ0FWRDs7QUFZQWYsUUFBUSxDQUFDc0IsbUJBQVQsR0FBK0IsZUFBZUEsbUJBQWYsR0FBc0M7QUFDbkUsTUFBSUMsYUFBYSxHQUFHLE1BQU0sS0FBS1gsa0JBQUwsRUFBMUI7QUFDQSxPQUFLUCxHQUFMLENBQVNDLEtBQVQsQ0FBZ0IsNEJBQTJCaUIsYUFBYyxFQUF6RDtBQUNBLFFBQU0sS0FBS2YsR0FBTCxDQUFTZ0IsVUFBVCxDQUFvQkQsYUFBcEIsQ0FBTjtBQUNELENBSkQ7O0FBTUFFLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjeEIsVUFBZCxFQUEwQkYsUUFBMUIsRUFBb0NDLE9BQXBDO2VBRWVDLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5jb21tYW5kcy5pc0lNRUFjdGl2YXRlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzSU1FQWN0aXZhdGVkICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIC8vIElNRSBpcyBhbHdheXMgYWN0aXZhdGVkIG9uIEFuZHJvaWQgZGV2aWNlc1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbW1hbmRzLmF2YWlsYWJsZUlNRUVuZ2luZXMgPSBhc3luYyBmdW5jdGlvbiBhdmFpbGFibGVJTUVFbmdpbmVzICgpIHtcbiAgdGhpcy5sb2cuZGVidWcoJ1JldHJpZXZpbmcgYXZhaWxhYmxlIElNRXMnKTtcbiAgbGV0IGVuZ2luZXMgPSBhd2FpdCB0aGlzLmFkYi5hdmFpbGFibGVJTUVzKCk7XG4gIHRoaXMubG9nLmRlYnVnKGBFbmdpbmVzOiAke0pTT04uc3RyaW5naWZ5KGVuZ2luZXMpfWApO1xuICByZXR1cm4gZW5naW5lcztcbn07XG5cbmNvbW1hbmRzLmdldEFjdGl2ZUlNRUVuZ2luZSA9IGFzeW5jIGZ1bmN0aW9uIGdldEFjdGl2ZUlNRUVuZ2luZSAoKSB7XG4gIHRoaXMubG9nLmRlYnVnKCdSZXRyaWV2aW5nIGN1cnJlbnQgZGVmYXVsdCBJTUUnKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLmRlZmF1bHRJTUUoKTtcbn07XG5cbmNvbW1hbmRzLmFjdGl2YXRlSU1FRW5naW5lID0gYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVJTUVFbmdpbmUgKGltZUlkKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBBdHRlbXB0aW5nIHRvIGFjdGl2YXRlIElNRSAke2ltZUlkfWApO1xuICBsZXQgYXZhaWxhYmxlRW5naW5lcyA9IGF3YWl0IHRoaXMuYWRiLmF2YWlsYWJsZUlNRXMoKTtcbiAgaWYgKGF2YWlsYWJsZUVuZ2luZXMuaW5kZXhPZihpbWVJZCkgPT09IC0xKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0lNRSBub3QgZm91bmQsIGZhaWxpbmcnKTtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLklNRU5vdEF2YWlsYWJsZUVycm9yKCk7XG4gIH1cbiAgdGhpcy5sb2cuZGVidWcoJ0ZvdW5kIGluc3RhbGxlZCBJTUUsIGF0dGVtcHRpbmcgdG8gYWN0aXZhdGUnKTtcbiAgYXdhaXQgdGhpcy5hZGIuZW5hYmxlSU1FKGltZUlkKTtcbiAgYXdhaXQgdGhpcy5hZGIuc2V0SU1FKGltZUlkKTtcbn07XG5cbmNvbW1hbmRzLmRlYWN0aXZhdGVJTUVFbmdpbmUgPSBhc3luYyBmdW5jdGlvbiBkZWFjdGl2YXRlSU1FRW5naW5lICgpIHtcbiAgbGV0IGN1cnJlbnRFbmdpbmUgPSBhd2FpdCB0aGlzLmdldEFjdGl2ZUlNRUVuZ2luZSgpO1xuICB0aGlzLmxvZy5kZWJ1ZyhgQXR0ZW1wdGluZyB0byBkZWFjdGl2YXRlICR7Y3VycmVudEVuZ2luZX1gKTtcbiAgYXdhaXQgdGhpcy5hZGIuZGlzYWJsZUlNRShjdXJyZW50RW5naW5lKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9pbWUuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|