appium 2.0.0-beta.23 → 2.0.0-beta.24

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.
@@ -4,30 +4,31 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
 
5
5
  require("source-map-support/register");
6
6
 
7
- var _appium = require("../lib/appium");
8
-
9
7
  var _baseDriver = require("@appium/base-driver");
10
8
 
11
9
  var _fakeDriver = require("@appium/fake-driver");
12
10
 
13
- var _helpers = require("./helpers");
14
-
15
- var _schema = require("../lib/schema/schema");
11
+ var _asyncbox = require("asyncbox");
16
12
 
17
13
  var _lodash = _interopRequireDefault(require("lodash"));
18
14
 
19
15
  var _sinon = _interopRequireDefault(require("sinon"));
20
16
 
21
- var _asyncbox = require("asyncbox");
17
+ var _appium = require("../lib/appium");
18
+
19
+ var _schema = require("../lib/schema/schema");
22
20
 
23
21
  var _utils = require("../lib/utils");
24
22
 
23
+ var _helpers = require("./helpers");
24
+
25
25
  const SESSION_ID = 1;
26
26
  describe('AppiumDriver', function () {
27
27
  beforeEach(function () {
28
28
  (0, _schema.resetSchema)();
29
+ (0, _schema.finalizeSchema)();
29
30
  });
30
- describe('AppiumDriver', function () {
31
+ describe('instance method', function () {
31
32
  function getDriverAndFakeDriver(appiumArgs = {}, DriverClass = _fakeDriver.FakeDriver) {
32
33
  const appium = new _appium.AppiumDriver(appiumArgs);
33
34
  const fakeDriver = new DriverClass();
@@ -283,39 +284,103 @@ describe('AppiumDriver', function () {
283
284
  _lodash.default.keys(appium.sessions).should.not.contain(sessionId);
284
285
  });
285
286
  });
286
- });
287
- describe('#createPluginInstances', function () {
288
- class NoArgsPlugin {}
287
+ describe('createPluginInstances', function () {
288
+ class NoArgsPlugin {}
289
289
 
290
- NoArgsPlugin.pluginName = 'noargs';
290
+ NoArgsPlugin.pluginName = 'noargs';
291
291
 
292
- class ArgsPlugin {}
292
+ class ArgsPlugin {}
293
293
 
294
- ArgsPlugin.pluginName = 'args';
295
- it('should not set CLI args if none are sent', function () {
296
- const appium = new _appium.AppiumDriver({});
297
- appium.pluginClasses = [NoArgsPlugin, ArgsPlugin];
294
+ ArgsPlugin.pluginName = 'args';
298
295
 
299
- for (const plugin of appium.createPluginInstances()) {
300
- should.not.exist(plugin.cliArgs);
301
- }
302
- });
303
- it('should add cliArgs to the plugin once validated', function () {
304
- const appium = new _appium.AppiumDriver({
305
- plugin: {
306
- args: {
307
- randomArg: 1234
296
+ class ArrayArgPlugin {}
297
+
298
+ ArrayArgPlugin.pluginName = 'arrayarg';
299
+ beforeEach(function () {
300
+ (0, _schema.resetSchema)();
301
+ (0, _schema.registerSchema)('plugin', ArgsPlugin.pluginName, {
302
+ type: 'object',
303
+ properties: {
304
+ randomArg: {
305
+ type: 'number',
306
+ default: 2000
307
+ }
308
308
  }
309
- }
309
+ });
310
+ (0, _schema.registerSchema)('plugin', ArrayArgPlugin.pluginName, {
311
+ type: 'object',
312
+ properties: {
313
+ arr: {
314
+ type: 'array',
315
+ default: []
316
+ }
317
+ }
318
+ });
319
+ (0, _schema.finalizeSchema)();
320
+ });
321
+ describe('when args are not present', function () {
322
+ it('should not set CLI args', function () {
323
+ const appium = new _appium.AppiumDriver({});
324
+ appium.pluginClasses = [NoArgsPlugin, ArgsPlugin];
325
+
326
+ for (const plugin of appium.createPluginInstances()) {
327
+ should.not.exist(plugin.cliArgs);
328
+ }
329
+ });
330
+ });
331
+ describe('when args are equal to the schema defaults', function () {
332
+ it('should not set CLI args', function () {
333
+ const appium = new _appium.AppiumDriver({
334
+ plugin: {
335
+ [ArgsPlugin.pluginName]: {
336
+ randomArg: 2000
337
+ }
338
+ }
339
+ });
340
+ appium.pluginClasses = [NoArgsPlugin, ArgsPlugin];
341
+
342
+ for (const plugin of appium.createPluginInstances()) {
343
+ should.not.exist(plugin.cliArgs);
344
+ }
345
+ });
346
+ describe('when the default is an "object"', function () {
347
+ it('should not set CLI args', function () {
348
+ const appium = new _appium.AppiumDriver({
349
+ plugin: {
350
+ [ArrayArgPlugin.pluginName]: {
351
+ arr: []
352
+ }
353
+ }
354
+ });
355
+ appium.pluginClasses = [NoArgsPlugin, ArgsPlugin, ArrayArgPlugin];
356
+
357
+ for (const plugin of appium.createPluginInstances()) {
358
+ should.not.exist(plugin.cliArgs);
359
+ }
360
+ });
361
+ });
310
362
  });
311
- appium.pluginClasses = [ArgsPlugin];
312
- const plugin = appium.createPluginInstances()[0];
313
- plugin.cliArgs.should.eql({
314
- randomArg: 1234
363
+ describe('when args are not equal to the schema defaults', function () {
364
+ it('should add cliArgs to the plugin', function () {
365
+ const appium = new _appium.AppiumDriver({
366
+ plugin: {
367
+ args: {
368
+ randomArg: 1234
369
+ }
370
+ }
371
+ });
372
+ appium.pluginClasses = [ArgsPlugin];
373
+
374
+ const plugin = _lodash.default.first(appium.createPluginInstances());
375
+
376
+ plugin.cliArgs.should.eql({
377
+ randomArg: 1234
378
+ });
379
+ });
315
380
  });
316
381
  });
317
382
  });
318
383
  });require('source-map-support').install();
319
384
 
320
385
 
321
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZHJpdmVyLXNwZWNzLmpzIl0sIm5hbWVzIjpbIlNFU1NJT05fSUQiLCJkZXNjcmliZSIsImJlZm9yZUVhY2giLCJnZXREcml2ZXJBbmRGYWtlRHJpdmVyIiwiYXBwaXVtQXJncyIsIkRyaXZlckNsYXNzIiwiRmFrZURyaXZlciIsImFwcGl1bSIsIkFwcGl1bURyaXZlciIsImZha2VEcml2ZXIiLCJtb2NrRmFrZURyaXZlciIsInNpbm9uIiwibW9jayIsIl9mYWtlRHJpdmVyIiwibW9ja2VkRHJpdmVyUmV0dXJuZXJDbGFzcyIsIkRyaXZlciIsIl9maW5kTWF0Y2hpbmdEcml2ZXIiLCJkcml2ZXIiLCJ2ZXJzaW9uIiwiZHJpdmVyTmFtZSIsImFmdGVyRWFjaCIsInJlc3RvcmUiLCJkZWxldGVTZXNzaW9uIiwiaXQiLCJleHBlY3RzIiwib25jZSIsIndpdGhFeGFjdEFyZ3MiLCJXM0NfQ0FQUyIsInJldHVybnMiLCJXM0NfUFJFRklYRURfQ0FQUyIsImNyZWF0ZVNlc3Npb24iLCJ2ZXJpZnkiLCJkZWZhdWx0Q2FwcyIsImFsbENhcHMiLCJhbHdheXNNYXRjaCIsImFyZ3MiLCJkZWZhdWx0Q2FwYWJpbGl0aWVzIiwid2l0aEFyZ3MiLCJwbGF0Zm9ybU5hbWUiLCJzZXNzaW9uT3ZlcnJpZGUiLCJmYWtlRHJpdmVycyIsIm1vY2tGYWtlRHJpdmVycyIsIl8iLCJtYXAiLCJmZCIsInRocm93cyIsInNlc3Npb25zIiwiZ2V0U2Vzc2lvbnMiLCJzaG91bGQiLCJoYXZlIiwibGVuZ3RoIiwibWZkIiwidW5kZWZpbmVkIiwiQkFTRV9DQVBTIiwidzNjQ2FwcyIsImZpcnN0TWF0Y2giLCJqc29ud3BDYXBzIiwiYXV0b21hdGlvbk5hbWUiLCJzb21lT3RoZXJQYXJhbSIsIm5ldmVyIiwiQXJnc0RyaXZlciIsIkJhc2VEcml2ZXIiLCJmYWtlIiwicmFuZG9tQXJnIiwidmFsdWUiLCJjbGlBcmdzIiwiZXFsIiwic2Vzc2lvbklkIiwib2JqZWN0IiwiYmVmb3JlIiwic2Vzc2lvbiIsImlkIiwiYmUiLCJhbiIsImVtcHR5IiwiY2FwczEiLCJjYXBzMiIsInNlc3Npb24xSWQiLCJzZXNzaW9uMUNhcHMiLCJzZXNzaW9uMklkIiwic2Vzc2lvbjJDYXBzIiwiZXF1YWwiLCJzdGF0dXMiLCJnZXRTdGF0dXMiLCJidWlsZCIsImV4aXN0IiwiY2xvbmUiLCJrZXlzIiwiY29udGFpbiIsImV2ZW50RW1pdHRlciIsImVtaXQiLCJFcnJvciIsIm5vdCIsIk5vQXJnc1BsdWdpbiIsInBsdWdpbk5hbWUiLCJBcmdzUGx1Z2luIiwicGx1Z2luQ2xhc3NlcyIsInBsdWdpbiIsImNyZWF0ZVBsdWdpbkluc3RhbmNlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsVUFBVSxHQUFHLENBQW5CO0FBRUFDLFFBQVEsQ0FBQyxjQUFELEVBQWlCLFlBQVk7QUFDbkNDLEVBQUFBLFVBQVUsQ0FBQyxZQUFZO0FBQ3JCO0FBQ0QsR0FGUyxDQUFWO0FBR0FELEVBQUFBLFFBQVEsQ0FBQyxjQUFELEVBQWlCLFlBQVk7QUFDbkMsYUFBU0Usc0JBQVQsQ0FBaUNDLFVBQVUsR0FBRyxFQUE5QyxFQUFrREMsV0FBVyxHQUFHQyxzQkFBaEUsRUFBNEU7QUFDMUUsWUFBTUMsTUFBTSxHQUFHLElBQUlDLG9CQUFKLENBQWlCSixVQUFqQixDQUFmO0FBQ0EsWUFBTUssVUFBVSxHQUFHLElBQUlKLFdBQUosRUFBbkI7O0FBQ0EsWUFBTUssY0FBYyxHQUFHQyxlQUFNQyxJQUFOLENBQVdILFVBQVgsQ0FBdkI7O0FBQ0FDLE1BQUFBLGNBQWMsQ0FBQ0csV0FBZixHQUE2QkosVUFBN0I7O0FBQ0EsWUFBTUsseUJBQXlCLEdBQUcsU0FBU0MsTUFBVCxHQUFtQjtBQUNuRCxlQUFPTixVQUFQO0FBQ0QsT0FGRDs7QUFJQUYsTUFBQUEsTUFBTSxDQUFDUyxtQkFBUCxHQUE2QixZQUFZO0FBQ3ZDLGVBQU87QUFDTEMs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RUFBRSxDQUFDLDBDQUFELEVBQTZDLFlBQVk7QUFDekQsWUFBTWhCLE1BQU0sR0FBRyxJQUFJQyxvQkFBSixDQUFpQixFQUFqQixDQUFmO0FBQ0FELE1BQUFBLE1BQU0sQ0FBQ3lGLGFBQVAsR0FBdUIsQ0FBQ0gsWUFBRCxFQUFlRSxVQUFmLENBQXZCOztBQUNBLFdBQUssTUFBTUUsTUFBWCxJQUFxQjFGLE1BQU0sQ0FBQzJGLHFCQUFQLEVBQXJCLEVBQXFEO0FBQ25EbEQsUUFBQUEsTUFBTSxDQUFDNEMsR0FBUCxDQUFXUCxLQUFYLENBQWlCWSxNQUFNLENBQUNoQyxPQUF4QjtBQUNEO0FBQ0YsS0FOQyxDQUFGO0FBT0ExQyxJQUFBQSxFQUFFLENBQUMsaURBQUQsRUFBb0QsWUFBWTtBQUNoRSxZQUFNaEIsTUFBTSxHQUFHLElBQUlDLG9CQUFKLENBQWlCO0FBQUN5RixRQUFBQSxNQUFNLEVBQUU7QUFBQzlELFVBQUFBLElBQUksRUFBRTtBQUFDNEIsWUFBQUEsU0FBUyxFQUFFO0FBQVo7QUFBUDtBQUFULE9BQWpCLENBQWY7QUFDQXhELE1BQUFBLE1BQU0sQ0FBQ3lGLGFBQVAsR0FBdUIsQ0FBQ0QsVUFBRCxDQUF2QjtBQUNBLFlBQU1FLE1BQU0sR0FBRzFGLE1BQU0sQ0FBQzJGLHFCQUFQLEdBQStCLENBQS9CLENBQWY7QUFDQUQsTUFBQUEsTUFBTSxDQUFDaEMsT0FBUCxDQUFlakIsTUFBZixDQUFzQmtCLEdBQXRCLENBQTBCO0FBQUNILFFBQUFBLFNBQVMsRUFBRTtBQUFaLE9BQTFCO0FBQ0QsS0FMQyxDQUFGO0FBTUQsR0FwQk8sQ0FBUjtBQXFCRCxDQWhTTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHJhbnNwaWxlOm1vY2hhXG5cbmltcG9ydCB7IEFwcGl1bURyaXZlciB9IGZyb20gJy4uL2xpYi9hcHBpdW0nO1xuaW1wb3J0IHsgQmFzZURyaXZlciB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgRmFrZURyaXZlciB9IGZyb20gJ0BhcHBpdW0vZmFrZS1kcml2ZXInO1xuaW1wb3J0IHsgQkFTRV9DQVBTLCBXM0NfQ0FQUywgVzNDX1BSRUZJWEVEX0NBUFMgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHtyZXNldFNjaGVtYX0gZnJvbSAnLi4vbGliL3NjaGVtYS9zY2hlbWEnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IGluc2VydEFwcGl1bVByZWZpeGVzLCByZW1vdmVBcHBpdW1QcmVmaXhlcyB9IGZyb20gJy4uL2xpYi91dGlscyc7XG5cblxuY29uc3QgU0VTU0lPTl9JRCA9IDE7XG5cbmRlc2NyaWJlKCdBcHBpdW1Ecml2ZXInLCBmdW5jdGlvbiAoKSB7XG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIHJlc2V0U2NoZW1hKCk7XG4gIH0pO1xuICBkZXNjcmliZSgnQXBwaXVtRHJpdmVyJywgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIGdldERyaXZlckFuZEZha2VEcml2ZXIgKGFwcGl1bUFyZ3MgPSB7fSwgRHJpdmVyQ2xhc3MgPSBGYWtlRHJpdmVyKSB7XG4gICAgICBjb25zdCBhcHBpdW0gPSBuZXcgQXBwaXVtRHJpdmVyKGFwcGl1bUFyZ3MpO1xuICAgICAgY29uc3QgZmFrZURyaXZlciA9IG5ldyBEcml2ZXJDbGFzcygpO1xuICAgICAgY29uc3QgbW9ja0Zha2VEcml2ZXIgPSBzaW5vbi5tb2NrKGZha2VEcml2ZXIpO1xuICAgICAgbW9ja0Zha2VEcml2ZXIuX2Zha2VEcml2ZXIgPSBmYWtlRHJpdmVyO1xuICAgICAgY29uc3QgbW9ja2VkRHJpdmVyUmV0dXJuZXJDbGFzcyA9IGZ1bmN0aW9uIERyaXZlciAoKSB7XG4gICAgICAgIHJldHVybiBmYWtlRHJpdmVyO1xuICAgICAgfTtcblxuICAgICAgYXBwaXVtLl9maW5kTWF0Y2hpbmdEcml2ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZHJpdmVyOiBtb2NrZWREcml2ZXJSZXR1cm5lckNsYXNzLFxuICAgICAgICAgIHZlcnNpb246ICcxLjIuMycsXG4gICAgICAgICAgZHJpdmVyTmFtZTogJ2Zha2UnLFxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIHJldHVybiBbYXBwaXVtLCBtb2NrRmFrZURyaXZlcl07XG4gICAgfVxuICAgIGRlc2NyaWJlKCdjcmVhdGVTZXNzaW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGFwcGl1bTtcbiAgICAgIGxldCBtb2NrRmFrZURyaXZlcjtcbiAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBbYXBwaXVtLCBtb2NrRmFrZURyaXZlcl0gPSBnZXREcml2ZXJBbmRGYWtlRHJpdmVyKCk7XG4gICAgICB9KTtcbiAgICAgIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnJlc3RvcmUoKTtcbiAgICAgICAgYXdhaXQgYXBwaXVtLmRlbGV0ZVNlc3Npb24oU0VTU0lPTl9JRCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoYHNob3VsZCBjYWxsIGlubmVyIGRyaXZlcidzIGNyZWF0ZVNlc3Npb24gd2l0aCBkZXNpcmVkIGNhcGFiaWxpdGllc2AsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIuZXhwZWN0cygnY3JlYXRlU2Vzc2lvbicpXG4gICAgICAgICAgLm9uY2UoKS53aXRoRXhhY3RBcmdzKG51bGwsIG51bGwsIFczQ19DQVBTLCBbXSlcbiAgICAgICAgICAucmV0dXJucyhbU0VTU0lPTl9JRCwgcmVtb3ZlQXBwaXVtUHJlZml4ZXMoVzNDX1BSRUZJWEVEX0NBUFMpXSk7XG4gICAgICAgIGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIFczQ19DQVBTKTtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIudmVyaWZ5KCk7XG4gICAgICB9KTtcbiAgICAgIGl0KGBzaG91bGQgY2FsbCBpbm5lciBkcml2ZXIncyBjcmVhdGVTZXNzaW9uIHdpdGggZGVzaXJlZCBhbmQgZGVmYXVsdCBjYXBhYmlsaXRpZXNgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBkZWZhdWx0Q2FwcyA9IHsnYXBwaXVtOnNvbWVDYXAnOiAnaGVsbG8nfTtcbiAgICAgICAgbGV0IGFsbENhcHMgPSB7Li4uVzNDX0NBUFMsIGFsd2F5c01hdGNoOiB7Li4uVzNDX0NBUFMuYWx3YXlzTWF0Y2gsIC4uLmRlZmF1bHRDYXBzfX07XG4gICAgICAgIGFwcGl1bS5hcmdzLmRlZmF1bHRDYXBhYmlsaXRpZXMgPSBkZWZhdWx0Q2FwcztcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIuZXhwZWN0cygnY3JlYXRlU2Vzc2lvbicpXG4gICAgICAgICAgLm9uY2UoKS53aXRoQXJncyhudWxsLCBudWxsLCBhbGxDYXBzKVxuICAgICAgICAgIC5yZXR1cm5zKFtTRVNTSU9OX0lELCByZW1vdmVBcHBpdW1QcmVmaXhlcyhhbGxDYXBzLmFsd2F5c01hdGNoKV0pO1xuICAgICAgICBhd2FpdCBhcHBpdW0uY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCBXM0NfQ0FQUyk7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnZlcmlmeSgpO1xuICAgICAgfSk7XG4gICAgICBpdChgc2hvdWxkIGNhbGwgaW5uZXIgZHJpdmVyJ3MgY3JlYXRlU2Vzc2lvbiB3aXRoIGRlc2lyZWQgYW5kIGRlZmF1bHQgY2FwYWJpbGl0aWVzIHdpdGhvdXQgb3ZlcnJpZGluZyBjYXBzYCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBhIGRlZmF1bHQgY2FwYWJpbGl0eSB3aXRoIHRoZSBzYW1lIGtleSBhcyBhIGRlc2lyZWQgY2FwYWJpbGl0eVxuICAgICAgICAvLyBzaG91bGQgZG8gbm90aGluZ1xuICAgICAgICBsZXQgZGVmYXVsdENhcHMgPSB7cGxhdGZvcm1OYW1lOiAnRXJzYXR6J307XG4gICAgICAgIGFwcGl1bS5hcmdzLmRlZmF1bHRDYXBhYmlsaXRpZXMgPSBkZWZhdWx0Q2FwcztcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIuZXhwZWN0cygnY3JlYXRlU2Vzc2lvbicpXG4gICAgICAgICAgLm9uY2UoKS53aXRoQXJncyhudWxsLCBudWxsLCBXM0NfQ0FQUylcbiAgICAgICAgICAucmV0dXJucyhbU0VTU0lPTl9JRCwgcmVtb3ZlQXBwaXVtUHJlZml4ZXMoVzNDX1BSRUZJWEVEX0NBUFMpXSk7XG4gICAgICAgIGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIFczQ19DQVBTKTtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIudmVyaWZ5KCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQga2lsbCBhbGwgb3RoZXIgc2Vzc2lvbnMgaWYgc2Vzc2lvbk92ZXJyaWRlIGlzIG9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhcHBpdW0uYXJncy5zZXNzaW9uT3ZlcnJpZGUgPSB0cnVlO1xuXG4gICAgICAgIC8vIG1vY2sgdGhyZWUgc2Vzc2lvbnMgdGhhdCBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIHRoZSBuZXcgb25lIGlzIGNyZWF0ZWRcbiAgICAgICAgbGV0IGZha2VEcml2ZXJzID0gW1xuICAgICAgICAgIG5ldyBGYWtlRHJpdmVyKCksXG4gICAgICAgICAgbmV3IEZha2VEcml2ZXIoKSxcbiAgICAgICAgICBuZXcgRmFrZURyaXZlcigpLFxuICAgICAgICBdO1xuICAgICAgICBsZXQgbW9ja0Zha2VEcml2ZXJzID0gXy5tYXAoZmFrZURyaXZlcnMsIChmZCkgPT4gc2lub24ubW9jayhmZCkpO1xuICAgICAgICBtb2NrRmFrZURyaXZlcnNbMF0uZXhwZWN0cygnZGVsZXRlU2Vzc2lvbicpXG4gICAgICAgICAgLm9uY2UoKTtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXJzWzFdLmV4cGVjdHMoJ2RlbGV0ZVNlc3Npb24nKVxuICAgICAgICAgIC5vbmNlKClcbiAgICAgICAgICAudGhyb3dzKCdDYW5ub3Qgc2h1dCBkb3duIEFuZHJvaWQgZHJpdmVyOyBpdCBoYXMgYWxyZWFkeSBzaHV0IGRvd24nKTtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXJzWzJdLmV4cGVjdHMoJ2RlbGV0ZVNlc3Npb24nKVxuICAgICAgICAgIC5vbmNlKCk7XG4gICAgICAgIGFwcGl1bS5zZXNzaW9uc1snYWJjLTEyMy14eXonXSA9IGZha2VEcml2ZXJzWzBdO1xuICAgICAgICBhcHBpdW0uc2Vzc2lvbnNbJ3h5ei0zMjEtYWJjJ10gPSBmYWtlRHJpdmVyc1sxXTtcbiAgICAgICAgYXBwaXVtLnNlc3Npb25zWycxMjMtYWJjLXh5eiddID0gZmFrZURyaXZlcnNbMl07XG5cbiAgICAgICAgbGV0IHNlc3Npb25zID0gYXdhaXQgYXBwaXVtLmdldFNlc3Npb25zKCk7XG4gICAgICAgIHNlc3Npb25zLnNob3VsZC5oYXZlLmxlbmd0aCgzKTtcblxuICAgICAgICBtb2NrRmFrZURyaXZlci5leHBlY3RzKCdjcmVhdGVTZXNzaW9uJylcbiAgICAgICAgICAub25jZSgpLndpdGhFeGFjdEFyZ3MobnVsbCwgbnVsbCwgVzNDX0NBUFMsIFtdKVxuICAgICAgICAgIC5yZXR1cm5zKFtTRVNTSU9OX0lELCByZW1vdmVBcHBpdW1QcmVmaXhlcyhXM0NfUFJFRklYRURfQ0FQUyldKTtcbiAgICAgICAgYXdhaXQgYXBwaXVtLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgVzNDX0NBUFMpO1xuXG4gICAgICAgIHNlc3Npb25zID0gYXdhaXQgYXBwaXVtLmdldFNlc3Npb25zKCk7XG4gICAgICAgIHNlc3Npb25zLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcblxuICAgICAgICBmb3IgKGxldCBtZmQgb2YgbW9ja0Zha2VEcml2ZXJzKSB7XG4gICAgICAgICAgbWZkLnZlcmlmeSgpO1xuICAgICAgICB9XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnZlcmlmeSgpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGNhbGwgXCJjcmVhdGVTZXNzaW9uXCIgd2l0aCBXM0MgY2FwYWJpbGl0aWVzIGFyZ3VtZW50LCBpZiBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIuZXhwZWN0cygnY3JlYXRlU2Vzc2lvbicpXG4gICAgICAgICAgLm9uY2UoKS53aXRoQXJncyhudWxsLCB1bmRlZmluZWQsIFczQ19DQVBTKVxuICAgICAgICAgIC5yZXR1cm5zKFtTRVNTSU9OX0lELCBCQVNFX0NBUFNdKTtcbiAgICAgICAgYXdhaXQgYXBwaXVtLmNyZWF0ZVNlc3Npb24odW5kZWZpbmVkLCB1bmRlZmluZWQsIFczQ19DQVBTKTtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIudmVyaWZ5KCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgY2FsbCBcImNyZWF0ZVNlc3Npb25cIiB3aXRoIFczQyBjYXBhYmlsaXRpZXMgYXJndW1lbnQgd2l0aCBhZGRpdGlvbmFsIHByb3ZpZGVkIHBhcmFtZXRlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCB3M2NDYXBzID0ge1xuICAgICAgICAgIC4uLlczQ19DQVBTLFxuICAgICAgICAgIGFsd2F5c01hdGNoOiB7XG4gICAgICAgICAgICAuLi5XM0NfQ0FQUy5hbHdheXNNYXRjaCxcbiAgICAgICAgICAgICdhcHBpdW06c29tZU90aGVyUGFybSc6ICdzb21lT3RoZXJQYXJtJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBtb2NrRmFrZURyaXZlci5leHBlY3RzKCdjcmVhdGVTZXNzaW9uJylcbiAgICAgICAgICAub25jZSgpLndpdGhBcmdzKG51bGwsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgYWx3YXlzTWF0Y2g6IHtcbiAgICAgICAgICAgICAgLi4udzNjQ2Fwcy5hbHdheXNNYXRjaCxcbiAgICAgICAgICAgICAgJ2FwcGl1bTpzb21lT3RoZXJQYXJtJzogJ3NvbWVPdGhlclBhcm0nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICAucmV0dXJucyhbU0VTU0lPTl9JRCwgaW5zZXJ0QXBwaXVtUHJlZml4ZXMoQkFTRV9DQVBTKV0pO1xuXG4gICAgICAgIGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB3M2NDYXBzKTtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIudmVyaWZ5KCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgbm90IGNhbGwgXCJjcmVhdGVTZXNzaW9uXCIgd2l0aCBKU09OV1AgY2FwYWJpbGl0aWVzIGlmIFczQyBoYXMgaW5jb21wbGV0ZSBjYXBhYmlsaXRpZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHczY0NhcHMgPSB7XG4gICAgICAgICAgLi4uVzNDX0NBUFMsXG4gICAgICAgICAgYWx3YXlzTWF0Y2g6IHtcbiAgICAgICAgICAgICdhcHBpdW06c29tZU90aGVyUGFybSc6ICdzb21lT3RoZXJQYXJtJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGpzb253cENhcHMgPSB7XG4gICAgICAgICAgLi4uQkFTRV9DQVBTLFxuICAgICAgICAgIGF1dG9tYXRpb25OYW1lOiAnRmFrZScsXG4gICAgICAgICAgc29tZU90aGVyUGFyYW06ICdzb21lT3RoZXJQYXJhbScsXG4gICAgICAgIH07XG5cbiAgICAgICAgbW9ja0Zha2VEcml2ZXIuZXhwZWN0cygnY3JlYXRlU2Vzc2lvbicpLm5ldmVyKCk7XG4gICAgICAgIGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKGpzb253cENhcHMsIHVuZGVmaW5lZCwgdzNjQ2Fwcyk7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnZlcmlmeSgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYXNzaWduIGFyZ3MgdG8gcHJvcGVydHkgYGNsaUFyZ3NgJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjbGFzcyBBcmdzRHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJncyA9IHtkcml2ZXI6IHtmYWtlOiB7cmFuZG9tQXJnOiAxMjM0fX19O1xuICAgICAgICBbYXBwaXVtLCBtb2NrRmFrZURyaXZlcl0gPSBnZXREcml2ZXJBbmRGYWtlRHJpdmVyKGFyZ3MsIEFyZ3NEcml2ZXIpO1xuICAgICAgICBjb25zdCB7dmFsdWV9ID0gYXdhaXQgYXBwaXVtLmNyZWF0ZVNlc3Npb24odW5kZWZpbmVkLCB1bmRlZmluZWQsIFczQ19DQVBTKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtb2NrRmFrZURyaXZlci5fZmFrZURyaXZlci5jbGlBcmdzLnNob3VsZC5lcWwoe3JhbmRvbUFyZzogMTIzNH0pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGF3YWl0IGFwcGl1bS5kZWxldGVTZXNzaW9uKHZhbHVlWzBdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ2RlbGV0ZVNlc3Npb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgYXBwaXVtO1xuICAgICAgbGV0IG1vY2tGYWtlRHJpdmVyO1xuICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIFthcHBpdW0sIG1vY2tGYWtlRHJpdmVyXSA9IGdldERyaXZlckFuZEZha2VEcml2ZXIoKTtcbiAgICAgIH0pO1xuICAgICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIucmVzdG9yZSgpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHJlbW92ZSB0aGUgc2Vzc2lvbiBpZiBpdCBpcyBmb3VuZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IFtzZXNzaW9uSWRdID0gKGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIFczQ19DQVBTKSkudmFsdWU7XG4gICAgICAgIGxldCBzZXNzaW9ucyA9IGF3YWl0IGFwcGl1bS5nZXRTZXNzaW9ucygpO1xuICAgICAgICBzZXNzaW9ucy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICAgIGF3YWl0IGFwcGl1bS5kZWxldGVTZXNzaW9uKHNlc3Npb25JZCk7XG4gICAgICAgIHNlc3Npb25zID0gYXdhaXQgYXBwaXVtLmdldFNlc3Npb25zKCk7XG4gICAgICAgIHNlc3Npb25zLnNob3VsZC5oYXZlLmxlbmd0aCgwKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBjYWxsIGlubmVyIGRyaXZlclxcJ3MgZGVsZXRlU2Vzc2lvbiBtZXRob2QnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IFtzZXNzaW9uSWRdID0gKGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIFczQ19DQVBTKSkudmFsdWU7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLmV4cGVjdHMoJ2RlbGV0ZVNlc3Npb24nKVxuICAgICAgICAgIC5vbmNlKCkud2l0aEV4YWN0QXJncyhzZXNzaW9uSWQsIFtdKVxuICAgICAgICAgIC5yZXR1cm5zKCk7XG4gICAgICAgIGF3YWl0IGFwcGl1bS5kZWxldGVTZXNzaW9uKHNlc3Npb25JZCk7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnZlcmlmeSgpO1xuXG4gICAgICAgIC8vIGNsZWFudXAsIHNpbmNlIHdlIGZha2VkIHRoZSBkZWxldGUgc2Vzc2lvbiBjYWxsXG4gICAgICAgIGF3YWl0IG1vY2tGYWtlRHJpdmVyLm9iamVjdC5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnZ2V0U2Vzc2lvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgYXBwaXVtLCBtb2NrRmFrZURyaXZlcjtcbiAgICAgIGxldCBzZXNzaW9ucztcbiAgICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIFthcHBpdW0sIG1vY2tGYWtlRHJpdmVyXSA9IGdldERyaXZlckFuZEZha2VEcml2ZXIoKTtcbiAgICAgIH0pO1xuICAgICAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChsZXQgc2Vzc2lvbiBvZiBzZXNzaW9ucykge1xuICAgICAgICAgIGF3YWl0IGFwcGl1bS5kZWxldGVTZXNzaW9uKHNlc3Npb24uaWQpO1xuICAgICAgICB9XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnJlc3RvcmUoKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgYXJyYXkgb2Ygc2Vzc2lvbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlc3Npb25zID0gYXdhaXQgYXBwaXVtLmdldFNlc3Npb25zKCk7XG4gICAgICAgIHNlc3Npb25zLnNob3VsZC5iZS5hbignYXJyYXknKTtcbiAgICAgICAgc2Vzc2lvbnMuc2hvdWxkLmJlLmVtcHR5O1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBzZXNzaW9ucyBjcmVhdGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgY2FwczEgPSB7YWx3YXlzTWF0Y2g6IHsuLi5XM0NfUFJFRklYRURfQ0FQUywgJ2FwcGl1bTpjYXAnOiAndmFsdWUnfX07XG4gICAgICAgIGxldCBjYXBzMiA9IHthbHdheXNNYXRjaDogey4uLlczQ19QUkVGSVhFRF9DQVBTLCAnYXBwaXVtOmNhcCc6ICdvdGhlciB2YWx1ZSd9fTtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIuZXhwZWN0cygnY3JlYXRlU2Vzc2lvbicpLm9uY2UoKVxuICAgICAgICAgIC5yZXR1cm5zKFsnZmFrZS1zZXNzaW9uLWlkLTEnLCByZW1vdmVBcHBpdW1QcmVmaXhlcyhjYXBzMS5hbHdheXNNYXRjaCldKTtcbiAgICAgICAgbGV0IFtzZXNzaW9uMUlkLCBzZXNzaW9uMUNhcHNdID0gKGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIGNhcHMxKSkudmFsdWU7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLmV4cGVjdHMoJ2NyZWF0ZVNlc3Npb24nKS5vbmNlKClcbiAgICAgICAgICAucmV0dXJucyhbJ2Zha2Utc2Vzc2lvbi1pZC0yJywgcmVtb3ZlQXBwaXVtUHJlZml4ZXMoY2FwczIuYWx3YXlzTWF0Y2gpXSk7XG4gICAgICAgIGxldCBbc2Vzc2lvbjJJZCwgc2Vzc2lvbjJDYXBzXSA9IChhd2FpdCBhcHBpdW0uY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCBjYXBzMikpLnZhbHVlO1xuXG4gICAgICAgIHNlc3Npb25zID0gYXdhaXQgYXBwaXVtLmdldFNlc3Npb25zKCk7XG4gICAgICAgIHNlc3Npb25zLnNob3VsZC5iZS5hbignYXJyYXknKTtcbiAgICAgICAgc2Vzc2lvbnMuc2hvdWxkLmhhdmUubGVuZ3RoKDIpO1xuICAgICAgICBzZXNzaW9uc1swXS5pZC5zaG91bGQuZXF1YWwoc2Vzc2lvbjFJZCk7XG4gICAgICAgIHJlbW92ZUFwcGl1bVByZWZpeGVzKGNhcHMxLmFsd2F5c01hdGNoKS5zaG91bGQuZXFsKHNlc3Npb24xQ2Fwcyk7XG4gICAgICAgIHNlc3Npb25zWzFdLmlkLnNob3VsZC5lcXVhbChzZXNzaW9uMklkKTtcbiAgICAgICAgcmVtb3ZlQXBwaXVtUHJlZml4ZXMoY2FwczIuYWx3YXlzTWF0Y2gpLnNob3VsZC5lcWwoc2Vzc2lvbjJDYXBzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdnZXRTdGF0dXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgYXBwaXVtO1xuICAgICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXBwaXVtID0gbmV3IEFwcGl1bURyaXZlcih7fSk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgc3RhdHVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgc3RhdHVzID0gYXdhaXQgYXBwaXVtLmdldFN0YXR1cygpO1xuICAgICAgICBzdGF0dXMuYnVpbGQuc2hvdWxkLmV4aXN0O1xuICAgICAgICBzdGF0dXMuYnVpbGQudmVyc2lvbi5zaG91bGQuZXhpc3Q7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnc2Vzc2lvbkV4aXN0cycsIGZ1bmN0aW9uICgpIHtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnYXR0YWNoVW5leHBlY3RlZFNodXRkb3duSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBhcHBpdW07XG4gICAgICBsZXQgbW9ja0Zha2VEcml2ZXI7XG4gICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgW2FwcGl1bSwgbW9ja0Zha2VEcml2ZXJdID0gZ2V0RHJpdmVyQW5kRmFrZURyaXZlcigpO1xuICAgICAgfSk7XG4gICAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBtb2NrRmFrZURyaXZlci5vYmplY3QuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgICBtb2NrRmFrZURyaXZlci5yZXN0b3JlKCk7XG4gICAgICAgIGFwcGl1bS5hcmdzLmRlZmF1bHRDYXBhYmlsaXRpZXMgPSB7fTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlbW92ZSBzZXNzaW9uIGlmIGlubmVyIGRyaXZlciB1bmV4cGVjdGVkbHkgZXhpdHMgd2l0aCBhbiBlcnJvcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IFtzZXNzaW9uSWQsXSA9IChhd2FpdCBhcHBpdW0uY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCBfLmNsb25lKFczQ19DQVBTKSkpLnZhbHVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNvbW1hLXNwYWNpbmdcbiAgICAgICAgXy5rZXlzKGFwcGl1bS5zZXNzaW9ucykuc2hvdWxkLmNvbnRhaW4oc2Vzc2lvbklkKTtcbiAgICAgICAgYXBwaXVtLnNlc3Npb25zW3Nlc3Npb25JZF0uZXZlbnRFbWl0dGVyLmVtaXQoJ29uVW5leHBlY3RlZFNodXRkb3duJywgbmV3IEVycm9yKCdPb3BzJykpO1xuICAgICAgICAvLyBsZXQgZXZlbnQgbG9vcCBzcGluIHNvIHJlamVjdGlvbiBpcyBoYW5kbGVkXG4gICAgICAgIGF3YWl0IHNsZWVwKDEpO1xuICAgICAgICBfLmtleXMoYXBwaXVtLnNlc3Npb25zKS5zaG91bGQubm90LmNvbnRhaW4oc2Vzc2lvbklkKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCByZW1vdmUgc2Vzc2lvbiBpZiBpbm5lciBkcml2ZXIgdW5leHBlY3RlZGx5IGV4aXRzIHdpdGggbm8gZXJyb3InLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBbc2Vzc2lvbklkLF0gPSAoYXdhaXQgYXBwaXVtLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgXy5jbG9uZShXM0NfQ0FQUykpKS52YWx1ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb21tYS1zcGFjaW5nXG4gICAgICAgIF8ua2V5cyhhcHBpdW0uc2Vzc2lvbnMpLnNob3VsZC5jb250YWluKHNlc3Npb25JZCk7XG4gICAgICAgIGFwcGl1bS5zZXNzaW9uc1tzZXNzaW9uSWRdLmV2ZW50RW1pdHRlci5lbWl0KCdvblVuZXhwZWN0ZWRTaHV0ZG93bicpO1xuICAgICAgICAvLyBsZXQgZXZlbnQgbG9vcCBzcGluIHNvIHJlamVjdGlvbiBpcyBoYW5kbGVkXG4gICAgICAgIGF3YWl0IHNsZWVwKDEpO1xuICAgICAgICBfLmtleXMoYXBwaXVtLnNlc3Npb25zKS5zaG91bGQubm90LmNvbnRhaW4oc2Vzc2lvbklkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbiAgZGVzY3JpYmUoJyNjcmVhdGVQbHVnaW5JbnN0YW5jZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY2xhc3MgTm9BcmdzUGx1Z2luIHt9XG4gICAgTm9BcmdzUGx1Z2luLnBsdWdpbk5hbWUgPSAnbm9hcmdzJztcblxuICAgIGNsYXNzIEFyZ3NQbHVnaW4ge31cbiAgICBBcmdzUGx1Z2luLnBsdWdpbk5hbWUgPSAnYXJncyc7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBzZXQgQ0xJIGFyZ3MgaWYgbm9uZSBhcmUgc2VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFwcGl1bSA9IG5ldyBBcHBpdW1Ecml2ZXIoe30pO1xuICAgICAgYXBwaXVtLnBsdWdpbkNsYXNzZXMgPSBbTm9BcmdzUGx1Z2luLCBBcmdzUGx1Z2luXTtcbiAgICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIGFwcGl1bS5jcmVhdGVQbHVnaW5JbnN0YW5jZXMoKSkge1xuICAgICAgICBzaG91bGQubm90LmV4aXN0KHBsdWdpbi5jbGlBcmdzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGFkZCBjbGlBcmdzIHRvIHRoZSBwbHVnaW4gb25jZSB2YWxpZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhcHBpdW0gPSBuZXcgQXBwaXVtRHJpdmVyKHtwbHVnaW46IHthcmdzOiB7cmFuZG9tQXJnOiAxMjM0fX19KTtcbiAgICAgIGFwcGl1bS5wbHVnaW5DbGFzc2VzID0gW0FyZ3NQbHVnaW5dO1xuICAgICAgY29uc3QgcGx1Z2luID0gYXBwaXVtLmNyZWF0ZVBsdWdpbkluc3RhbmNlcygpWzBdO1xuICAgICAgcGx1Z2luLmNsaUFyZ3Muc2hvdWxkLmVxbCh7cmFuZG9tQXJnOiAxMjM0fSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6InRlc3QvZHJpdmVyLXNwZWNzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
386
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZHJpdmVyLXNwZWNzLmpzIl0sIm5hbWVzIjpbIlNFU1NJT05fSUQiLCJkZXNjcmliZSIsImJlZm9yZUVhY2giLCJnZXREcml2ZXJBbmRGYWtlRHJpdmVyIiwiYXBwaXVtQXJncyIsIkRyaXZlckNsYXNzIiwiRmFrZURyaXZlciIsImFwcGl1bSIsIkFwcGl1bURyaXZlciIsImZha2VEcml2ZXIiLCJtb2NrRmFrZURyaXZlciIsInNpbm9uIiwibW9jayIsIl9mYWtlRHJpdmVyIiwibW9ja2VkRHJpdmVyUmV0dXJuZXJDbGFzcyIsIkRyaXZlciIsIl9maW5kTWF0Y2hpbmdEcml2ZXIiLCJkcml2ZXIiLCJ2ZXJzaW9uIiwiZHJpdmVyTmFtZSIsImFmdGVyRWFjaCIsInJlc3RvcmUiLCJkZWxldGVTZXNzaW9uIiwiaXQiLCJleHBlY3RzIiwib25jZSIsIndpdGhFeGFjdEFyZ3MiLCJXM0NfQ0FQUyIsInJldHVybnMiLCJXM0NfUFJFRklYRURfQ0FQUyIsImNyZWF0ZVNlc3Npb24iLCJ2ZXJpZnkiLCJkZWZhdWx0Q2FwcyIsImFsbENhcHMiLCJhbHdheXNNYXRjaCIsImFyZ3MiLCJkZWZhdWx0Q2FwYWJpbGl0aWVzIiwid2l0aEFyZ3MiLCJwbGF0Zm9ybU5hbWUiLCJzZXNzaW9uT3ZlcnJpZGUiLCJmYWtlRHJpdmVycyIsIm1vY2tGYWtlRHJpdmVycyIsIl8iLCJtYXAiLCJmZCIsInRocm93cyIsInNlc3Npb25zIiwiZ2V0U2Vzc2lvbnMiLCJzaG91bGQiLCJoYXZlIiwibGVuZ3RoIiwibWZkIiwidW5kZWZpbmVkIiwiQkFTRV9DQVBTIiwidzNjQ2FwcyIsImZpcnN0TWF0Y2giLCJqc29ud3BDYXBzIiwiYXV0b21hdGlvbk5hbWUiLCJzb21lT3RoZXJQYXJhbSIsIm5ldmVyIiwiQXJnc0RyaXZlciIsIkJhc2VEcml2ZXIiLCJmYWtlIiwicmFuZG9tQXJnIiwidmFsdWUiLCJjbGlBcmdzIiwiZXFsIiwic2Vzc2lvbklkIiwib2JqZWN0IiwiYmVmb3JlIiwic2Vzc2lvbiIsImlkIiwiYmUiLCJhbiIsImVtcHR5IiwiY2FwczEiLCJjYXBzMiIsInNlc3Npb24xSWQiLCJzZXNzaW9uMUNhcHMiLCJzZXNzaW9uMklkIiwic2Vzc2lvbjJDYXBzIiwiZXF1YWwiLCJzdGF0dXMiLCJnZXRTdGF0dXMiLCJidWlsZCIsImV4aXN0IiwiY2xvbmUiLCJrZXlzIiwiY29udGFpbiIsImV2ZW50RW1pdHRlciIsImVtaXQiLCJFcnJvciIsIm5vdCIsIk5vQXJnc1BsdWdpbiIsInBsdWdpbk5hbWUiLCJBcmdzUGx1Z2luIiwiQXJyYXlBcmdQbHVnaW4iLCJ0eXBlIiwicHJvcGVydGllcyIsImRlZmF1bHQiLCJhcnIiLCJwbHVnaW5DbGFzc2VzIiwicGx1Z2luIiwiY3JlYXRlUGx1Z2luSW5zdGFuY2VzIiwiZmlyc3QiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLFVBQVUsR0FBRyxDQUFuQjtBQUVBQyxRQUFRLENBQUMsY0FBRCxFQUFpQixZQUFZO0FBQ25DQyxFQUFBQSxVQUFVLENBQUMsWUFBWTtBQUNyQjtBQUNBO0FBQ0QsR0FIUyxDQUFWO0FBSUFELEVBQUFBLFFBQVEsQ0FBQyxpQkFBRCxFQUFvQixZQUFZO0FBQ3RDLGFBQVNFLHNCQUFULENBQWlDQyxVQUFVLEdBQUcsRUFBOUMsRUFBa0RDLFdBQVcsR0FBR0Msc0JBQWhFLEVBQTRFO0FBQzFFLFlBQU1DLE1BQU0sR0FBRyxJQUFJQyxvQkFBSixDQUFpQkosVUFBakIsQ0FBZjtBQUNBLFlBQU1LLFVBQVUsR0FBRyxJQUFJSixXQUFKLEVBQW5COztBQUNBLFlBQU1LLGNBQWMsR0FBR0MsZUFBTUMsSUFBTixDQUFXSCxVQUFYLENBQXZCOztBQUNBQyxNQUFBQSxjQUFjLENBQUNHLFdBQWYsR0FBNkJKLFVBQTdCOztBQUNBLFlBQU1LLHlCQUF5QixHQUFHLFNBQVNDLE1BQVQsR0FBbUI7QUFDbkQsZUFBT04sVUFBUDtB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RjtBQU9ELFNBUk8sQ0FBUjtBQVNELE9BbEJPLENBQVI7QUFvQkFoRSxNQUFBQSxRQUFRLENBQUMsZ0RBQUQsRUFBbUQsWUFBWTtBQUNyRXNCLFFBQUFBLEVBQUUsQ0FBQyxrQ0FBRCxFQUFxQyxZQUFZO0FBQ2pELGdCQUFNaEIsTUFBTSxHQUFHLElBQUlDLG9CQUFKLENBQWlCO0FBQUM4RixZQUFBQSxNQUFNLEVBQUU7QUFBQ25FLGNBQUFBLElBQUksRUFBRTtBQUFDNEIsZ0JBQUFBLFNBQVMsRUFBRTtBQUFaO0FBQVA7QUFBVCxXQUFqQixDQUFmO0FBQ0F4RCxVQUFBQSxNQUFNLENBQUM4RixhQUFQLEdBQXVCLENBQUNOLFVBQUQsQ0FBdkI7O0FBQ0EsZ0JBQU1PLE1BQU0sR0FBRzVELGdCQUFFOEQsS0FBRixDQUFRakcsTUFBTSxDQUFDZ0cscUJBQVAsRUFBUixDQUFmOztBQUNBRCxVQUFBQSxNQUFNLENBQUNyQyxPQUFQLENBQWVqQixNQUFmLENBQXNCa0IsR0FBdEIsQ0FBMEI7QUFBQ0gsWUFBQUEsU0FBUyxFQUFFO0FBQVosV0FBMUI7QUFDRCxTQUxDLENBQUY7QUFNRCxPQVBPLENBQVI7QUFRRCxLQTFFTyxDQUFSO0FBMkVELEdBalZPLENBQVI7QUFrVkQsQ0F2Vk8sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptb2NoYVxuXG5pbXBvcnQgeyBCYXNlRHJpdmVyIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBGYWtlRHJpdmVyIH0gZnJvbSAnQGFwcGl1bS9mYWtlLWRyaXZlcic7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgQXBwaXVtRHJpdmVyIH0gZnJvbSAnLi4vbGliL2FwcGl1bSc7XG5pbXBvcnQgeyBmaW5hbGl6ZVNjaGVtYSwgcmVnaXN0ZXJTY2hlbWEsIHJlc2V0U2NoZW1hIH0gZnJvbSAnLi4vbGliL3NjaGVtYS9zY2hlbWEnO1xuaW1wb3J0IHsgaW5zZXJ0QXBwaXVtUHJlZml4ZXMsIHJlbW92ZUFwcGl1bVByZWZpeGVzIH0gZnJvbSAnLi4vbGliL3V0aWxzJztcbmltcG9ydCB7IEJBU0VfQ0FQUywgVzNDX0NBUFMsIFczQ19QUkVGSVhFRF9DQVBTIH0gZnJvbSAnLi9oZWxwZXJzJztcblxuXG5jb25zdCBTRVNTSU9OX0lEID0gMTtcblxuZGVzY3JpYmUoJ0FwcGl1bURyaXZlcicsIGZ1bmN0aW9uICgpIHtcbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgcmVzZXRTY2hlbWEoKTtcbiAgICBmaW5hbGl6ZVNjaGVtYSgpO1xuICB9KTtcbiAgZGVzY3JpYmUoJ2luc3RhbmNlIG1ldGhvZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBnZXREcml2ZXJBbmRGYWtlRHJpdmVyIChhcHBpdW1BcmdzID0ge30sIERyaXZlckNsYXNzID0gRmFrZURyaXZlcikge1xuICAgICAgY29uc3QgYXBwaXVtID0gbmV3IEFwcGl1bURyaXZlcihhcHBpdW1BcmdzKTtcbiAgICAgIGNvbnN0IGZha2VEcml2ZXIgPSBuZXcgRHJpdmVyQ2xhc3MoKTtcbiAgICAgIGNvbnN0IG1vY2tGYWtlRHJpdmVyID0gc2lub24ubW9jayhmYWtlRHJpdmVyKTtcbiAgICAgIG1vY2tGYWtlRHJpdmVyLl9mYWtlRHJpdmVyID0gZmFrZURyaXZlcjtcbiAgICAgIGNvbnN0IG1vY2tlZERyaXZlclJldHVybmVyQ2xhc3MgPSBmdW5jdGlvbiBEcml2ZXIgKCkge1xuICAgICAgICByZXR1cm4gZmFrZURyaXZlcjtcbiAgICAgIH07XG5cbiAgICAgIGFwcGl1bS5fZmluZE1hdGNoaW5nRHJpdmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRyaXZlcjogbW9ja2VkRHJpdmVyUmV0dXJuZXJDbGFzcyxcbiAgICAgICAgICB2ZXJzaW9uOiAnMS4yLjMnLFxuICAgICAgICAgIGRyaXZlck5hbWU6ICdmYWtlJyxcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gW2FwcGl1bSwgbW9ja0Zha2VEcml2ZXJdO1xuICAgIH1cbiAgICBkZXNjcmliZSgnY3JlYXRlU2Vzc2lvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBhcHBpdW07XG4gICAgICBsZXQgbW9ja0Zha2VEcml2ZXI7XG4gICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgW2FwcGl1bSwgbW9ja0Zha2VEcml2ZXJdID0gZ2V0RHJpdmVyQW5kRmFrZURyaXZlcigpO1xuICAgICAgfSk7XG4gICAgICBhZnRlckVhY2goYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBtb2NrRmFrZURyaXZlci5yZXN0b3JlKCk7XG4gICAgICAgIGF3YWl0IGFwcGl1bS5kZWxldGVTZXNzaW9uKFNFU1NJT05fSUQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KGBzaG91bGQgY2FsbCBpbm5lciBkcml2ZXIncyBjcmVhdGVTZXNzaW9uIHdpdGggZGVzaXJlZCBjYXBhYmlsaXRpZXNgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLmV4cGVjdHMoJ2NyZWF0ZVNlc3Npb24nKVxuICAgICAgICAgIC5vbmNlKCkud2l0aEV4YWN0QXJncyhudWxsLCBudWxsLCBXM0NfQ0FQUywgW10pXG4gICAgICAgICAgLnJldHVybnMoW1NFU1NJT05fSUQsIHJlbW92ZUFwcGl1bVByZWZpeGVzKFczQ19QUkVGSVhFRF9DQVBTKV0pO1xuICAgICAgICBhd2FpdCBhcHBpdW0uY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCBXM0NfQ0FQUyk7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnZlcmlmeSgpO1xuICAgICAgfSk7XG4gICAgICBpdChgc2hvdWxkIGNhbGwgaW5uZXIgZHJpdmVyJ3MgY3JlYXRlU2Vzc2lvbiB3aXRoIGRlc2lyZWQgYW5kIGRlZmF1bHQgY2FwYWJpbGl0aWVzYCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgZGVmYXVsdENhcHMgPSB7J2FwcGl1bTpzb21lQ2FwJzogJ2hlbGxvJ307XG4gICAgICAgIGxldCBhbGxDYXBzID0gey4uLlczQ19DQVBTLCBhbHdheXNNYXRjaDogey4uLlczQ19DQVBTLmFsd2F5c01hdGNoLCAuLi5kZWZhdWx0Q2Fwc319O1xuICAgICAgICBhcHBpdW0uYXJncy5kZWZhdWx0Q2FwYWJpbGl0aWVzID0gZGVmYXVsdENhcHM7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLmV4cGVjdHMoJ2NyZWF0ZVNlc3Npb24nKVxuICAgICAgICAgIC5vbmNlKCkud2l0aEFyZ3MobnVsbCwgbnVsbCwgYWxsQ2FwcylcbiAgICAgICAgICAucmV0dXJucyhbU0VTU0lPTl9JRCwgcmVtb3ZlQXBwaXVtUHJlZml4ZXMoYWxsQ2Fwcy5hbHdheXNNYXRjaCldKTtcbiAgICAgICAgYXdhaXQgYXBwaXVtLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgVzNDX0NBUFMpO1xuICAgICAgICBtb2NrRmFrZURyaXZlci52ZXJpZnkoKTtcbiAgICAgIH0pO1xuICAgICAgaXQoYHNob3VsZCBjYWxsIGlubmVyIGRyaXZlcidzIGNyZWF0ZVNlc3Npb24gd2l0aCBkZXNpcmVkIGFuZCBkZWZhdWx0IGNhcGFiaWxpdGllcyB3aXRob3V0IG92ZXJyaWRpbmcgY2Fwc2AsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gYSBkZWZhdWx0IGNhcGFiaWxpdHkgd2l0aCB0aGUgc2FtZSBrZXkgYXMgYSBkZXNpcmVkIGNhcGFiaWxpdHlcbiAgICAgICAgLy8gc2hvdWxkIGRvIG5vdGhpbmdcbiAgICAgICAgbGV0IGRlZmF1bHRDYXBzID0ge3BsYXRmb3JtTmFtZTogJ0Vyc2F0eid9O1xuICAgICAgICBhcHBpdW0uYXJncy5kZWZhdWx0Q2FwYWJpbGl0aWVzID0gZGVmYXVsdENhcHM7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLmV4cGVjdHMoJ2NyZWF0ZVNlc3Npb24nKVxuICAgICAgICAgIC5vbmNlKCkud2l0aEFyZ3MobnVsbCwgbnVsbCwgVzNDX0NBUFMpXG4gICAgICAgICAgLnJldHVybnMoW1NFU1NJT05fSUQsIHJlbW92ZUFwcGl1bVByZWZpeGVzKFczQ19QUkVGSVhFRF9DQVBTKV0pO1xuICAgICAgICBhd2FpdCBhcHBpdW0uY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCBXM0NfQ0FQUyk7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnZlcmlmeSgpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGtpbGwgYWxsIG90aGVyIHNlc3Npb25zIGlmIHNlc3Npb25PdmVycmlkZSBpcyBvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXBwaXVtLmFyZ3Muc2Vzc2lvbk92ZXJyaWRlID0gdHJ1ZTtcblxuICAgICAgICAvLyBtb2NrIHRocmVlIHNlc3Npb25zIHRoYXQgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiB0aGUgbmV3IG9uZSBpcyBjcmVhdGVkXG4gICAgICAgIGxldCBmYWtlRHJpdmVycyA9IFtcbiAgICAgICAgICBuZXcgRmFrZURyaXZlcigpLFxuICAgICAgICAgIG5ldyBGYWtlRHJpdmVyKCksXG4gICAgICAgICAgbmV3IEZha2VEcml2ZXIoKSxcbiAgICAgICAgXTtcbiAgICAgICAgbGV0IG1vY2tGYWtlRHJpdmVycyA9IF8ubWFwKGZha2VEcml2ZXJzLCAoZmQpID0+IHNpbm9uLm1vY2soZmQpKTtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXJzWzBdLmV4cGVjdHMoJ2RlbGV0ZVNlc3Npb24nKVxuICAgICAgICAgIC5vbmNlKCk7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyc1sxXS5leHBlY3RzKCdkZWxldGVTZXNzaW9uJylcbiAgICAgICAgICAub25jZSgpXG4gICAgICAgICAgLnRocm93cygnQ2Fubm90IHNodXQgZG93biBBbmRyb2lkIGRyaXZlcjsgaXQgaGFzIGFscmVhZHkgc2h1dCBkb3duJyk7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyc1syXS5leHBlY3RzKCdkZWxldGVTZXNzaW9uJylcbiAgICAgICAgICAub25jZSgpO1xuICAgICAgICBhcHBpdW0uc2Vzc2lvbnNbJ2FiYy0xMjMteHl6J10gPSBmYWtlRHJpdmVyc1swXTtcbiAgICAgICAgYXBwaXVtLnNlc3Npb25zWyd4eXotMzIxLWFiYyddID0gZmFrZURyaXZlcnNbMV07XG4gICAgICAgIGFwcGl1bS5zZXNzaW9uc1snMTIzLWFiYy14eXonXSA9IGZha2VEcml2ZXJzWzJdO1xuXG4gICAgICAgIGxldCBzZXNzaW9ucyA9IGF3YWl0IGFwcGl1bS5nZXRTZXNzaW9ucygpO1xuICAgICAgICBzZXNzaW9ucy5zaG91bGQuaGF2ZS5sZW5ndGgoMyk7XG5cbiAgICAgICAgbW9ja0Zha2VEcml2ZXIuZXhwZWN0cygnY3JlYXRlU2Vzc2lvbicpXG4gICAgICAgICAgLm9uY2UoKS53aXRoRXhhY3RBcmdzKG51bGwsIG51bGwsIFczQ19DQVBTLCBbXSlcbiAgICAgICAgICAucmV0dXJucyhbU0VTU0lPTl9JRCwgcmVtb3ZlQXBwaXVtUHJlZml4ZXMoVzNDX1BSRUZJWEVEX0NBUFMpXSk7XG4gICAgICAgIGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIFczQ19DQVBTKTtcblxuICAgICAgICBzZXNzaW9ucyA9IGF3YWl0IGFwcGl1bS5nZXRTZXNzaW9ucygpO1xuICAgICAgICBzZXNzaW9ucy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG5cbiAgICAgICAgZm9yIChsZXQgbWZkIG9mIG1vY2tGYWtlRHJpdmVycykge1xuICAgICAgICAgIG1mZC52ZXJpZnkoKTtcbiAgICAgICAgfVxuICAgICAgICBtb2NrRmFrZURyaXZlci52ZXJpZnkoKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBjYWxsIFwiY3JlYXRlU2Vzc2lvblwiIHdpdGggVzNDIGNhcGFiaWxpdGllcyBhcmd1bWVudCwgaWYgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLmV4cGVjdHMoJ2NyZWF0ZVNlc3Npb24nKVxuICAgICAgICAgIC5vbmNlKCkud2l0aEFyZ3MobnVsbCwgdW5kZWZpbmVkLCBXM0NfQ0FQUylcbiAgICAgICAgICAucmV0dXJucyhbU0VTU0lPTl9JRCwgQkFTRV9DQVBTXSk7XG4gICAgICAgIGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBXM0NfQ0FQUyk7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnZlcmlmeSgpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGNhbGwgXCJjcmVhdGVTZXNzaW9uXCIgd2l0aCBXM0MgY2FwYWJpbGl0aWVzIGFyZ3VtZW50IHdpdGggYWRkaXRpb25hbCBwcm92aWRlZCBwYXJhbWV0ZXJzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgdzNjQ2FwcyA9IHtcbiAgICAgICAgICAuLi5XM0NfQ0FQUyxcbiAgICAgICAgICBhbHdheXNNYXRjaDoge1xuICAgICAgICAgICAgLi4uVzNDX0NBUFMuYWx3YXlzTWF0Y2gsXG4gICAgICAgICAgICAnYXBwaXVtOnNvbWVPdGhlclBhcm0nOiAnc29tZU90aGVyUGFybScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIuZXhwZWN0cygnY3JlYXRlU2Vzc2lvbicpXG4gICAgICAgICAgLm9uY2UoKS53aXRoQXJncyhudWxsLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICAgIGFsd2F5c01hdGNoOiB7XG4gICAgICAgICAgICAgIC4uLnczY0NhcHMuYWx3YXlzTWF0Y2gsXG4gICAgICAgICAgICAgICdhcHBpdW06c29tZU90aGVyUGFybSc6ICdzb21lT3RoZXJQYXJtJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaXJzdE1hdGNoOiBbe31dLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnJldHVybnMoW1NFU1NJT05fSUQsIGluc2VydEFwcGl1bVByZWZpeGVzKEJBU0VfQ0FQUyldKTtcblxuICAgICAgICBhd2FpdCBhcHBpdW0uY3JlYXRlU2Vzc2lvbih1bmRlZmluZWQsIHVuZGVmaW5lZCwgdzNjQ2Fwcyk7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnZlcmlmeSgpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIG5vdCBjYWxsIFwiY3JlYXRlU2Vzc2lvblwiIHdpdGggSlNPTldQIGNhcGFiaWxpdGllcyBpZiBXM0MgaGFzIGluY29tcGxldGUgY2FwYWJpbGl0aWVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB3M2NDYXBzID0ge1xuICAgICAgICAgIC4uLlczQ19DQVBTLFxuICAgICAgICAgIGFsd2F5c01hdGNoOiB7XG4gICAgICAgICAgICAnYXBwaXVtOnNvbWVPdGhlclBhcm0nOiAnc29tZU90aGVyUGFybScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBqc29ud3BDYXBzID0ge1xuICAgICAgICAgIC4uLkJBU0VfQ0FQUyxcbiAgICAgICAgICBhdXRvbWF0aW9uTmFtZTogJ0Zha2UnLFxuICAgICAgICAgIHNvbWVPdGhlclBhcmFtOiAnc29tZU90aGVyUGFyYW0nLFxuICAgICAgICB9O1xuXG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLmV4cGVjdHMoJ2NyZWF0ZVNlc3Npb24nKS5uZXZlcigpO1xuICAgICAgICBhd2FpdCBhcHBpdW0uY3JlYXRlU2Vzc2lvbihqc29ud3BDYXBzLCB1bmRlZmluZWQsIHczY0NhcHMpO1xuICAgICAgICBtb2NrRmFrZURyaXZlci52ZXJpZnkoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGFzc2lnbiBhcmdzIHRvIHByb3BlcnR5IGBjbGlBcmdzYCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2xhc3MgQXJnc0RyaXZlciBleHRlbmRzIEJhc2VEcml2ZXIge1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB7ZHJpdmVyOiB7ZmFrZToge3JhbmRvbUFyZzogMTIzNH19fTtcbiAgICAgICAgW2FwcGl1bSwgbW9ja0Zha2VEcml2ZXJdID0gZ2V0RHJpdmVyQW5kRmFrZURyaXZlcihhcmdzLCBBcmdzRHJpdmVyKTtcbiAgICAgICAgY29uc3Qge3ZhbHVlfSA9IGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBXM0NfQ0FQUyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbW9ja0Zha2VEcml2ZXIuX2Zha2VEcml2ZXIuY2xpQXJncy5zaG91bGQuZXFsKHtyYW5kb21Bcmc6IDEyMzR9KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBhd2FpdCBhcHBpdW0uZGVsZXRlU2Vzc2lvbih2YWx1ZVswXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdkZWxldGVTZXNzaW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGFwcGl1bTtcbiAgICAgIGxldCBtb2NrRmFrZURyaXZlcjtcbiAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBbYXBwaXVtLCBtb2NrRmFrZURyaXZlcl0gPSBnZXREcml2ZXJBbmRGYWtlRHJpdmVyKCk7XG4gICAgICB9KTtcbiAgICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLnJlc3RvcmUoKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCByZW1vdmUgdGhlIHNlc3Npb24gaWYgaXQgaXMgZm91bmQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBbc2Vzc2lvbklkXSA9IChhd2FpdCBhcHBpdW0uY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCBXM0NfQ0FQUykpLnZhbHVlO1xuICAgICAgICBsZXQgc2Vzc2lvbnMgPSBhd2FpdCBhcHBpdW0uZ2V0U2Vzc2lvbnMoKTtcbiAgICAgICAgc2Vzc2lvbnMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgICBhd2FpdCBhcHBpdW0uZGVsZXRlU2Vzc2lvbihzZXNzaW9uSWQpO1xuICAgICAgICBzZXNzaW9ucyA9IGF3YWl0IGFwcGl1bS5nZXRTZXNzaW9ucygpO1xuICAgICAgICBzZXNzaW9ucy5zaG91bGQuaGF2ZS5sZW5ndGgoMCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgY2FsbCBpbm5lciBkcml2ZXJcXCdzIGRlbGV0ZVNlc3Npb24gbWV0aG9kJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBbc2Vzc2lvbklkXSA9IChhd2FpdCBhcHBpdW0uY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCBXM0NfQ0FQUykpLnZhbHVlO1xuICAgICAgICBtb2NrRmFrZURyaXZlci5leHBlY3RzKCdkZWxldGVTZXNzaW9uJylcbiAgICAgICAgICAub25jZSgpLndpdGhFeGFjdEFyZ3Moc2Vzc2lvbklkLCBbXSlcbiAgICAgICAgICAucmV0dXJucygpO1xuICAgICAgICBhd2FpdCBhcHBpdW0uZGVsZXRlU2Vzc2lvbihzZXNzaW9uSWQpO1xuICAgICAgICBtb2NrRmFrZURyaXZlci52ZXJpZnkoKTtcblxuICAgICAgICAvLyBjbGVhbnVwLCBzaW5jZSB3ZSBmYWtlZCB0aGUgZGVsZXRlIHNlc3Npb24gY2FsbFxuICAgICAgICBhd2FpdCBtb2NrRmFrZURyaXZlci5vYmplY3QuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ2dldFNlc3Npb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGFwcGl1bSwgbW9ja0Zha2VEcml2ZXI7XG4gICAgICBsZXQgc2Vzc2lvbnM7XG4gICAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgICBbYXBwaXVtLCBtb2NrRmFrZURyaXZlcl0gPSBnZXREcml2ZXJBbmRGYWtlRHJpdmVyKCk7XG4gICAgICB9KTtcbiAgICAgIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAobGV0IHNlc3Npb24gb2Ygc2Vzc2lvbnMpIHtcbiAgICAgICAgICBhd2FpdCBhcHBpdW0uZGVsZXRlU2Vzc2lvbihzZXNzaW9uLmlkKTtcbiAgICAgICAgfVxuICAgICAgICBtb2NrRmFrZURyaXZlci5yZXN0b3JlKCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IGFycmF5IG9mIHNlc3Npb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXNzaW9ucyA9IGF3YWl0IGFwcGl1bS5nZXRTZXNzaW9ucygpO1xuICAgICAgICBzZXNzaW9ucy5zaG91bGQuYmUuYW4oJ2FycmF5Jyk7XG4gICAgICAgIHNlc3Npb25zLnNob3VsZC5iZS5lbXB0eTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gc2Vzc2lvbnMgY3JlYXRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGNhcHMxID0ge2Fsd2F5c01hdGNoOiB7Li4uVzNDX1BSRUZJWEVEX0NBUFMsICdhcHBpdW06Y2FwJzogJ3ZhbHVlJ319O1xuICAgICAgICBsZXQgY2FwczIgPSB7YWx3YXlzTWF0Y2g6IHsuLi5XM0NfUFJFRklYRURfQ0FQUywgJ2FwcGl1bTpjYXAnOiAnb3RoZXIgdmFsdWUnfX07XG4gICAgICAgIG1vY2tGYWtlRHJpdmVyLmV4cGVjdHMoJ2NyZWF0ZVNlc3Npb24nKS5vbmNlKClcbiAgICAgICAgICAucmV0dXJucyhbJ2Zha2Utc2Vzc2lvbi1pZC0xJywgcmVtb3ZlQXBwaXVtUHJlZml4ZXMoY2FwczEuYWx3YXlzTWF0Y2gpXSk7XG4gICAgICAgIGxldCBbc2Vzc2lvbjFJZCwgc2Vzc2lvbjFDYXBzXSA9IChhd2FpdCBhcHBpdW0uY3JlYXRlU2Vzc2lvbihudWxsLCBudWxsLCBjYXBzMSkpLnZhbHVlO1xuICAgICAgICBtb2NrRmFrZURyaXZlci5leHBlY3RzKCdjcmVhdGVTZXNzaW9uJykub25jZSgpXG4gICAgICAgICAgLnJldHVybnMoWydmYWtlLXNlc3Npb24taWQtMicsIHJlbW92ZUFwcGl1bVByZWZpeGVzKGNhcHMyLmFsd2F5c01hdGNoKV0pO1xuICAgICAgICBsZXQgW3Nlc3Npb24ySWQsIHNlc3Npb24yQ2Fwc10gPSAoYXdhaXQgYXBwaXVtLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgY2FwczIpKS52YWx1ZTtcblxuICAgICAgICBzZXNzaW9ucyA9IGF3YWl0IGFwcGl1bS5nZXRTZXNzaW9ucygpO1xuICAgICAgICBzZXNzaW9ucy5zaG91bGQuYmUuYW4oJ2FycmF5Jyk7XG4gICAgICAgIHNlc3Npb25zLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgICAgc2Vzc2lvbnNbMF0uaWQuc2hvdWxkLmVxdWFsKHNlc3Npb24xSWQpO1xuICAgICAgICByZW1vdmVBcHBpdW1QcmVmaXhlcyhjYXBzMS5hbHdheXNNYXRjaCkuc2hvdWxkLmVxbChzZXNzaW9uMUNhcHMpO1xuICAgICAgICBzZXNzaW9uc1sxXS5pZC5zaG91bGQuZXF1YWwoc2Vzc2lvbjJJZCk7XG4gICAgICAgIHJlbW92ZUFwcGl1bVByZWZpeGVzKGNhcHMyLmFsd2F5c01hdGNoKS5zaG91bGQuZXFsKHNlc3Npb24yQ2Fwcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnZ2V0U3RhdHVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGFwcGl1bTtcbiAgICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGFwcGl1bSA9IG5ldyBBcHBpdW1Ecml2ZXIoe30pO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHJldHVybiBhIHN0YXR1cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IHN0YXR1cyA9IGF3YWl0IGFwcGl1bS5nZXRTdGF0dXMoKTtcbiAgICAgICAgc3RhdHVzLmJ1aWxkLnNob3VsZC5leGlzdDtcbiAgICAgICAgc3RhdHVzLmJ1aWxkLnZlcnNpb24uc2hvdWxkLmV4aXN0O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ3Nlc3Npb25FeGlzdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ2F0dGFjaFVuZXhwZWN0ZWRTaHV0ZG93bkhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgYXBwaXVtO1xuICAgICAgbGV0IG1vY2tGYWtlRHJpdmVyO1xuICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIFthcHBpdW0sIG1vY2tGYWtlRHJpdmVyXSA9IGdldERyaXZlckFuZEZha2VEcml2ZXIoKTtcbiAgICAgIH0pO1xuICAgICAgYWZ0ZXJFYWNoKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgbW9ja0Zha2VEcml2ZXIub2JqZWN0LmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgICAgbW9ja0Zha2VEcml2ZXIucmVzdG9yZSgpO1xuICAgICAgICBhcHBpdW0uYXJncy5kZWZhdWx0Q2FwYWJpbGl0aWVzID0ge307XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZW1vdmUgc2Vzc2lvbiBpZiBpbm5lciBkcml2ZXIgdW5leHBlY3RlZGx5IGV4aXRzIHdpdGggYW4gZXJyb3InLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBbc2Vzc2lvbklkLF0gPSAoYXdhaXQgYXBwaXVtLmNyZWF0ZVNlc3Npb24obnVsbCwgbnVsbCwgXy5jbG9uZShXM0NfQ0FQUykpKS52YWx1ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb21tYS1zcGFjaW5nXG4gICAgICAgIF8ua2V5cyhhcHBpdW0uc2Vzc2lvbnMpLnNob3VsZC5jb250YWluKHNlc3Npb25JZCk7XG4gICAgICAgIGFwcGl1bS5zZXNzaW9uc1tzZXNzaW9uSWRdLmV2ZW50RW1pdHRlci5lbWl0KCdvblVuZXhwZWN0ZWRTaHV0ZG93bicsIG5ldyBFcnJvcignT29wcycpKTtcbiAgICAgICAgLy8gbGV0IGV2ZW50IGxvb3Agc3BpbiBzbyByZWplY3Rpb24gaXMgaGFuZGxlZFxuICAgICAgICBhd2FpdCBzbGVlcCgxKTtcbiAgICAgICAgXy5rZXlzKGFwcGl1bS5zZXNzaW9ucykuc2hvdWxkLm5vdC5jb250YWluKHNlc3Npb25JZCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgcmVtb3ZlIHNlc3Npb24gaWYgaW5uZXIgZHJpdmVyIHVuZXhwZWN0ZWRseSBleGl0cyB3aXRoIG5vIGVycm9yJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgW3Nlc3Npb25JZCxdID0gKGF3YWl0IGFwcGl1bS5jcmVhdGVTZXNzaW9uKG51bGwsIG51bGwsIF8uY2xvbmUoVzNDX0NBUFMpKSkudmFsdWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29tbWEtc3BhY2luZ1xuICAgICAgICBfLmtleXMoYXBwaXVtLnNlc3Npb25zKS5zaG91bGQuY29udGFpbihzZXNzaW9uSWQpO1xuICAgICAgICBhcHBpdW0uc2Vzc2lvbnNbc2Vzc2lvbklkXS5ldmVudEVtaXR0ZXIuZW1pdCgnb25VbmV4cGVjdGVkU2h1dGRvd24nKTtcbiAgICAgICAgLy8gbGV0IGV2ZW50IGxvb3Agc3BpbiBzbyByZWplY3Rpb24gaXMgaGFuZGxlZFxuICAgICAgICBhd2FpdCBzbGVlcCgxKTtcbiAgICAgICAgXy5rZXlzKGFwcGl1bS5zZXNzaW9ucykuc2hvdWxkLm5vdC5jb250YWluKHNlc3Npb25JZCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnY3JlYXRlUGx1Z2luSW5zdGFuY2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2xhc3MgTm9BcmdzUGx1Z2luIHt9XG4gICAgICBOb0FyZ3NQbHVnaW4ucGx1Z2luTmFtZSA9ICdub2FyZ3MnO1xuXG4gICAgICBjbGFzcyBBcmdzUGx1Z2luIHt9XG4gICAgICBBcmdzUGx1Z2luLnBsdWdpbk5hbWUgPSAnYXJncyc7XG5cbiAgICAgIGNsYXNzIEFycmF5QXJnUGx1Z2luIHt9XG4gICAgICBBcnJheUFyZ1BsdWdpbi5wbHVnaW5OYW1lID0gJ2FycmF5YXJnJztcblxuICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlc2V0U2NoZW1hKCk7XG4gICAgICAgIC8vIHRvIGVzdGFibGlzaCBkZWZhdWx0cywgd2UgbmVlZCB0byByZWdpc3RlciBhIHNjaGVtYSBmb3IgdGhlIHBsdWdpbi5cbiAgICAgICAgLy8gbm90ZSB0aGF0IHRoZSBgbm9hcmdzYCBwbHVnaW4gZG9lcyBub3QgbmVlZCBhIHNjaGVtYSwgYmVjYXVzZSBpdFxuICAgICAgICAvLyBhY2NlcHRzIG5vIGFyZ3VtZW50cy5cbiAgICAgICAgcmVnaXN0ZXJTY2hlbWEoJ3BsdWdpbicsIEFyZ3NQbHVnaW4ucGx1Z2luTmFtZSwge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHJhbmRvbUFyZzoge1xuICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgZGVmYXVsdDogMjAwMFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJlZ2lzdGVyU2NoZW1hKCdwbHVnaW4nLCBBcnJheUFyZ1BsdWdpbi5wbHVnaW5OYW1lLCB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgYXJyOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZmluYWxpemVTY2hlbWEoKTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnd2hlbiBhcmdzIGFyZSBub3QgcHJlc2VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBub3Qgc2V0IENMSSBhcmdzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGFwcGl1bSA9IG5ldyBBcHBpdW1Ecml2ZXIoe30pO1xuICAgICAgICAgIGFwcGl1bS5wbHVnaW5DbGFzc2VzID0gW05vQXJnc1BsdWdpbiwgQXJnc1BsdWdpbl07XG4gICAgICAgICAgZm9yIChjb25zdCBwbHVnaW4gb2YgYXBwaXVtLmNyZWF0ZVBsdWdpbkluc3RhbmNlcygpKSB7XG4gICAgICAgICAgICBzaG91bGQubm90LmV4aXN0KHBsdWdpbi5jbGlBcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCd3aGVuIGFyZ3MgYXJlIGVxdWFsIHRvIHRoZSBzY2hlbWEgZGVmYXVsdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgbm90IHNldCBDTEkgYXJncycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBhcHBpdW0gPSBuZXcgQXBwaXVtRHJpdmVyKHtwbHVnaW46IHtbQXJnc1BsdWdpbi5wbHVnaW5OYW1lXToge3JhbmRvbUFyZzogMjAwMH19fSk7XG4gICAgICAgICAgYXBwaXVtLnBsdWdpbkNsYXNzZXMgPSBbTm9BcmdzUGx1Z2luLCBBcmdzUGx1Z2luXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBhcHBpdW0uY3JlYXRlUGx1Z2luSW5zdGFuY2VzKCkpIHtcbiAgICAgICAgICAgIHNob3VsZC5ub3QuZXhpc3QocGx1Z2luLmNsaUFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ3doZW4gdGhlIGRlZmF1bHQgaXMgYW4gXCJvYmplY3RcIicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpdCgnc2hvdWxkIG5vdCBzZXQgQ0xJIGFyZ3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBhcHBpdW0gPSBuZXcgQXBwaXVtRHJpdmVyKHtwbHVnaW46IHtbQXJyYXlBcmdQbHVnaW4ucGx1Z2luTmFtZV06IHthcnI6IFtdfX19KTtcbiAgICAgICAgICAgIGFwcGl1bS5wbHVnaW5DbGFzc2VzID0gW05vQXJnc1BsdWdpbiwgQXJnc1BsdWdpbiwgQXJyYXlBcmdQbHVnaW5dO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwbHVnaW4gb2YgYXBwaXVtLmNyZWF0ZVBsdWdpbkluc3RhbmNlcygpKSB7XG4gICAgICAgICAgICAgIHNob3VsZC5ub3QuZXhpc3QocGx1Z2luLmNsaUFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnd2hlbiBhcmdzIGFyZSBub3QgZXF1YWwgdG8gdGhlIHNjaGVtYSBkZWZhdWx0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBhZGQgY2xpQXJncyB0byB0aGUgcGx1Z2luJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGFwcGl1bSA9IG5ldyBBcHBpdW1Ecml2ZXIoe3BsdWdpbjoge2FyZ3M6IHtyYW5kb21Bcmc6IDEyMzR9fX0pO1xuICAgICAgICAgIGFwcGl1bS5wbHVnaW5DbGFzc2VzID0gW0FyZ3NQbHVnaW5dO1xuICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IF8uZmlyc3QoYXBwaXVtLmNyZWF0ZVBsdWdpbkluc3RhbmNlcygpKTtcbiAgICAgICAgICBwbHVnaW4uY2xpQXJncy5zaG91bGQuZXFsKHtyYW5kb21Bcmc6IDEyMzR9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJmaWxlIjoidGVzdC9kcml2ZXItc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==