@appium/base-driver 8.7.1 → 8.7.3

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.
Files changed (84) hide show
  1. package/build/lib/basedriver/capabilities.d.ts +207 -42
  2. package/build/lib/basedriver/capabilities.d.ts.map +1 -1
  3. package/build/lib/basedriver/capabilities.js +39 -44
  4. package/build/lib/basedriver/capabilities.js.map +1 -0
  5. package/build/lib/basedriver/commands/event.js +3 -3
  6. package/build/lib/basedriver/commands/event.js.map +1 -0
  7. package/build/lib/basedriver/commands/execute.js +3 -3
  8. package/build/lib/basedriver/commands/execute.js.map +1 -0
  9. package/build/lib/basedriver/commands/find.js.map +1 -0
  10. package/build/lib/basedriver/commands/index.js.map +1 -0
  11. package/build/lib/basedriver/commands/log.js +3 -3
  12. package/build/lib/basedriver/commands/log.js.map +1 -0
  13. package/build/lib/basedriver/commands/session.js +3 -3
  14. package/build/lib/basedriver/commands/session.js.map +1 -0
  15. package/build/lib/basedriver/commands/settings.js.map +1 -0
  16. package/build/lib/basedriver/commands/timeout.js +3 -3
  17. package/build/lib/basedriver/commands/timeout.js.map +1 -0
  18. package/build/lib/basedriver/core.d.ts +171 -20
  19. package/build/lib/basedriver/core.d.ts.map +1 -1
  20. package/build/lib/basedriver/core.js +4 -6
  21. package/build/lib/basedriver/core.js.map +1 -0
  22. package/build/lib/basedriver/desired-caps.d.ts +0 -2
  23. package/build/lib/basedriver/desired-caps.d.ts.map +1 -1
  24. package/build/lib/basedriver/desired-caps.js +4 -53
  25. package/build/lib/basedriver/desired-caps.js.map +1 -0
  26. package/build/lib/basedriver/device-settings.js +3 -3
  27. package/build/lib/basedriver/device-settings.js.map +1 -0
  28. package/build/lib/basedriver/driver.d.ts +323 -28
  29. package/build/lib/basedriver/driver.d.ts.map +1 -1
  30. package/build/lib/basedriver/driver.js +27 -30
  31. package/build/lib/basedriver/driver.js.map +1 -0
  32. package/build/lib/basedriver/helpers.d.ts +1 -1
  33. package/build/lib/basedriver/helpers.d.ts.map +1 -1
  34. package/build/lib/basedriver/helpers.js +3 -3
  35. package/build/lib/basedriver/helpers.js.map +1 -0
  36. package/build/lib/basedriver/logger.js.map +1 -0
  37. package/build/lib/constants.js.map +1 -0
  38. package/build/lib/express/crash.js.map +1 -0
  39. package/build/lib/express/express-logging.js +3 -3
  40. package/build/lib/express/express-logging.js.map +1 -0
  41. package/build/lib/express/idempotency.js +3 -3
  42. package/build/lib/express/idempotency.js.map +1 -0
  43. package/build/lib/express/logger.js.map +1 -0
  44. package/build/lib/express/middleware.js +3 -3
  45. package/build/lib/express/middleware.js.map +1 -0
  46. package/build/lib/express/server.js +3 -3
  47. package/build/lib/express/server.js.map +1 -0
  48. package/build/lib/express/static.js +3 -3
  49. package/build/lib/express/static.js.map +1 -0
  50. package/build/lib/express/websocket.js +3 -3
  51. package/build/lib/express/websocket.js.map +1 -0
  52. package/build/lib/helpers/capabilities.d.ts +66 -5
  53. package/build/lib/helpers/capabilities.d.ts.map +1 -1
  54. package/build/lib/helpers/capabilities.js +7 -7
  55. package/build/lib/helpers/capabilities.js.map +1 -0
  56. package/build/lib/index.d.ts +1 -1
  57. package/build/lib/index.d.ts.map +1 -1
  58. package/build/lib/index.js +10 -3
  59. package/build/lib/index.js.map +1 -0
  60. package/build/lib/jsonwp-proxy/protocol-converter.js +3 -3
  61. package/build/lib/jsonwp-proxy/protocol-converter.js.map +1 -0
  62. package/build/lib/jsonwp-proxy/proxy.js +3 -3
  63. package/build/lib/jsonwp-proxy/proxy.js.map +1 -0
  64. package/build/lib/jsonwp-status/status.js +3 -3
  65. package/build/lib/jsonwp-status/status.js.map +1 -0
  66. package/build/lib/protocol/errors.js +3 -3
  67. package/build/lib/protocol/errors.js.map +1 -0
  68. package/build/lib/protocol/helpers.js +3 -3
  69. package/build/lib/protocol/helpers.js.map +1 -0
  70. package/build/lib/protocol/index.js.map +1 -0
  71. package/build/lib/protocol/protocol.js +3 -3
  72. package/build/lib/protocol/protocol.js.map +1 -0
  73. package/build/lib/protocol/routes.js +3 -3
  74. package/build/lib/protocol/routes.js.map +1 -0
  75. package/build/lib/protocol/validators.js +3 -3
  76. package/build/lib/protocol/validators.js.map +1 -0
  77. package/build/tsconfig.tsbuildinfo +1 -1
  78. package/lib/basedriver/capabilities.js +151 -93
  79. package/lib/basedriver/core.js +34 -18
  80. package/lib/basedriver/desired-caps.js +1 -53
  81. package/lib/basedriver/driver.js +113 -51
  82. package/lib/helpers/capabilities.js +19 -9
  83. package/lib/index.js +1 -0
  84. package/package.json +9 -10
@@ -1,15 +1,120 @@
1
- export type Capabilities = import('@appium/types').Capabilities;
2
- export type W3CCapabilities = import('@appium/types').W3CCapabilities;
3
1
  export type Driver = import('@appium/types').Driver;
4
- export type Core = import('@appium/types').Core;
2
+ export type Constraints = import('@appium/types').Constraints;
5
3
  export type ExecuteMethodMap = import('@appium/types').ExecuteMethodMap;
6
4
  export type ServerArgs = import('@appium/types').ServerArgs;
7
5
  export type EventHistory = import('@appium/types').EventHistory;
8
6
  export type AppiumLogger = import('@appium/types').AppiumLogger;
7
+ export type StringRecord = import('@appium/types').StringRecord;
8
+ export type BaseDriverCapConstraints = import('@appium/types').BaseDriverCapConstraints;
9
+ export type Capabilities<C extends Readonly<Record<string, import("@appium/types").Constraint>> = {
10
+ readonly platformName: {
11
+ readonly presence: true;
12
+ readonly isString: true;
13
+ };
14
+ readonly app: {
15
+ readonly isString: true;
16
+ };
17
+ readonly deviceName: {
18
+ readonly isString: true;
19
+ };
20
+ readonly platformVersion: {
21
+ readonly isString: true;
22
+ };
23
+ readonly newCommandTimeout: {
24
+ readonly isNumber: true;
25
+ };
26
+ readonly automationName: {
27
+ readonly isString: true;
28
+ };
29
+ readonly autoLaunch: {
30
+ readonly isBoolean: true;
31
+ };
32
+ readonly udid: {
33
+ readonly isString: true;
34
+ };
35
+ readonly orientation: {
36
+ readonly inclusion: readonly ["LANDSCAPE", "PORTRAIT"];
37
+ };
38
+ readonly autoWebview: {
39
+ readonly isBoolean: true;
40
+ };
41
+ readonly noReset: {
42
+ readonly isBoolean: true;
43
+ };
44
+ readonly fullReset: {
45
+ readonly isBoolean: true;
46
+ };
47
+ readonly language: {
48
+ readonly isString: true;
49
+ };
50
+ readonly locale: {
51
+ readonly isString: true;
52
+ };
53
+ readonly eventTimings: {
54
+ readonly isBoolean: true;
55
+ };
56
+ readonly printPageSourceOnFindFailure: {
57
+ readonly isBoolean: true;
58
+ };
59
+ }, Extra extends void | import("@appium/types").StringRecord = void> = import('@appium/types').Capabilities<C, Extra>;
60
+ export type W3CCapabilities<T extends import("@appium/types").StringRecord = {}> = import('@appium/types').W3CCapabilities<T>;
61
+ export type Core<C extends Readonly<Record<string, import("@appium/types").Constraint>>> = import('@appium/types').Core<C>;
62
+ export type DriverOpts<C extends Readonly<Record<string, import("@appium/types").Constraint>>> = import('@appium/types').DriverOpts<C>;
9
63
  /**
10
- * @implements {Core}
64
+ * @template {Constraints} [C=BaseDriverCapConstraints]
65
+ * @implements {Core<C>}
11
66
  */
12
- export class DriverCore implements Core {
67
+ export class DriverCore<C extends Readonly<Record<string, import("@appium/types").Constraint>> = {
68
+ readonly platformName: {
69
+ readonly presence: true;
70
+ readonly isString: true;
71
+ };
72
+ readonly app: {
73
+ readonly isString: true;
74
+ };
75
+ readonly deviceName: {
76
+ readonly isString: true;
77
+ };
78
+ readonly platformVersion: {
79
+ readonly isString: true;
80
+ };
81
+ readonly newCommandTimeout: {
82
+ readonly isNumber: true;
83
+ };
84
+ readonly automationName: {
85
+ readonly isString: true;
86
+ };
87
+ readonly autoLaunch: {
88
+ readonly isBoolean: true;
89
+ };
90
+ readonly udid: {
91
+ readonly isString: true;
92
+ };
93
+ readonly orientation: {
94
+ readonly inclusion: readonly ["LANDSCAPE", "PORTRAIT"];
95
+ };
96
+ readonly autoWebview: {
97
+ readonly isBoolean: true;
98
+ };
99
+ readonly noReset: {
100
+ readonly isBoolean: true;
101
+ };
102
+ readonly fullReset: {
103
+ readonly isBoolean: true;
104
+ };
105
+ readonly language: {
106
+ readonly isString: true;
107
+ };
108
+ readonly locale: {
109
+ readonly isString: true;
110
+ };
111
+ readonly eventTimings: {
112
+ readonly isBoolean: true;
113
+ };
114
+ readonly printPageSourceOnFindFailure: {
115
+ readonly isBoolean: true;
116
+ };
117
+ }> implements Core<C> {
13
118
  /**
14
119
  * Make the basedriver version available so for any driver which inherits from this package, we
15
120
  * know which version of basedriver it inherited from
@@ -17,28 +122,24 @@ export class DriverCore implements Core {
17
122
  static baseVersion: any;
18
123
  /** @type {ExecuteMethodMap} */
19
124
  static executeMethodMap: ExecuteMethodMap;
20
- constructor(opts?: import("@appium/types").ServerArgs, shouldValidateCaps?: boolean);
125
+ /**
126
+ * @param {DriverOpts<C>} opts
127
+ * @param {boolean} [shouldValidateCaps]
128
+ */
129
+ constructor(opts?: DriverOpts<C>, shouldValidateCaps?: boolean | undefined);
21
130
  /**
22
131
  * @type {string?}
23
132
  */
24
133
  sessionId: string | null;
25
134
  /**
26
- * @type {import('@appium/types').DriverOpts}
135
+ * @type {import('@appium/types').DriverOpts<C>}
27
136
  */
28
- opts: import('@appium/types').DriverOpts;
137
+ opts: import('@appium/types').DriverOpts<C>;
29
138
  /**
30
139
  * @type {ServerArgs}
31
140
  */
32
141
  initialOpts: ServerArgs;
33
- /**
34
- * @type {Capabilities}
35
- */
36
- caps: Capabilities;
37
- /**
38
- * @type {W3CCapabilities}
39
- */
40
- originalCaps: W3CCapabilities;
41
- helpers: import("@appium/types").DriverHelpers;
142
+ helpers: import("@appium/types").DriverHelpers<any>;
42
143
  /**
43
144
  * basePath is used for several purposes, for example in setting up
44
145
  * proxying to other drivers, since we need to know what the base path
@@ -144,9 +245,9 @@ export class DriverCore implements Core {
144
245
  * method required by MJSONWP in order to determine if the command should
145
246
  * be proxied directly to the driver
146
247
  * @param {string} sessionId
147
- * @returns {Core | null}
248
+ * @returns {Core<C> | null}
148
249
  */
149
- driverForSession(sessionId: string): Core | null;
250
+ driverForSession(sessionId: string): Core<C> | null;
150
251
  isMjsonwpProtocol(): boolean;
151
252
  isW3CProtocol(): boolean;
152
253
  setProtocolMJSONWP(): void;
@@ -218,7 +319,57 @@ export class DriverCore implements Core {
218
319
  * @param {Driver} driver
219
320
  */
220
321
  addManagedDriver(driver: Driver): void;
221
- getManagedDrivers(): import("@appium/types").Driver[];
322
+ getManagedDrivers(): import("@appium/types").Driver<{
323
+ readonly platformName: {
324
+ readonly presence: true;
325
+ readonly isString: true;
326
+ };
327
+ readonly app: {
328
+ readonly isString: true;
329
+ };
330
+ readonly deviceName: {
331
+ readonly isString: true;
332
+ };
333
+ readonly platformVersion: {
334
+ readonly isString: true;
335
+ };
336
+ readonly newCommandTimeout: {
337
+ readonly isNumber: true;
338
+ };
339
+ readonly automationName: {
340
+ readonly isString: true;
341
+ };
342
+ readonly autoLaunch: {
343
+ readonly isBoolean: true;
344
+ };
345
+ readonly udid: {
346
+ readonly isString: true;
347
+ };
348
+ readonly orientation: {
349
+ readonly inclusion: readonly ["LANDSCAPE", "PORTRAIT"];
350
+ };
351
+ readonly autoWebview: {
352
+ readonly isBoolean: true;
353
+ };
354
+ readonly noReset: {
355
+ readonly isBoolean: true;
356
+ };
357
+ readonly fullReset: {
358
+ readonly isBoolean: true;
359
+ };
360
+ readonly language: {
361
+ readonly isString: true;
362
+ };
363
+ readonly locale: {
364
+ readonly isString: true;
365
+ };
366
+ readonly eventTimings: {
367
+ readonly isBoolean: true;
368
+ };
369
+ readonly printPageSourceOnFindFailure: {
370
+ readonly isBoolean: true;
371
+ };
372
+ }, import("@appium/types").StringRecord>[];
222
373
  clearNewCommandTimeout(): Promise<void>;
223
374
  }
224
375
  import { EventEmitter } from "events";
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../lib/basedriver/core.js"],"names":[],"mappings":"2BAwaa,OAAO,eAAe,EAAE,YAAY;8BACpC,OAAO,eAAe,EAAE,eAAe;qBACvC,OAAO,eAAe,EAAE,MAAM;mBAC9B,OAAO,eAAe,EAAE,IAAI;+BAC5B,OAAO,eAAe,EAAE,gBAAgB;yBACxC,OAAO,eAAe,EAAE,UAAU;2BAClC,OAAO,eAAe,EAAE,YAAY;2BACpC,OAAO,eAAe,EAAE,YAAY;AA5ZjD;;GAEG;AACH;IACE;;;OAGG;IACH,wBAAoC;IAEpC,+BAA+B;IAC/B,yBADW,gBAAgB,CACE;IAkG7B,qFAiBC;IAjHD;;OAEG;IACH,WAFU,MAAM,QAEC;IAEjB;;OAEG;IACH,MAFU,OAAO,eAAe,EAAE,UAAU,CAEvC;IAEL;;OAEG;IACH,aAFU,UAAU,CAER;IAEZ;;OAEG;IACH,MAFU,YAAY,CAEjB;IAEL;;OAEG;IACH,cAFU,eAAe,CAEZ;IAEb,+CAAkB;IAElB;;;;;;;OAOG;IACH,iBAA6B;IAE7B,gCAA+B;IAE/B,uBAAuB;IACvB,eADW,MAAM,EAAE,CACA;IAEnB,uBAAuB;IACvB,cADW,MAAM,EAAE,CACD;IAElB,4BAA6C;IAE7C,uBAAmB;IAEnB,uBAAuB;IACvB,mBADW,MAAM,EAAE,CACI;IAEvB,uBAAuB;IACvB,sBADW,MAAM,EAAE,CACO;IAE1B,uBAAuB;IACvB,gBADW,MAAM,EAAE,CACC;IAEpB,8BAA8B;IAC9B,gBADW,OAAO,OAAO,QACH;IAEtB,2BAA2B;IAC3B,eADW,YAAY,CACQ;IAG/B,kCAAkC;IAClC,cADW,mBAAmB,CACI;IAElC;;OAEG;IACH,MAFU,YAAY,CAEjB;IAEL;;OAEG;IACH,wCAA6B;IAE7B;;OAEG;IACH,oBAFU,OAAO,CAEE;IAEnB;;OAEG;IACH,wCAAqC;IAErC;;;;;OAKG;IACH,8BAAgC;IAqBhC,gDAEC;IAED;;;;;;;;OAQG;IACH,wCAJqB,GAAG,EAAE,KAAK,IAAI,QAMlC;IAED;;;;;;;OAOG;IACH,0CAEC;IAED;;;;;;;;;;OAUG;IACH,sCAEC;IAMD,yDAEC;IAED;;;OAGG;IACH,oBAFW,MAAM,QAgBhB;IAED;;;OAGG;IACH,yBAEC;IAED;;;;;OAKG;IACH,+CAFa,OAAO,CAKnB;IAED;;;;;OAKG;IACH,4BAHW,MAAM,GACJ,IAAI,GAAG,IAAI,CAIvB;IAED,6BAEC;IAED,yBAEC;IAED,2BAEC;IADC,6BAAiC;IAGnC,uBAEC;IAED;;;;;;OAMG;IACH,uBAJW,MAAM,WAuBhB;IAED;;;;;;OAMG;IACH,2BAHW,MAAM,QAKhB;IAED;;;;;OAKG;IACH,2BAFW,MAAM,QAYhB;IAED;;;;OAIG;IACH,kCAHW,MAAM,0CAgBhB;IAED;;;;OAIG;IACH,6CAFa,OAAO,CAInB;IAED;;;;OAIG;IACH,6BAHW,MAAM,GACJ,OAAO,eAAe,EAAE,YAAY,EAAE,CAIlD;IAED;;;;OAIG;IACH,0CAFa,OAAO,CAInB;IAED;;;;;;;;;;;;OAYG;IACH,+BATW,MAAM,UAGN,OAAO,eAAe,EAAE,UAAU,OAClC,MAAM,SACN,GAAG,GAED,OAAO,CAoBnB;IAED;;;OAGG;IACH,yBAFW,MAAM,QAIhB;IAED,sDAEC;IAED,wCAKC;CACF"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../lib/basedriver/core.js"],"names":[],"mappings":"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"}
@@ -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
  });
@@ -27,6 +25,8 @@ var _deviceSettings = _interopRequireDefault(require("./device-settings"));
27
25
 
28
26
  var _helpers = _interopRequireDefault(require("./helpers"));
29
27
 
28
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
+
30
30
  const {
31
31
  version: BASEDRIVER_VER
32
32
  } = _support.fs.readPackageJsonFrom(__dirname);
@@ -40,8 +40,6 @@ class DriverCore {
40
40
  sessionId = null;
41
41
  opts;
42
42
  initialOpts;
43
- caps;
44
- originalCaps;
45
43
  helpers = _helpers.default;
46
44
  basePath = _constants.DEFAULT_BASE_PATH;
47
45
  relaxedSecurityEnabled = false;
@@ -68,7 +66,7 @@ class DriverCore {
68
66
  this.opts = opts;
69
67
  this.opts.tmpDir = this.opts.tmpDir || process.env.APPIUM_TMP_DIR || _os.default.tmpdir();
70
68
  this.shouldValidateCaps = shouldValidateCaps;
71
- this.initialOpts = _lodash.default.cloneDeep(this.opts);
69
+ this.initialOpts = _lodash.default.cloneDeep(opts);
72
70
  this.sessionId = null;
73
71
  }
74
72
 
@@ -237,4 +235,4 @@ class DriverCore {
237
235
  }
238
236
 
239
237
  exports.DriverCore = DriverCore;
240
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ2ZXJzaW9uIiwiQkFTRURSSVZFUl9WRVIiLCJmcyIsInJlYWRQYWNrYWdlSnNvbkZyb20iLCJfX2Rpcm5hbWUiLCJORVdfQ09NTUFORF9USU1FT1VUX01TIiwiT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCIsIkRyaXZlckNvcmUiLCJiYXNlVmVyc2lvbiIsImV4ZWN1dGVNZXRob2RNYXAiLCJzZXNzaW9uSWQiLCJvcHRzIiwiaW5pdGlhbE9wdHMiLCJjYXBzIiwib3JpZ2luYWxDYXBzIiwiaGVscGVycyIsImJhc2VQYXRoIiwiREVGQVVMVF9CQVNFX1BBVEgiLCJyZWxheGVkU2VjdXJpdHlFbmFibGVkIiwiYWxsb3dJbnNlY3VyZSIsImRlbnlJbnNlY3VyZSIsIm5ld0NvbW1hbmRUaW1lb3V0TXMiLCJpbXBsaWNpdFdhaXRNcyIsImxvY2F0b3JTdHJhdGVnaWVzIiwid2ViTG9jYXRvclN0cmF0ZWdpZXMiLCJtYW5hZ2VkRHJpdmVycyIsIm5vQ29tbWFuZFRpbWVyIiwiX2V2ZW50SGlzdG9yeSIsImNvbW1hbmRzIiwiZXZlbnRFbWl0dGVyIiwiRXZlbnRFbWl0dGVyIiwiX2xvZyIsInNodXRkb3duVW5leHBlY3RlZGx5Iiwic2hvdWxkVmFsaWRhdGVDYXBzIiwiY29tbWFuZHNRdWV1ZUd1YXJkIiwiQXN5bmNMb2NrIiwic2V0dGluZ3MiLCJEZXZpY2VTZXR0aW5ncyIsImNvbnN0cnVjdG9yIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiZ2VuZXJhdGVEcml2ZXJMb2dQcmVmaXgiLCJ0bXBEaXIiLCJwcm9jZXNzIiwiZW52IiwiQVBQSVVNX1RNUF9ESVIiLCJvcyIsInRtcGRpciIsIl8iLCJjbG9uZURlZXAiLCJsb2ciLCJvblVuZXhwZWN0ZWRTaHV0ZG93biIsImhhbmRsZXIiLCJvbiIsImRyaXZlckRhdGEiLCJpc0NvbW1hbmRzUXVldWVFbmFibGVkIiwiZXZlbnRIaXN0b3J5IiwibG9nRXZlbnQiLCJldmVudE5hbWUiLCJFcnJvciIsInRzIiwiRGF0ZSIsIm5vdyIsImxvZ1RpbWUiLCJ0b1RpbWVTdHJpbmciLCJwdXNoIiwiZGVidWciLCJnZXRTdGF0dXMiLCJzZXNzaW9uRXhpc3RzIiwiZHJpdmVyRm9yU2Vzc2lvbiIsImlzTWpzb253cFByb3RvY29sIiwicHJvdG9jb2wiLCJQUk9UT0NPTFMiLCJNSlNPTldQIiwiaXNXM0NQcm90b2NvbCIsIlczQyIsInNldFByb3RvY29sTUpTT05XUCIsInNldFByb3RvY29sVzNDIiwiaXNGZWF0dXJlRW5hYmxlZCIsIm5hbWUiLCJpbmNsdWRlcyIsImVuc3VyZUZlYXR1cmVFbmFibGVkIiwiYXNzZXJ0RmVhdHVyZUVuYWJsZWQiLCJ2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneSIsInN0cmF0ZWd5Iiwid2ViQ29udGV4dCIsInZhbGlkU3RyYXRlZ2llcyIsImpvaW4iLCJjb25jYXQiLCJlcnJvcnMiLCJJbnZhbGlkU2VsZWN0b3JFcnJvciIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJjYW5Qcm94eSIsInByb3h5Um91dGVJc0F2b2lkZWQiLCJtZXRob2QiLCJ1cmwiLCJib2R5IiwiYXZvaWRTY2hlbWEiLCJpc0FycmF5IiwibGVuZ3RoIiwiYXZvaWRNZXRob2QiLCJhdm9pZFBhdGhSZWdleCIsImlzUmVnRXhwIiwibm9ybWFsaXplZFVybCIsInJlcGxhY2UiLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJ0ZXN0IiwiYWRkTWFuYWdlZERyaXZlciIsImRyaXZlciIsImdldE1hbmFnZWREcml2ZXJzIiwiY2xlYXJOZXdDb21tYW5kVGltZW91dCIsImNsZWFyVGltZW91dCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2NvcmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlcXVpcmUtYXdhaXQgKi9cblxuaW1wb3J0IHtmcywgbG9nZ2VyfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCB7RXZlbnRFbWl0dGVyfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQge0RFRkFVTFRfQkFTRV9QQVRILCBQUk9UT0NPTFN9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge2Vycm9yc30gZnJvbSAnLi4vcHJvdG9jb2wnO1xuaW1wb3J0IERldmljZVNldHRpbmdzIGZyb20gJy4vZGV2aWNlLXNldHRpbmdzJztcbmltcG9ydCBoZWxwZXJzIGZyb20gJy4vaGVscGVycyc7XG5cbi8vIGZvciBjb21wYXQgd2l0aCBydW5uaW5nIHRlc3RzIHRyYW5zcGlsZWQgYW5kIGluLXBsYWNlXG5jb25zdCB7dmVyc2lvbjogQkFTRURSSVZFUl9WRVJ9ID0gZnMucmVhZFBhY2thZ2VKc29uRnJvbShfX2Rpcm5hbWUpO1xuXG5jb25zdCBORVdfQ09NTUFORF9USU1FT1VUX01TID0gNjAgKiAxMDAwO1xuXG5jb25zdCBPTl9VTkVYUEVDVEVEX1NIVVRET1dOX0VWRU5UID0gJ29uVW5leHBlY3RlZFNodXRkb3duJztcbi8qKlxuICogQGltcGxlbWVudHMge0NvcmV9XG4gKi9cbmNsYXNzIERyaXZlckNvcmUge1xuICAvKipcbiAgICogTWFrZSB0aGUgYmFzZWRyaXZlciB2ZXJzaW9uIGF2YWlsYWJsZSBzbyBmb3IgYW55IGRyaXZlciB3aGljaCBpbmhlcml0cyBmcm9tIHRoaXMgcGFja2FnZSwgd2VcbiAgICoga25vdyB3aGljaCB2ZXJzaW9uIG9mIGJhc2Vkcml2ZXIgaXQgaW5oZXJpdGVkIGZyb21cbiAgICovXG4gIHN0YXRpYyBiYXNlVmVyc2lvbiA9IEJBU0VEUklWRVJfVkVSO1xuXG4gIC8qKiBAdHlwZSB7RXhlY3V0ZU1ldGhvZE1hcH0gKi9cbiAgc3RhdGljIGV4ZWN1dGVNZXRob2RNYXAgPSB7fTtcblxuICAvKipcbiAgICogQHR5cGUge3N0cmluZz99XG4gICAqL1xuICBzZXNzaW9uSWQgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRHJpdmVyT3B0c31cbiAgICovXG4gIG9wdHM7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtTZXJ2ZXJBcmdzfVxuICAgKi9cbiAgaW5pdGlhbE9wdHM7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtDYXBhYmlsaXRpZXN9XG4gICAqL1xuICBjYXBzO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7VzNDQ2FwYWJpbGl0aWVzfVxuICAgKi9cbiAgb3JpZ2luYWxDYXBzO1xuXG4gIGhlbHBlcnMgPSBoZWxwZXJzO1xuXG4gIC8qKlxuICAgKiBiYXNlUGF0aCBpcyB1c2VkIGZvciBzZXZlcmFsIHB1cnBvc2VzLCBmb3IgZXhhbXBsZSBpbiBzZXR0aW5nIHVwXG4gICAqIHByb3h5aW5nIHRvIG90aGVyIGRyaXZlcnMsIHNpbmNlIHdlIG5lZWQgdG8ga25vdyB3aGF0IHRoZSBiYXNlIHBhdGhcbiAgICogb2YgYW55IGluY29taW5nIHJlcXVlc3QgbWlnaHQgbG9vayBsaWtlLiBXZSBzZXQgaXQgdG8gdGhlIGRlZmF1bHRcbiAgICogaW5pdGlhbGx5IGJ1dCBpdCBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIGFueSBhY3R1YWwgcHJvZ3JhbVxuICAgKiBleGVjdXRpb24gYnkgdGhlIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiwgd2hpY2ggaXMgbmVjZXNzYXJpbHkgcnVuIGFzXG4gICAqIHRoZSBlbnRyeXBvaW50IGZvciBhbnkgQXBwaXVtIHNlcnZlclxuICAgKi9cbiAgYmFzZVBhdGggPSBERUZBVUxUX0JBU0VfUEFUSDtcblxuICByZWxheGVkU2VjdXJpdHlFbmFibGVkID0gZmFsc2U7XG5cbiAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgYWxsb3dJbnNlY3VyZSA9IFtdO1xuXG4gIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gIGRlbnlJbnNlY3VyZSA9IFtdO1xuXG4gIG5ld0NvbW1hbmRUaW1lb3V0TXMgPSBORVdfQ09NTUFORF9USU1FT1VUX01TO1xuXG4gIGltcGxpY2l0V2FpdE1zID0gMDtcblxuICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICBsb2NhdG9yU3RyYXRlZ2llcyA9IFtdO1xuXG4gIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gIHdlYkxvY2F0b3JTdHJhdGVnaWVzID0gW107XG5cbiAgLyoqIEB0eXBlIHtEcml2ZXJbXX0gKi9cbiAgbWFuYWdlZERyaXZlcnMgPSBbXTtcblxuICAvKiogQHR5cGUge05vZGVKUy5UaW1lb3V0P30gKi9cbiAgbm9Db21tYW5kVGltZXIgPSBudWxsO1xuXG4gIC8qKiBAdHlwZSB7RXZlbnRIaXN0b3J5fSAqL1xuICBfZXZlbnRIaXN0b3J5ID0ge2NvbW1hbmRzOiBbXX07XG5cbiAgLy8gdXNlZCB0byBoYW5kbGUgZHJpdmVyIGV2ZW50c1xuICAvKiogQHR5cGUge05vZGVKUy5FdmVudEVtaXR0ZXJ9ICovXG4gIGV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogQHR5cGUge0FwcGl1bUxvZ2dlcn1cbiAgICovXG4gIF9sb2c7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHNodXRkb3duVW5leHBlY3RlZGx5ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgc2hvdWxkVmFsaWRhdGVDYXBzO1xuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBjb21tYW5kc1F1ZXVlR3VhcmQgPSBuZXcgQXN5bmNMb2NrKCk7XG5cbiAgLyoqXG4gICAqIHNldHRpbmdzIHNob3VsZCBiZSBpbnN0YW50aWF0ZWQgYnkgZHJpdmVycyB3aGljaCBleHRlbmQgQmFzZURyaXZlciwgYnV0XG4gICAqIHdlIHNldCBpdCB0byBhbiBlbXB0eSBEZXZpY2VTZXR0aW5ncyBpbnN0YW5jZSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZVxuICAgKiBkZWZhdWx0IHNldHRpbmdzIGFyZSBhcHBsaWVkIGV2ZW4gaWYgYW4gZXh0ZW5kaW5nIGRyaXZlciBkb2Vzbid0IHV0aWxpemVcbiAgICogdGhlIHNldHRpbmdzIGZ1bmN0aW9uYWxpdHkgaXRzZWxmXG4gICAqL1xuICBzZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncygpO1xuXG4gIGNvbnN0cnVjdG9yKG9wdHMgPSAvKiogQHR5cGUge1NlcnZlckFyZ3N9ICovICh7fSksIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICB0aGlzLl9sb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKGhlbHBlcnMuZ2VuZXJhdGVEcml2ZXJMb2dQcmVmaXgodGhpcykpO1xuXG4gICAgLy8gc2V0dXAgc3RhdGVcbiAgICB0aGlzLm9wdHMgPSBvcHRzO1xuXG4gICAgLy8gdXNlIGEgY3VzdG9tIHRtcCBkaXIgdG8gYXZvaWQgbG9zaW5nIGRhdGEgYW5kIGFwcCB3aGVuIGNvbXB1dGVyIGlzXG4gICAgLy8gcmVzdGFydGVkXG4gICAgdGhpcy5vcHRzLnRtcERpciA9IHRoaXMub3B0cy50bXBEaXIgfHwgcHJvY2Vzcy5lbnYuQVBQSVVNX1RNUF9ESVIgfHwgb3MudG1wZGlyKCk7XG5cbiAgICAvLyBiYXNlLWRyaXZlciBpbnRlcm5hbHNcbiAgICB0aGlzLnNob3VsZFZhbGlkYXRlQ2FwcyA9IHNob3VsZFZhbGlkYXRlQ2FwcztcblxuICAgIC8vIGtlZXBpbmcgdHJhY2sgb2YgaW5pdGlhbCBvcHRzXG4gICAgdGhpcy5pbml0aWFsT3B0cyA9IF8uY2xvbmVEZWVwKHRoaXMub3B0cyk7XG5cbiAgICB0aGlzLnNlc3Npb25JZCA9IG51bGw7XG4gIH1cblxuICBnZXQgbG9nKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2c7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgY2FsbGJhY2sgaGFuZGxlciBpZiBuZWVkZWQgdG8gZXhlY3V0ZSBhIGN1c3RvbSBwaWVjZSBvZiBjb2RlXG4gICAqIHdoZW4gdGhlIGRyaXZlciBpcyBzaHV0IGRvd24gdW5leHBlY3RlZGx5LiBNdWx0aXBsZSBjYWxscyB0byB0aGlzIG1ldGhvZFxuICAgKiB3aWxsIGNhdXNlIHRoZSBoYW5kbGVyIHRvIGJlIGV4ZWN1dGVkIG11dGlwbGUgdGltZXNcbiAgICpcbiAgICogQHBhcmFtIHsoLi4uYXJnczogYW55W10pID0+IHZvaWR9IGhhbmRsZXIgVGhlIGNvZGUgdG8gYmUgZXhlY3V0ZWQgb24gdW5leHBlY3RlZCBzaHV0ZG93bi5cbiAgICogVGhlIGZ1bmN0aW9uIG1heSBhY2NlcHQgb25lIGFyZ3VtZW50LCB3aGljaCBpcyB0aGUgYWN0dWFsIGVycm9yIGluc3RhbmNlLCB3aGljaFxuICAgKiBjYXVzZWQgdGhlIGRyaXZlciB0byBzaHV0IGRvd24uXG4gICAqL1xuICBvblVuZXhwZWN0ZWRTaHV0ZG93bihoYW5kbGVyKSB7XG4gICAgdGhpcy5ldmVudEVtaXR0ZXIub24oT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCwgaGFuZGxlcik7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IEFwcGl1bURyaXZlciB0byBzdG9yZSB0aGUgZGF0YSBvZiB0aGVcbiAgICogc3BlY2lmaWMgZHJpdmVyIHNlc3Npb25zLiBUaGlzIGRhdGEgY2FuIGJlIGxhdGVyIHVzZWQgdG8gYWRqdXN0XG4gICAqIHByb3BlcnRpZXMgZm9yIGRyaXZlciBpbnN0YW5jZXMgcnVubmluZyBpbiBwYXJhbGxlbC5cbiAgICogT3ZlcnJpZGUgaXQgaW4gaW5oZXJpdGVkIGRyaXZlciBjbGFzc2VzIGlmIG5lY2Vzc2FyeS5cbiAgICpcbiAgICogQHJldHVybiB7UmVjb3JkPHN0cmluZyx1bmtub3duPn0gRHJpdmVyIHByb3BlcnRpZXMgbWFwcGluZ1xuICAgKi9cbiAgZ2V0IGRyaXZlckRhdGEoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgY29udHJvbHMgdGhlIHdheSB7I2V4ZWN1dGVDb21tYW5kfSBtZXRob2RcbiAgICogaGFuZGxlcyBuZXcgZHJpdmVyIGNvbW1hbmRzIHJlY2VpdmVkIGZyb20gdGhlIGNsaWVudC5cbiAgICogT3ZlcnJpZGUgaXQgZm9yIGluaGVyaXRlZCBjbGFzc2VzIG9ubHkgaW4gc3BlY2lhbCBjYXNlcy5cbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gSWYgdGhlIHJldHVybmVkIHZhbHVlIGlzIHRydWUgKGRlZmF1bHQpIHRoZW4gYWxsIHRoZSBjb21tYW5kc1xuICAgKiAgIHJlY2VpdmVkIGJ5IHRoZSBwYXJ0aWN1bGFyIGRyaXZlciBpbnN0YW5jZSBhcmUgZ29pbmcgdG8gYmUgcHV0IGludG8gdGhlIHF1ZXVlLFxuICAgKiAgIHNvIGVhY2ggZm9sbG93aW5nIGNvbW1hbmQgd2lsbCBub3QgYmUgZXhlY3V0ZWQgdW50aWwgdGhlIHByZXZpb3VzIGNvbW1hbmRcbiAgICogICBleGVjdXRpb24gaXMgY29tcGxldGVkLiBGYWxzZSB2YWx1ZSBkaXNhYmxlcyB0aGF0IHF1ZXVlLCBzbyBlYWNoIGRyaXZlciBjb21tYW5kXG4gICAqICAgaXMgZXhlY3V0ZWQgaW5kZXBlbmRlbnRseSBhbmQgZG9lcyBub3Qgd2FpdCBmb3IgYW55dGhpbmcuXG4gICAqL1xuICBnZXQgaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qXG4gICAqIG1ha2UgZXZlbnRIaXN0b3J5IGEgcHJvcGVydHkgYW5kIHJldHVybiBhIGNsb25lZCBvYmplY3Qgc28gYSBjb25zdW1lciBjYW4ndFxuICAgKiBpbmFkdmVydGVudGx5IGNoYW5nZSBkYXRhIG91dHNpZGUgb2YgbG9nRXZlbnRcbiAgICovXG4gIGdldCBldmVudEhpc3RvcnkoKSB7XG4gICAgcmV0dXJuIF8uY2xvbmVEZWVwKHRoaXMuX2V2ZW50SGlzdG9yeSk7XG4gIH1cblxuICAvKipcbiAgICogQVBJIG1ldGhvZCBmb3IgZHJpdmVyIGRldmVsb3BlcnMgdG8gbG9nIHRpbWluZ3MgZm9yIGltcG9ydGFudCBldmVudHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICAgKi9cbiAgbG9nRXZlbnQoZXZlbnROYW1lKSB7XG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2NvbW1hbmRzJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbG9nIGNvbW1hbmRzIGRpcmVjdGx5Jyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZXZlbnROYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGV2ZW50TmFtZSAke2V2ZW50TmFtZX1gKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9ldmVudEhpc3RvcnlbZXZlbnROYW1lXSkge1xuICAgICAgdGhpcy5fZXZlbnRIaXN0b3J5W2V2ZW50TmFtZV0gPSBbXTtcbiAgICB9XG4gICAgY29uc3QgdHMgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGxvZ1RpbWUgPSBuZXcgRGF0ZSh0cykudG9UaW1lU3RyaW5nKCk7XG4gICAgdGhpcy5fZXZlbnRIaXN0b3J5W2V2ZW50TmFtZV0ucHVzaCh0cyk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEV2ZW50ICcke2V2ZW50TmFtZX0nIGxvZ2dlZCBhdCAke3RzfSAoJHtsb2dUaW1lfSlgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZGVuIGluIGFwcGl1bSBkcml2ZXIsIGJ1dCBoZXJlIHNvIHRoYXQgaW5kaXZpZHVhbCBkcml2ZXJzIGNhbiBiZVxuICAgKiB0ZXN0ZWQgd2l0aCBjbGllbnRzIHRoYXQgcG9sbFxuICAgKi9cbiAgYXN5bmMgZ2V0U3RhdHVzKCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtZXRob2QgcmVxdWlyZWQgYnkgTUpTT05XUCBpbiBvcmRlciB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBzaG91bGRcbiAgICogcmVzcG9uZCB3aXRoIGFuIGludmFsaWQgc2Vzc2lvbiByZXNwb25zZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3Nlc3Npb25JZF1cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzZXNzaW9uRXhpc3RzKHNlc3Npb25JZCkge1xuICAgIGlmICghc2Vzc2lvbklkKSByZXR1cm4gZmFsc2U7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICByZXR1cm4gc2Vzc2lvbklkID09PSB0aGlzLnNlc3Npb25JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBtZXRob2QgcmVxdWlyZWQgYnkgTUpTT05XUCBpbiBvcmRlciB0byBkZXRlcm1pbmUgaWYgdGhlIGNvbW1hbmQgc2hvdWxkXG4gICAqIGJlIHByb3hpZWQgZGlyZWN0bHkgdG8gdGhlIGRyaXZlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkXG4gICAqIEByZXR1cm5zIHtDb3JlIHwgbnVsbH1cbiAgICovXG4gIGRyaXZlckZvclNlc3Npb24oc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpc01qc29ud3BQcm90b2NvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm90b2NvbCA9PT0gUFJPVE9DT0xTLk1KU09OV1A7XG4gIH1cblxuICBpc1czQ1Byb3RvY29sKCkge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sID09PSBQUk9UT0NPTFMuVzNDO1xuICB9XG5cbiAgc2V0UHJvdG9jb2xNSlNPTldQKCkge1xuICAgIHRoaXMucHJvdG9jb2wgPSBQUk9UT0NPTFMuTUpTT05XUDtcbiAgfVxuXG4gIHNldFByb3RvY29sVzNDKCkge1xuICAgIHRoaXMucHJvdG9jb2wgPSBQUk9UT0NPTFMuVzNDO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgYSBnaXZlbiBmZWF0dXJlIGlzIGVuYWJsZWQgdmlhIGl0cyBuYW1lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gbmFtZSBvZiBmZWF0dXJlL2NvbW1hbmRcbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59XG4gICAqL1xuICBpc0ZlYXR1cmVFbmFibGVkKG5hbWUpIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGV4cGxpY2l0bHkgZGVuaWVkIHRoaXMgZmVhdHVyZSwgcmV0dXJuIGZhbHNlIGltbWVkaWF0ZWx5XG4gICAgaWYgKHRoaXMuZGVueUluc2VjdXJlICYmIF8uaW5jbHVkZXModGhpcy5kZW55SW5zZWN1cmUsIG5hbWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gaWYgd2Ugc3BlY2lmaWNhbGx5IGhhdmUgYWxsb3dlZCB0aGUgZmVhdHVyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAodGhpcy5hbGxvd0luc2VjdXJlICYmIF8uaW5jbHVkZXModGhpcy5hbGxvd0luc2VjdXJlLCBuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gb3RoZXJ3aXNlLCBpZiB3ZSd2ZSBnbG9iYWxseSBhbGxvd2VkIGluc2VjdXJlIGZlYXR1cmVzIGFuZCBub3QgZGVuaWVkXG4gICAgLy8gdGhpcyBvbmUsIHJldHVybiB0cnVlXG4gICAgaWYgKHRoaXMucmVsYXhlZFNlY3VyaXR5RW5hYmxlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBhbGxvd2VkIGFueXRoaW5nIGluc2VjdXJlLCB0aGVuIHJlamVjdFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlcnQgdGhhdCBhIGdpdmVuIGZlYXR1cmUgaXMgZW5hYmxlZCBhbmQgdGhyb3cgYSBoZWxwZnVsIGVycm9yIGlmIGl0J3NcbiAgICogbm90XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gbmFtZSBvZiBmZWF0dXJlL2NvbW1hbmRcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIGVuc3VyZUZlYXR1cmVFbmFibGVkKG5hbWUpIHtcbiAgICB0aGlzLmFzc2VydEZlYXR1cmVFbmFibGVkKG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2VydCB0aGF0IGEgZ2l2ZW4gZmVhdHVyZSBpcyBlbmFibGVkIGFuZCB0aHJvdyBhIGhlbHBmdWwgZXJyb3IgaWYgaXQnc1xuICAgKiBub3RcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBuYW1lIG9mIGZlYXR1cmUvY29tbWFuZFxuICAgKi9cbiAgYXNzZXJ0RmVhdHVyZUVuYWJsZWQobmFtZSkge1xuICAgIGlmICghdGhpcy5pc0ZlYXR1cmVFbmFibGVkKG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQb3RlbnRpYWxseSBpbnNlY3VyZSBmZWF0dXJlICcke25hbWV9JyBoYXMgbm90IGJlZW4gYCArXG4gICAgICAgICAgYGVuYWJsZWQuIElmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUgYW5kIGFjY2VwdCBgICtcbiAgICAgICAgICBgdGhlIHNlY3VyaXR5IHJhbWlmaWNhdGlvbnMsIHBsZWFzZSBkbyBzbyBieSBmb2xsb3dpbmcgYCArXG4gICAgICAgICAgYHRoZSBkb2N1bWVudGVkIGluc3RydWN0aW9ucyBhdCBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtYCArXG4gICAgICAgICAgYC9hcHBpdW0vYmxvYi9tYXN0ZXIvZG9jcy9lbi93cml0aW5nLXJ1bm5pbmctYXBwaXVtL3NlY3VyaXR5Lm1kYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmF0ZWd5XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3dlYkNvbnRleHRdXG4gICAqL1xuICB2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneShzdHJhdGVneSwgd2ViQ29udGV4dCA9IGZhbHNlKSB7XG4gICAgbGV0IHZhbGlkU3RyYXRlZ2llcyA9IHRoaXMubG9jYXRvclN0cmF0ZWdpZXM7XG4gICAgdGhpcy5sb2cuZGVidWcoYFZhbGlkIGxvY2F0b3Igc3RyYXRlZ2llcyBmb3IgdGhpcyByZXF1ZXN0OiAke3ZhbGlkU3RyYXRlZ2llcy5qb2luKCcsICcpfWApO1xuXG4gICAgaWYgKHdlYkNvbnRleHQpIHtcbiAgICAgIHZhbGlkU3RyYXRlZ2llcyA9IHZhbGlkU3RyYXRlZ2llcy5jb25jYXQodGhpcy53ZWJMb2NhdG9yU3RyYXRlZ2llcyk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmluY2x1ZGVzKHZhbGlkU3RyYXRlZ2llcywgc3RyYXRlZ3kpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRTZWxlY3RvckVycm9yKFxuICAgICAgICBgTG9jYXRvciBTdHJhdGVneSAnJHtzdHJhdGVneX0nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgc2Vzc2lvbmBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc2Vzc2lvbklkXVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHByb3h5QWN0aXZlKHNlc3Npb25JZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Sb3V0ZU1hdGNoZXJbXX1cbiAgICovXG4gIGdldFByb3h5QXZvaWRMaXN0KHNlc3Npb25JZCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3Nlc3Npb25JZF1cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBjYW5Qcm94eShzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBhIGdpdmVuIGNvbW1hbmQgcm91dGUgKGV4cHJlc3NlZCBhcyBtZXRob2QgYW5kIHVybCkgc2hvdWxkIG5vdCBiZVxuICAgKiBwcm94aWVkIGFjY29yZGluZyB0byB0aGlzIGRyaXZlclxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkIC0gdGhlIGN1cnJlbnQgc2Vzc2lvbklkIChpbiBjYXNlIHRoZSBkcml2ZXIgcnVuc1xuICAgKiBtdWx0aXBsZSBzZXNzaW9uIGlkcyBhbmQgcmVxdWlyZXMgaXQpLiBUaGlzIGlzIG5vdCB1c2VkIGluIHRoaXMgbWV0aG9kIGJ1dFxuICAgKiBzaG91bGQgYmUgbWFkZSBhdmFpbGFibGUgdG8gb3ZlcnJpZGRlbiBtZXRob2RzLlxuICAgKiBAcGFyYW0ge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkhUVFBNZXRob2R9IG1ldGhvZCAtIEhUVFAgbWV0aG9kIG9mIHRoZSByb3V0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gdXJsIG9mIHRoZSByb3V0ZVxuICAgKiBAcGFyYW0ge2FueX0gW2JvZHldIC0gd2ViZHJpdmVyIHJlcXVlc3QgYm9keVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB3aGV0aGVyIHRoZSByb3V0ZSBzaG91bGQgYmUgYXZvaWRlZFxuICAgKi9cbiAgcHJveHlSb3V0ZUlzQXZvaWRlZChzZXNzaW9uSWQsIG1ldGhvZCwgdXJsLCBib2R5KSB7XG4gICAgZm9yIChsZXQgYXZvaWRTY2hlbWEgb2YgdGhpcy5nZXRQcm94eUF2b2lkTGlzdChzZXNzaW9uSWQpKSB7XG4gICAgICBpZiAoIV8uaXNBcnJheShhdm9pZFNjaGVtYSkgfHwgYXZvaWRTY2hlbWEubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUHJveHkgYXZvaWRhbmNlIG11c3QgYmUgYSBsaXN0IG9mIHBhaXJzJyk7XG4gICAgICB9XG4gICAgICBsZXQgW2F2b2lkTWV0aG9kLCBhdm9pZFBhdGhSZWdleF0gPSBhdm9pZFNjaGVtYTtcbiAgICAgIGlmICghXy5pbmNsdWRlcyhbJ0dFVCcsICdQT1NUJywgJ0RFTEVURSddLCBhdm9pZE1ldGhvZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgcHJveHkgYXZvaWRhbmNlIG1ldGhvZCAnJHthdm9pZE1ldGhvZH0nYCk7XG4gICAgICB9XG4gICAgICBpZiAoIV8uaXNSZWdFeHAoYXZvaWRQYXRoUmVnZXgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUHJveHkgYXZvaWRhbmNlIHBhdGggbXVzdCBiZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuICAgICAgfVxuICAgICAgbGV0IG5vcm1hbGl6ZWRVcmwgPSB1cmwucmVwbGFjZShuZXcgUmVnRXhwKGBeJHtfLmVzY2FwZVJlZ0V4cCh0aGlzLmJhc2VQYXRoKX1gKSwgJycpO1xuICAgICAgaWYgKGF2b2lkTWV0aG9kID09PSBtZXRob2QgJiYgYXZvaWRQYXRoUmVnZXgudGVzdChub3JtYWxpemVkVXJsKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RHJpdmVyfSBkcml2ZXJcbiAgICovXG4gIGFkZE1hbmFnZWREcml2ZXIoZHJpdmVyKSB7XG4gICAgdGhpcy5tYW5hZ2VkRHJpdmVycy5wdXNoKGRyaXZlcik7XG4gIH1cblxuICBnZXRNYW5hZ2VkRHJpdmVycygpIHtcbiAgICByZXR1cm4gdGhpcy5tYW5hZ2VkRHJpdmVycztcbiAgfVxuXG4gIGFzeW5jIGNsZWFyTmV3Q29tbWFuZFRpbWVvdXQoKSB7XG4gICAgaWYgKHRoaXMubm9Db21tYW5kVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLm5vQ29tbWFuZFRpbWVyKTtcbiAgICAgIHRoaXMubm9Db21tYW5kVGltZXIgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQge0RyaXZlckNvcmV9O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5DYXBhYmlsaXRpZXN9IENhcGFiaWxpdGllc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlczQ0NhcGFiaWxpdGllc30gVzNDQ2FwYWJpbGl0aWVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRHJpdmVyfSBEcml2ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Db3JlfSBDb3JlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRXhlY3V0ZU1ldGhvZE1hcH0gRXhlY3V0ZU1ldGhvZE1hcFxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlNlcnZlckFyZ3N9IFNlcnZlckFyZ3NcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5FdmVudEhpc3Rvcnl9IEV2ZW50SGlzdG9yeVxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkFwcGl1bUxvZ2dlcn0gQXBwaXVtTG9nZ2VyXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNO0VBQUNBLE9BQU8sRUFBRUM7QUFBVixJQUE0QkMsV0FBQSxDQUFHQyxtQkFBSCxDQUF1QkMsU0FBdkIsQ0FBbEM7O0FBRUEsTUFBTUMsc0JBQXNCLEdBQUcsS0FBSyxJQUFwQztBQUVBLE1BQU1DLDRCQUE0QixHQUFHLHNCQUFyQzs7QUFJQSxNQUFNQyxVQUFOLENBQWlCO0VBS0csT0FBWEMsV0FBVyxHQUFHUCxjQUFIO0VBR0ssT0FBaEJRLGdCQUFnQixHQUFHLEVBQUg7RUFLdkJDLFNBQVMsR0FBRyxJQUFIO0VBS1RDLElBQUk7RUFLSkMsV0FBVztFQUtYQyxJQUFJO0VBS0pDLFlBQVk7RUFFWkMsT0FBTyxHQUFHQSxnQkFBSDtFQVVQQyxRQUFRLEdBQUdDLDRCQUFIO0VBRVJDLHNCQUFzQixHQUFHLEtBQUg7RUFHdEJDLGFBQWEsR0FBRyxFQUFIO0VBR2JDLFlBQVksR0FBRyxFQUFIO0VBRVpDLG1CQUFtQixHQUFHaEIsc0JBQUg7RUFFbkJpQixjQUFjLEdBQUcsQ0FBSDtFQUdkQyxpQkFBaUIsR0FBRyxFQUFIO0VBR2pCQyxvQkFBb0IsR0FBRyxFQUFIO0VBR3BCQyxjQUFjLEdBQUcsRUFBSDtFQUdkQyxjQUFjLEdBQUcsSUFBSDtFQUdkQyxhQUFhLEdBQUc7SUFBQ0MsUUFBUSxFQUFFO0VBQVgsQ0FBSDtFQUliQyxZQUFZLEdBQUcsSUFBSUMsb0JBQUosRUFBSDtFQUtaQyxJQUFJO0VBS0pDLG9CQUFvQixHQUFHLEtBQUg7RUFLcEJDLGtCQUFrQjtFQUtsQkMsa0JBQWtCLEdBQUcsSUFBSUMsa0JBQUosRUFBSDtFQVFsQkMsUUFBUSxHQUFHLElBQUlDLHVCQUFKLEVBQUg7O0VBRVJDLFdBQVcsQ0FBQzNCLElBQUksR0FBOEIsRUFBbkMsRUFBd0NzQixrQkFBa0IsR0FBRyxJQUE3RCxFQUFtRTtJQUM1RSxLQUFLRixJQUFMLEdBQVlRLGVBQUEsQ0FBT0MsU0FBUCxDQUFpQnpCLGdCQUFBLENBQVEwQix1QkFBUixDQUFnQyxJQUFoQyxDQUFqQixDQUFaO0lBR0EsS0FBSzlCLElBQUwsR0FBWUEsSUFBWjtJQUlBLEtBQUtBLElBQUwsQ0FBVStCLE1BQVYsR0FBbUIsS0FBSy9CLElBQUwsQ0FBVStCLE1BQVYsSUFBb0JDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxjQUFoQyxJQUFrREMsV0FBQSxDQUFHQyxNQUFILEVBQXJFO0lBR0EsS0FBS2Qsa0JBQUwsR0FBMEJBLGtCQUExQjtJQUdBLEtBQUtyQixXQUFMLEdBQW1Cb0MsZUFBQSxDQUFFQyxTQUFGLENBQVksS0FBS3RDLElBQWpCLENBQW5CO0lBRUEsS0FBS0QsU0FBTCxHQUFpQixJQUFqQjtFQUNEOztFQUVNLElBQUh3QyxHQUFHLEdBQUc7SUFDUixPQUFPLEtBQUtuQixJQUFaO0VBQ0Q7O0VBV0RvQixvQkFBb0IsQ0FBQ0MsT0FBRCxFQUFVO0lBQzVCLEtBQUt2QixZQUFMLENBQWtCd0IsRUFBbEIsQ0FBcUIvQyw0QkFBckIsRUFBbUQ4QyxPQUFuRDtFQUNEOztFQVVhLElBQVZFLFVBQVUsR0FBRztJQUNmLE9BQU8sRUFBUDtFQUNEOztFQWF5QixJQUF0QkMsc0JBQXNCLEdBQUc7SUFDM0IsT0FBTyxJQUFQO0VBQ0Q7O0VBTWUsSUFBWkMsWUFBWSxHQUFHO0lBQ2pCLE9BQU9SLGVBQUEsQ0FBRUMsU0FBRixDQUFZLEtBQUt0QixhQUFqQixDQUFQO0VBQ0Q7O0VBTUQ4QixRQUFRLENBQUNDLFNBQUQsRUFBWTtJQUNsQixJQUFJQSxTQUFTLEtBQUssVUFBbEIsRUFBOEI7TUFDNUIsTUFBTSxJQUFJQyxLQUFKLENBQVUsOEJBQVYsQ0FBTjtJQUNEOztJQUNELElBQUksT0FBT0QsU0FBUCxLQUFxQixRQUF6QixFQUFtQztNQUNqQyxNQUFNLElBQUlDLEtBQUosQ0FBVyxxQkFBb0JELFNBQVUsRUFBekMsQ0FBTjtJQUNEOztJQUNELElBQUksQ0FBQyxLQUFLL0IsYUFBTCxDQUFtQitCLFNBQW5CLENBQUwsRUFBb0M7TUFDbEMsS0FBSy9CLGFBQUwsQ0FBbUIrQixTQUFuQixJQUFnQyxFQUFoQztJQUNEOztJQUNELE1BQU1FLEVBQUUsR0FBR0MsSUFBSSxDQUFDQyxHQUFMLEVBQVg7SUFDQSxNQUFNQyxPQUFPLEdBQUcsSUFBSUYsSUFBSixDQUFTRCxFQUFULEVBQWFJLFlBQWIsRUFBaEI7O0lBQ0EsS0FBS3JDLGFBQUwsQ0FBbUIrQixTQUFuQixFQUE4Qk8sSUFBOUIsQ0FBbUNMLEVBQW5DOztJQUNBLEtBQUtWLEdBQUwsQ0FBU2dCLEtBQVQsQ0FBZ0IsVUFBU1IsU0FBVSxlQUFjRSxFQUFHLEtBQUlHLE9BQVEsR0FBaEU7RUFDRDs7RUFNYyxNQUFUSSxTQUFTLEdBQUc7SUFDaEIsT0FBTyxFQUFQO0VBQ0Q7O0VBUURDLGFBQWEsQ0FBQzFELFNBQUQsRUFBWTtJQUN2QixJQUFJLENBQUNBLFNBQUwsRUFBZ0IsT0FBTyxLQUFQO0lBQ2hCLE9BQU9BLFNBQVMsS0FBSyxLQUFLQSxTQUExQjtFQUNEOztFQVFEMkQsZ0JBQWdCLENBQUMzRCxTQUFELEVBQVk7SUFDMUIsT0FBTyxJQUFQO0VBQ0Q7O0VBRUQ0RCxpQkFBaUIsR0FBRztJQUNsQixPQUFPLEtBQUtDLFFBQUwsS0FBa0JDLG9CQUFBLENBQVVDLE9BQW5DO0VBQ0Q7O0VBRURDLGFBQWEsR0FBRztJQUNkLE9BQU8sS0FBS0gsUUFBTCxLQUFrQkMsb0JBQUEsQ0FBVUcsR0FBbkM7RUFDRDs7RUFFREMsa0JBQWtCLEdBQUc7SUFDbkIsS0FBS0wsUUFBTCxHQUFnQkMsb0JBQUEsQ0FBVUMsT0FBMUI7RUFDRDs7RUFFREksY0FBYyxHQUFHO0lBQ2YsS0FBS04sUUFBTCxHQUFnQkMsb0JBQUEsQ0FBVUcsR0FBMUI7RUFDRDs7RUFTREcsZ0JBQWdCLENBQUNDLElBQUQsRUFBTztJQUVyQixJQUFJLEtBQUszRCxZQUFMLElBQXFCNEIsZUFBQSxDQUFFZ0MsUUFBRixDQUFXLEtBQUs1RCxZQUFoQixFQUE4QjJELElBQTlCLENBQXpCLEVBQThEO01BQzVELE9BQU8sS0FBUDtJQUNEOztJQUdELElBQUksS0FBSzVELGFBQUwsSUFBc0I2QixlQUFBLENBQUVnQyxRQUFGLENBQVcsS0FBSzdELGFBQWhCLEVBQStCNEQsSUFBL0IsQ0FBMUIsRUFBZ0U7TUFDOUQsT0FBTyxJQUFQO0lBQ0Q7O0lBSUQsSUFBSSxLQUFLN0Qsc0JBQVQsRUFBaUM7TUFDL0IsT0FBTyxJQUFQO0lBQ0Q7O0lBR0QsT0FBTyxLQUFQO0VBQ0Q7O0VBU0QrRCxvQkFBb0IsQ0FBQ0YsSUFBRCxFQUFPO0lBQ3pCLEtBQUtHLG9CQUFMLENBQTBCSCxJQUExQjtFQUNEOztFQVFERyxvQkFBb0IsQ0FBQ0gsSUFBRCxFQUFPO0lBQ3pCLElBQUksQ0FBQyxLQUFLRCxnQkFBTCxDQUFzQkMsSUFBdEIsQ0FBTCxFQUFrQztNQUNoQyxNQUFNLElBQUlwQixLQUFKLENBQ0gsaUNBQWdDb0IsSUFBSyxpQkFBdEMsR0FDRyx5REFESCxHQUVHLHdEQUZILEdBR0csMERBSEgsR0FJRyxnRUFMQyxDQUFOO0lBT0Q7RUFDRjs7RUFPREksdUJBQXVCLENBQUNDLFFBQUQsRUFBV0MsVUFBVSxHQUFHLEtBQXhCLEVBQStCO0lBQ3BELElBQUlDLGVBQWUsR0FBRyxLQUFLL0QsaUJBQTNCO0lBQ0EsS0FBSzJCLEdBQUwsQ0FBU2dCLEtBQVQsQ0FBZ0IsOENBQTZDb0IsZUFBZSxDQUFDQyxJQUFoQixDQUFxQixJQUFyQixDQUEyQixFQUF4Rjs7SUFFQSxJQUFJRixVQUFKLEVBQWdCO01BQ2RDLGVBQWUsR0FBR0EsZUFBZSxDQUFDRSxNQUFoQixDQUF1QixLQUFLaEUsb0JBQTVCLENBQWxCO0lBQ0Q7O0lBRUQsSUFBSSxDQUFDd0IsZUFBQSxDQUFFZ0MsUUFBRixDQUFXTSxlQUFYLEVBQTRCRixRQUE1QixDQUFMLEVBQTRDO01BQzFDLE1BQU0sSUFBSUssZ0JBQUEsQ0FBT0Msb0JBQVgsQ0FDSCxxQkFBb0JOLFFBQVMscUNBRDFCLENBQU47SUFHRDtFQUNGOztFQU9ETyxXQUFXLENBQUNqRixTQUFELEVBQVk7SUFDckIsT0FBTyxLQUFQO0VBQ0Q7O0VBT0RrRixpQkFBaUIsQ0FBQ2xGLFNBQUQsRUFBWTtJQUMzQixPQUFPLEVBQVA7RUFDRDs7RUFPRG1GLFFBQVEsQ0FBQ25GLFNBQUQsRUFBWTtJQUNsQixPQUFPLEtBQVA7RUFDRDs7RUFlRG9GLG1CQUFtQixDQUFDcEYsU0FBRCxFQUFZcUYsTUFBWixFQUFvQkMsR0FBcEIsRUFBeUJDLElBQXpCLEVBQStCO0lBQ2hELEtBQUssSUFBSUMsV0FBVCxJQUF3QixLQUFLTixpQkFBTCxDQUF1QmxGLFNBQXZCLENBQXhCLEVBQTJEO01BQ3pELElBQUksQ0FBQ3NDLGVBQUEsQ0FBRW1ELE9BQUYsQ0FBVUQsV0FBVixDQUFELElBQTJCQSxXQUFXLENBQUNFLE1BQVosS0FBdUIsQ0FBdEQsRUFBeUQ7UUFDdkQsTUFBTSxJQUFJekMsS0FBSixDQUFVLHlDQUFWLENBQU47TUFDRDs7TUFDRCxJQUFJLENBQUMwQyxXQUFELEVBQWNDLGNBQWQsSUFBZ0NKLFdBQXBDOztNQUNBLElBQUksQ0FBQ2xELGVBQUEsQ0FBRWdDLFFBQUYsQ0FBVyxDQUFDLEtBQUQsRUFBUSxNQUFSLEVBQWdCLFFBQWhCLENBQVgsRUFBc0NxQixXQUF0QyxDQUFMLEVBQXlEO1FBQ3ZELE1BQU0sSUFBSTFDLEtBQUosQ0FBVyx3Q0FBdUMwQyxXQUFZLEdBQTlELENBQU47TUFDRDs7TUFDRCxJQUFJLENBQUNyRCxlQUFBLENBQUV1RCxRQUFGLENBQVdELGNBQVgsQ0FBTCxFQUFpQztRQUMvQixNQUFNLElBQUkzQyxLQUFKLENBQVUsbURBQVYsQ0FBTjtNQUNEOztNQUNELElBQUk2QyxhQUFhLEdBQUdSLEdBQUcsQ0FBQ1MsT0FBSixDQUFZLElBQUlDLE1BQUosQ0FBWSxJQUFHMUQsZUFBQSxDQUFFMkQsWUFBRixDQUFlLEtBQUszRixRQUFwQixDQUE4QixFQUE3QyxDQUFaLEVBQTZELEVBQTdELENBQXBCOztNQUNBLElBQUlxRixXQUFXLEtBQUtOLE1BQWhCLElBQTBCTyxjQUFjLENBQUNNLElBQWYsQ0FBb0JKLGFBQXBCLENBQTlCLEVBQWtFO1FBQ2hFLE9BQU8sSUFBUDtNQUNEO0lBQ0Y7O0lBQ0QsT0FBTyxLQUFQO0VBQ0Q7O0VBTURLLGdCQUFnQixDQUFDQyxNQUFELEVBQVM7SUFDdkIsS0FBS3JGLGNBQUwsQ0FBb0J3QyxJQUFwQixDQUF5QjZDLE1BQXpCO0VBQ0Q7O0VBRURDLGlCQUFpQixHQUFHO0lBQ2xCLE9BQU8sS0FBS3RGLGNBQVo7RUFDRDs7RUFFMkIsTUFBdEJ1RixzQkFBc0IsR0FBRztJQUM3QixJQUFJLEtBQUt0RixjQUFULEVBQXlCO01BQ3ZCdUYsWUFBWSxDQUFDLEtBQUt2RixjQUFOLENBQVo7TUFDQSxLQUFLQSxjQUFMLEdBQXNCLElBQXRCO0lBQ0Q7RUFDRjs7QUE1WWMifQ==
238
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ2ZXJzaW9uIiwiQkFTRURSSVZFUl9WRVIiLCJmcyIsInJlYWRQYWNrYWdlSnNvbkZyb20iLCJfX2Rpcm5hbWUiLCJORVdfQ09NTUFORF9USU1FT1VUX01TIiwiT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCIsIkRyaXZlckNvcmUiLCJiYXNlVmVyc2lvbiIsImV4ZWN1dGVNZXRob2RNYXAiLCJzZXNzaW9uSWQiLCJvcHRzIiwiaW5pdGlhbE9wdHMiLCJoZWxwZXJzIiwiYmFzZVBhdGgiLCJERUZBVUxUX0JBU0VfUEFUSCIsInJlbGF4ZWRTZWN1cml0eUVuYWJsZWQiLCJhbGxvd0luc2VjdXJlIiwiZGVueUluc2VjdXJlIiwibmV3Q29tbWFuZFRpbWVvdXRNcyIsImltcGxpY2l0V2FpdE1zIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJ3ZWJMb2NhdG9yU3RyYXRlZ2llcyIsIm1hbmFnZWREcml2ZXJzIiwibm9Db21tYW5kVGltZXIiLCJfZXZlbnRIaXN0b3J5IiwiY29tbWFuZHMiLCJldmVudEVtaXR0ZXIiLCJFdmVudEVtaXR0ZXIiLCJfbG9nIiwic2h1dGRvd25VbmV4cGVjdGVkbHkiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJjb21tYW5kc1F1ZXVlR3VhcmQiLCJBc3luY0xvY2siLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwiY29uc3RydWN0b3IiLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJnZW5lcmF0ZURyaXZlckxvZ1ByZWZpeCIsInRtcERpciIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fVE1QX0RJUiIsIm9zIiwidG1wZGlyIiwiXyIsImNsb25lRGVlcCIsImxvZyIsIm9uVW5leHBlY3RlZFNodXRkb3duIiwiaGFuZGxlciIsIm9uIiwiZHJpdmVyRGF0YSIsImlzQ29tbWFuZHNRdWV1ZUVuYWJsZWQiLCJldmVudEhpc3RvcnkiLCJsb2dFdmVudCIsImV2ZW50TmFtZSIsIkVycm9yIiwidHMiLCJEYXRlIiwibm93IiwibG9nVGltZSIsInRvVGltZVN0cmluZyIsInB1c2giLCJkZWJ1ZyIsImdldFN0YXR1cyIsInNlc3Npb25FeGlzdHMiLCJkcml2ZXJGb3JTZXNzaW9uIiwiaXNNanNvbndwUHJvdG9jb2wiLCJwcm90b2NvbCIsIlBST1RPQ09MUyIsIk1KU09OV1AiLCJpc1czQ1Byb3RvY29sIiwiVzNDIiwic2V0UHJvdG9jb2xNSlNPTldQIiwic2V0UHJvdG9jb2xXM0MiLCJpc0ZlYXR1cmVFbmFibGVkIiwibmFtZSIsImluY2x1ZGVzIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJhc3NlcnRGZWF0dXJlRW5hYmxlZCIsInZhbGlkYXRlTG9jYXRvclN0cmF0ZWd5Iiwic3RyYXRlZ3kiLCJ3ZWJDb250ZXh0IiwidmFsaWRTdHJhdGVnaWVzIiwiam9pbiIsImNvbmNhdCIsImVycm9ycyIsIkludmFsaWRTZWxlY3RvckVycm9yIiwicHJveHlBY3RpdmUiLCJnZXRQcm94eUF2b2lkTGlzdCIsImNhblByb3h5IiwicHJveHlSb3V0ZUlzQXZvaWRlZCIsIm1ldGhvZCIsInVybCIsImJvZHkiLCJhdm9pZFNjaGVtYSIsImlzQXJyYXkiLCJsZW5ndGgiLCJhdm9pZE1ldGhvZCIsImF2b2lkUGF0aFJlZ2V4IiwiaXNSZWdFeHAiLCJub3JtYWxpemVkVXJsIiwicmVwbGFjZSIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsInRlc3QiLCJhZGRNYW5hZ2VkRHJpdmVyIiwiZHJpdmVyIiwiZ2V0TWFuYWdlZERyaXZlcnMiLCJjbGVhck5ld0NvbW1hbmRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2Jhc2Vkcml2ZXIvY29yZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVxdWlyZS1hd2FpdCAqL1xuXG5pbXBvcnQge2ZzLCBsb2dnZXJ9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IHtFdmVudEVtaXR0ZXJ9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCB7REVGQVVMVF9CQVNFX1BBVEgsIFBST1RPQ09MU30gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7ZXJyb3JzfSBmcm9tICcuLi9wcm90b2NvbCc7XG5pbXBvcnQgRGV2aWNlU2V0dGluZ3MgZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MnO1xuaW1wb3J0IGhlbHBlcnMgZnJvbSAnLi9oZWxwZXJzJztcblxuLy8gZm9yIGNvbXBhdCB3aXRoIHJ1bm5pbmcgdGVzdHMgdHJhbnNwaWxlZCBhbmQgaW4tcGxhY2VcbmNvbnN0IHt2ZXJzaW9uOiBCQVNFRFJJVkVSX1ZFUn0gPSBmcy5yZWFkUGFja2FnZUpzb25Gcm9tKF9fZGlybmFtZSk7XG5cbmNvbnN0IE5FV19DT01NQU5EX1RJTUVPVVRfTVMgPSA2MCAqIDEwMDA7XG5cbmNvbnN0IE9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQgPSAnb25VbmV4cGVjdGVkU2h1dGRvd24nO1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7Q29uc3RyYWludHN9IFtDPUJhc2VEcml2ZXJDYXBDb25zdHJhaW50c11cbiAqIEBpbXBsZW1lbnRzIHtDb3JlPEM+fVxuICovXG5jbGFzcyBEcml2ZXJDb3JlIHtcbiAgLyoqXG4gICAqIE1ha2UgdGhlIGJhc2Vkcml2ZXIgdmVyc2lvbiBhdmFpbGFibGUgc28gZm9yIGFueSBkcml2ZXIgd2hpY2ggaW5oZXJpdHMgZnJvbSB0aGlzIHBhY2thZ2UsIHdlXG4gICAqIGtub3cgd2hpY2ggdmVyc2lvbiBvZiBiYXNlZHJpdmVyIGl0IGluaGVyaXRlZCBmcm9tXG4gICAqL1xuICBzdGF0aWMgYmFzZVZlcnNpb24gPSBCQVNFRFJJVkVSX1ZFUjtcblxuICAvKiogQHR5cGUge0V4ZWN1dGVNZXRob2RNYXB9ICovXG4gIHN0YXRpYyBleGVjdXRlTWV0aG9kTWFwID0ge307XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtzdHJpbmc/fVxuICAgKi9cbiAgc2Vzc2lvbklkID0gbnVsbDtcblxuICAvKipcbiAgICogQHR5cGUge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlck9wdHM8Qz59XG4gICAqL1xuICBvcHRzO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7U2VydmVyQXJnc31cbiAgICovXG4gIGluaXRpYWxPcHRzO1xuXG4gIGhlbHBlcnMgPSBoZWxwZXJzO1xuXG4gIC8qKlxuICAgKiBiYXNlUGF0aCBpcyB1c2VkIGZvciBzZXZlcmFsIHB1cnBvc2VzLCBmb3IgZXhhbXBsZSBpbiBzZXR0aW5nIHVwXG4gICAqIHByb3h5aW5nIHRvIG90aGVyIGRyaXZlcnMsIHNpbmNlIHdlIG5lZWQgdG8ga25vdyB3aGF0IHRoZSBiYXNlIHBhdGhcbiAgICogb2YgYW55IGluY29taW5nIHJlcXVlc3QgbWlnaHQgbG9vayBsaWtlLiBXZSBzZXQgaXQgdG8gdGhlIGRlZmF1bHRcbiAgICogaW5pdGlhbGx5IGJ1dCBpdCBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIGFueSBhY3R1YWwgcHJvZ3JhbVxuICAgKiBleGVjdXRpb24gYnkgdGhlIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiwgd2hpY2ggaXMgbmVjZXNzYXJpbHkgcnVuIGFzXG4gICAqIHRoZSBlbnRyeXBvaW50IGZvciBhbnkgQXBwaXVtIHNlcnZlclxuICAgKi9cbiAgYmFzZVBhdGggPSBERUZBVUxUX0JBU0VfUEFUSDtcblxuICByZWxheGVkU2VjdXJpdHlFbmFibGVkID0gZmFsc2U7XG5cbiAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgYWxsb3dJbnNlY3VyZSA9IFtdO1xuXG4gIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gIGRlbnlJbnNlY3VyZSA9IFtdO1xuXG4gIG5ld0NvbW1hbmRUaW1lb3V0TXMgPSBORVdfQ09NTUFORF9USU1FT1VUX01TO1xuXG4gIGltcGxpY2l0V2FpdE1zID0gMDtcblxuICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICBsb2NhdG9yU3RyYXRlZ2llcyA9IFtdO1xuXG4gIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gIHdlYkxvY2F0b3JTdHJhdGVnaWVzID0gW107XG5cbiAgLyoqIEB0eXBlIHtEcml2ZXJbXX0gKi9cbiAgbWFuYWdlZERyaXZlcnMgPSBbXTtcblxuICAvKiogQHR5cGUge05vZGVKUy5UaW1lb3V0P30gKi9cbiAgbm9Db21tYW5kVGltZXIgPSBudWxsO1xuXG4gIC8qKiBAdHlwZSB7RXZlbnRIaXN0b3J5fSAqL1xuICBfZXZlbnRIaXN0b3J5ID0ge2NvbW1hbmRzOiBbXX07XG5cbiAgLy8gdXNlZCB0byBoYW5kbGUgZHJpdmVyIGV2ZW50c1xuICAvKiogQHR5cGUge05vZGVKUy5FdmVudEVtaXR0ZXJ9ICovXG4gIGV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogQHR5cGUge0FwcGl1bUxvZ2dlcn1cbiAgICovXG4gIF9sb2c7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHNodXRkb3duVW5leHBlY3RlZGx5ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgc2hvdWxkVmFsaWRhdGVDYXBzO1xuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBjb21tYW5kc1F1ZXVlR3VhcmQgPSBuZXcgQXN5bmNMb2NrKCk7XG5cbiAgLyoqXG4gICAqIHNldHRpbmdzIHNob3VsZCBiZSBpbnN0YW50aWF0ZWQgYnkgZHJpdmVycyB3aGljaCBleHRlbmQgQmFzZURyaXZlciwgYnV0XG4gICAqIHdlIHNldCBpdCB0byBhbiBlbXB0eSBEZXZpY2VTZXR0aW5ncyBpbnN0YW5jZSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZVxuICAgKiBkZWZhdWx0IHNldHRpbmdzIGFyZSBhcHBsaWVkIGV2ZW4gaWYgYW4gZXh0ZW5kaW5nIGRyaXZlciBkb2Vzbid0IHV0aWxpemVcbiAgICogdGhlIHNldHRpbmdzIGZ1bmN0aW9uYWxpdHkgaXRzZWxmXG4gICAqL1xuICBzZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncygpO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0RyaXZlck9wdHM8Qz59IG9wdHNcbiAgICogQHBhcmFtIHtib29sZWFufSBbc2hvdWxkVmFsaWRhdGVDYXBzXVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0cyA9IC8qKiBAdHlwZSB7RHJpdmVyT3B0czxDPn0gKi8gKHt9KSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIHRoaXMuX2xvZyA9IGxvZ2dlci5nZXRMb2dnZXIoaGVscGVycy5nZW5lcmF0ZURyaXZlckxvZ1ByZWZpeCh0aGlzKSk7XG5cbiAgICAvLyBzZXR1cCBzdGF0ZVxuICAgIHRoaXMub3B0cyA9IG9wdHM7XG5cbiAgICAvLyB1c2UgYSBjdXN0b20gdG1wIGRpciB0byBhdm9pZCBsb3NpbmcgZGF0YSBhbmQgYXBwIHdoZW4gY29tcHV0ZXIgaXNcbiAgICAvLyByZXN0YXJ0ZWRcbiAgICB0aGlzLm9wdHMudG1wRGlyID0gdGhpcy5vcHRzLnRtcERpciB8fCBwcm9jZXNzLmVudi5BUFBJVU1fVE1QX0RJUiB8fCBvcy50bXBkaXIoKTtcblxuICAgIC8vIGJhc2UtZHJpdmVyIGludGVybmFsc1xuICAgIHRoaXMuc2hvdWxkVmFsaWRhdGVDYXBzID0gc2hvdWxkVmFsaWRhdGVDYXBzO1xuXG4gICAgLy8ga2VlcGluZyB0cmFjayBvZiBpbml0aWFsIG9wdHNcbiAgICB0aGlzLmluaXRpYWxPcHRzID0gXy5jbG9uZURlZXAob3B0cyk7XG5cbiAgICB0aGlzLnNlc3Npb25JZCA9IG51bGw7XG4gIH1cblxuICBnZXQgbG9nKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2c7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgY2FsbGJhY2sgaGFuZGxlciBpZiBuZWVkZWQgdG8gZXhlY3V0ZSBhIGN1c3RvbSBwaWVjZSBvZiBjb2RlXG4gICAqIHdoZW4gdGhlIGRyaXZlciBpcyBzaHV0IGRvd24gdW5leHBlY3RlZGx5LiBNdWx0aXBsZSBjYWxscyB0byB0aGlzIG1ldGhvZFxuICAgKiB3aWxsIGNhdXNlIHRoZSBoYW5kbGVyIHRvIGJlIGV4ZWN1dGVkIG11dGlwbGUgdGltZXNcbiAgICpcbiAgICogQHBhcmFtIHsoLi4uYXJnczogYW55W10pID0+IHZvaWR9IGhhbmRsZXIgVGhlIGNvZGUgdG8gYmUgZXhlY3V0ZWQgb24gdW5leHBlY3RlZCBzaHV0ZG93bi5cbiAgICogVGhlIGZ1bmN0aW9uIG1heSBhY2NlcHQgb25lIGFyZ3VtZW50LCB3aGljaCBpcyB0aGUgYWN0dWFsIGVycm9yIGluc3RhbmNlLCB3aGljaFxuICAgKiBjYXVzZWQgdGhlIGRyaXZlciB0byBzaHV0IGRvd24uXG4gICAqL1xuICBvblVuZXhwZWN0ZWRTaHV0ZG93bihoYW5kbGVyKSB7XG4gICAgdGhpcy5ldmVudEVtaXR0ZXIub24oT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCwgaGFuZGxlcik7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IEFwcGl1bURyaXZlciB0byBzdG9yZSB0aGUgZGF0YSBvZiB0aGVcbiAgICogc3BlY2lmaWMgZHJpdmVyIHNlc3Npb25zLiBUaGlzIGRhdGEgY2FuIGJlIGxhdGVyIHVzZWQgdG8gYWRqdXN0XG4gICAqIHByb3BlcnRpZXMgZm9yIGRyaXZlciBpbnN0YW5jZXMgcnVubmluZyBpbiBwYXJhbGxlbC5cbiAgICogT3ZlcnJpZGUgaXQgaW4gaW5oZXJpdGVkIGRyaXZlciBjbGFzc2VzIGlmIG5lY2Vzc2FyeS5cbiAgICpcbiAgICogQHJldHVybiB7UmVjb3JkPHN0cmluZyx1bmtub3duPn0gRHJpdmVyIHByb3BlcnRpZXMgbWFwcGluZ1xuICAgKi9cbiAgZ2V0IGRyaXZlckRhdGEoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgY29udHJvbHMgdGhlIHdheSB7I2V4ZWN1dGVDb21tYW5kfSBtZXRob2RcbiAgICogaGFuZGxlcyBuZXcgZHJpdmVyIGNvbW1hbmRzIHJlY2VpdmVkIGZyb20gdGhlIGNsaWVudC5cbiAgICogT3ZlcnJpZGUgaXQgZm9yIGluaGVyaXRlZCBjbGFzc2VzIG9ubHkgaW4gc3BlY2lhbCBjYXNlcy5cbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gSWYgdGhlIHJldHVybmVkIHZhbHVlIGlzIHRydWUgKGRlZmF1bHQpIHRoZW4gYWxsIHRoZSBjb21tYW5kc1xuICAgKiAgIHJlY2VpdmVkIGJ5IHRoZSBwYXJ0aWN1bGFyIGRyaXZlciBpbnN0YW5jZSBhcmUgZ29pbmcgdG8gYmUgcHV0IGludG8gdGhlIHF1ZXVlLFxuICAgKiAgIHNvIGVhY2ggZm9sbG93aW5nIGNvbW1hbmQgd2lsbCBub3QgYmUgZXhlY3V0ZWQgdW50aWwgdGhlIHByZXZpb3VzIGNvbW1hbmRcbiAgICogICBleGVjdXRpb24gaXMgY29tcGxldGVkLiBGYWxzZSB2YWx1ZSBkaXNhYmxlcyB0aGF0IHF1ZXVlLCBzbyBlYWNoIGRyaXZlciBjb21tYW5kXG4gICAqICAgaXMgZXhlY3V0ZWQgaW5kZXBlbmRlbnRseSBhbmQgZG9lcyBub3Qgd2FpdCBmb3IgYW55dGhpbmcuXG4gICAqL1xuICBnZXQgaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qXG4gICAqIG1ha2UgZXZlbnRIaXN0b3J5IGEgcHJvcGVydHkgYW5kIHJldHVybiBhIGNsb25lZCBvYmplY3Qgc28gYSBjb25zdW1lciBjYW4ndFxuICAgKiBpbmFkdmVydGVudGx5IGNoYW5nZSBkYXRhIG91dHNpZGUgb2YgbG9nRXZlbnRcbiAgICovXG4gIGdldCBldmVudEhpc3RvcnkoKSB7XG4gICAgcmV0dXJuIF8uY2xvbmVEZWVwKHRoaXMuX2V2ZW50SGlzdG9yeSk7XG4gIH1cblxuICAvKipcbiAgICogQVBJIG1ldGhvZCBmb3IgZHJpdmVyIGRldmVsb3BlcnMgdG8gbG9nIHRpbWluZ3MgZm9yIGltcG9ydGFudCBldmVudHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICAgKi9cbiAgbG9nRXZlbnQoZXZlbnROYW1lKSB7XG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2NvbW1hbmRzJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbG9nIGNvbW1hbmRzIGRpcmVjdGx5Jyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZXZlbnROYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGV2ZW50TmFtZSAke2V2ZW50TmFtZX1gKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9ldmVudEhpc3RvcnlbZXZlbnROYW1lXSkge1xuICAgICAgdGhpcy5fZXZlbnRIaXN0b3J5W2V2ZW50TmFtZV0gPSBbXTtcbiAgICB9XG4gICAgY29uc3QgdHMgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGxvZ1RpbWUgPSBuZXcgRGF0ZSh0cykudG9UaW1lU3RyaW5nKCk7XG4gICAgdGhpcy5fZXZlbnRIaXN0b3J5W2V2ZW50TmFtZV0ucHVzaCh0cyk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEV2ZW50ICcke2V2ZW50TmFtZX0nIGxvZ2dlZCBhdCAke3RzfSAoJHtsb2dUaW1lfSlgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZGVuIGluIGFwcGl1bSBkcml2ZXIsIGJ1dCBoZXJlIHNvIHRoYXQgaW5kaXZpZHVhbCBkcml2ZXJzIGNhbiBiZVxuICAgKiB0ZXN0ZWQgd2l0aCBjbGllbnRzIHRoYXQgcG9sbFxuICAgKi9cbiAgYXN5bmMgZ2V0U3RhdHVzKCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtZXRob2QgcmVxdWlyZWQgYnkgTUpTT05XUCBpbiBvcmRlciB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBzaG91bGRcbiAgICogcmVzcG9uZCB3aXRoIGFuIGludmFsaWQgc2Vzc2lvbiByZXNwb25zZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3Nlc3Npb25JZF1cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzZXNzaW9uRXhpc3RzKHNlc3Npb25JZCkge1xuICAgIGlmICghc2Vzc2lvbklkKSByZXR1cm4gZmFsc2U7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICByZXR1cm4gc2Vzc2lvbklkID09PSB0aGlzLnNlc3Npb25JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBtZXRob2QgcmVxdWlyZWQgYnkgTUpTT05XUCBpbiBvcmRlciB0byBkZXRlcm1pbmUgaWYgdGhlIGNvbW1hbmQgc2hvdWxkXG4gICAqIGJlIHByb3hpZWQgZGlyZWN0bHkgdG8gdGhlIGRyaXZlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkXG4gICAqIEByZXR1cm5zIHtDb3JlPEM+IHwgbnVsbH1cbiAgICovXG4gIGRyaXZlckZvclNlc3Npb24oc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpc01qc29ud3BQcm90b2NvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm90b2NvbCA9PT0gUFJPVE9DT0xTLk1KU09OV1A7XG4gIH1cblxuICBpc1czQ1Byb3RvY29sKCkge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sID09PSBQUk9UT0NPTFMuVzNDO1xuICB9XG5cbiAgc2V0UHJvdG9jb2xNSlNPTldQKCkge1xuICAgIHRoaXMucHJvdG9jb2wgPSBQUk9UT0NPTFMuTUpTT05XUDtcbiAgfVxuXG4gIHNldFByb3RvY29sVzNDKCkge1xuICAgIHRoaXMucHJvdG9jb2wgPSBQUk9UT0NPTFMuVzNDO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgYSBnaXZlbiBmZWF0dXJlIGlzIGVuYWJsZWQgdmlhIGl0cyBuYW1lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gbmFtZSBvZiBmZWF0dXJlL2NvbW1hbmRcbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59XG4gICAqL1xuICBpc0ZlYXR1cmVFbmFibGVkKG5hbWUpIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGV4cGxpY2l0bHkgZGVuaWVkIHRoaXMgZmVhdHVyZSwgcmV0dXJuIGZhbHNlIGltbWVkaWF0ZWx5XG4gICAgaWYgKHRoaXMuZGVueUluc2VjdXJlICYmIF8uaW5jbHVkZXModGhpcy5kZW55SW5zZWN1cmUsIG5hbWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gaWYgd2Ugc3BlY2lmaWNhbGx5IGhhdmUgYWxsb3dlZCB0aGUgZmVhdHVyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAodGhpcy5hbGxvd0luc2VjdXJlICYmIF8uaW5jbHVkZXModGhpcy5hbGxvd0luc2VjdXJlLCBuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gb3RoZXJ3aXNlLCBpZiB3ZSd2ZSBnbG9iYWxseSBhbGxvd2VkIGluc2VjdXJlIGZlYXR1cmVzIGFuZCBub3QgZGVuaWVkXG4gICAgLy8gdGhpcyBvbmUsIHJldHVybiB0cnVlXG4gICAgaWYgKHRoaXMucmVsYXhlZFNlY3VyaXR5RW5hYmxlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBhbGxvd2VkIGFueXRoaW5nIGluc2VjdXJlLCB0aGVuIHJlamVjdFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlcnQgdGhhdCBhIGdpdmVuIGZlYXR1cmUgaXMgZW5hYmxlZCBhbmQgdGhyb3cgYSBoZWxwZnVsIGVycm9yIGlmIGl0J3NcbiAgICogbm90XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gbmFtZSBvZiBmZWF0dXJlL2NvbW1hbmRcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIGVuc3VyZUZlYXR1cmVFbmFibGVkKG5hbWUpIHtcbiAgICB0aGlzLmFzc2VydEZlYXR1cmVFbmFibGVkKG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2VydCB0aGF0IGEgZ2l2ZW4gZmVhdHVyZSBpcyBlbmFibGVkIGFuZCB0aHJvdyBhIGhlbHBmdWwgZXJyb3IgaWYgaXQnc1xuICAgKiBub3RcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBuYW1lIG9mIGZlYXR1cmUvY29tbWFuZFxuICAgKi9cbiAgYXNzZXJ0RmVhdHVyZUVuYWJsZWQobmFtZSkge1xuICAgIGlmICghdGhpcy5pc0ZlYXR1cmVFbmFibGVkKG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQb3RlbnRpYWxseSBpbnNlY3VyZSBmZWF0dXJlICcke25hbWV9JyBoYXMgbm90IGJlZW4gYCArXG4gICAgICAgICAgYGVuYWJsZWQuIElmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUgYW5kIGFjY2VwdCBgICtcbiAgICAgICAgICBgdGhlIHNlY3VyaXR5IHJhbWlmaWNhdGlvbnMsIHBsZWFzZSBkbyBzbyBieSBmb2xsb3dpbmcgYCArXG4gICAgICAgICAgYHRoZSBkb2N1bWVudGVkIGluc3RydWN0aW9ucyBhdCBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtYCArXG4gICAgICAgICAgYC9hcHBpdW0vYmxvYi9tYXN0ZXIvZG9jcy9lbi93cml0aW5nLXJ1bm5pbmctYXBwaXVtL3NlY3VyaXR5Lm1kYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmF0ZWd5XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3dlYkNvbnRleHRdXG4gICAqL1xuICB2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneShzdHJhdGVneSwgd2ViQ29udGV4dCA9IGZhbHNlKSB7XG4gICAgbGV0IHZhbGlkU3RyYXRlZ2llcyA9IHRoaXMubG9jYXRvclN0cmF0ZWdpZXM7XG4gICAgdGhpcy5sb2cuZGVidWcoYFZhbGlkIGxvY2F0b3Igc3RyYXRlZ2llcyBmb3IgdGhpcyByZXF1ZXN0OiAke3ZhbGlkU3RyYXRlZ2llcy5qb2luKCcsICcpfWApO1xuXG4gICAgaWYgKHdlYkNvbnRleHQpIHtcbiAgICAgIHZhbGlkU3RyYXRlZ2llcyA9IHZhbGlkU3RyYXRlZ2llcy5jb25jYXQodGhpcy53ZWJMb2NhdG9yU3RyYXRlZ2llcyk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmluY2x1ZGVzKHZhbGlkU3RyYXRlZ2llcywgc3RyYXRlZ3kpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRTZWxlY3RvckVycm9yKFxuICAgICAgICBgTG9jYXRvciBTdHJhdGVneSAnJHtzdHJhdGVneX0nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgc2Vzc2lvbmBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc2Vzc2lvbklkXVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHByb3h5QWN0aXZlKHNlc3Npb25JZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Sb3V0ZU1hdGNoZXJbXX1cbiAgICovXG4gIGdldFByb3h5QXZvaWRMaXN0KHNlc3Npb25JZCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3Nlc3Npb25JZF1cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBjYW5Qcm94eShzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBhIGdpdmVuIGNvbW1hbmQgcm91dGUgKGV4cHJlc3NlZCBhcyBtZXRob2QgYW5kIHVybCkgc2hvdWxkIG5vdCBiZVxuICAgKiBwcm94aWVkIGFjY29yZGluZyB0byB0aGlzIGRyaXZlclxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkIC0gdGhlIGN1cnJlbnQgc2Vzc2lvbklkIChpbiBjYXNlIHRoZSBkcml2ZXIgcnVuc1xuICAgKiBtdWx0aXBsZSBzZXNzaW9uIGlkcyBhbmQgcmVxdWlyZXMgaXQpLiBUaGlzIGlzIG5vdCB1c2VkIGluIHRoaXMgbWV0aG9kIGJ1dFxuICAgKiBzaG91bGQgYmUgbWFkZSBhdmFpbGFibGUgdG8gb3ZlcnJpZGRlbiBtZXRob2RzLlxuICAgKiBAcGFyYW0ge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkhUVFBNZXRob2R9IG1ldGhvZCAtIEhUVFAgbWV0aG9kIG9mIHRoZSByb3V0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gdXJsIG9mIHRoZSByb3V0ZVxuICAgKiBAcGFyYW0ge2FueX0gW2JvZHldIC0gd2ViZHJpdmVyIHJlcXVlc3QgYm9keVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB3aGV0aGVyIHRoZSByb3V0ZSBzaG91bGQgYmUgYXZvaWRlZFxuICAgKi9cbiAgcHJveHlSb3V0ZUlzQXZvaWRlZChzZXNzaW9uSWQsIG1ldGhvZCwgdXJsLCBib2R5KSB7XG4gICAgZm9yIChsZXQgYXZvaWRTY2hlbWEgb2YgdGhpcy5nZXRQcm94eUF2b2lkTGlzdChzZXNzaW9uSWQpKSB7XG4gICAgICBpZiAoIV8uaXNBcnJheShhdm9pZFNjaGVtYSkgfHwgYXZvaWRTY2hlbWEubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUHJveHkgYXZvaWRhbmNlIG11c3QgYmUgYSBsaXN0IG9mIHBhaXJzJyk7XG4gICAgICB9XG4gICAgICBsZXQgW2F2b2lkTWV0aG9kLCBhdm9pZFBhdGhSZWdleF0gPSBhdm9pZFNjaGVtYTtcbiAgICAgIGlmICghXy5pbmNsdWRlcyhbJ0dFVCcsICdQT1NUJywgJ0RFTEVURSddLCBhdm9pZE1ldGhvZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgcHJveHkgYXZvaWRhbmNlIG1ldGhvZCAnJHthdm9pZE1ldGhvZH0nYCk7XG4gICAgICB9XG4gICAgICBpZiAoIV8uaXNSZWdFeHAoYXZvaWRQYXRoUmVnZXgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUHJveHkgYXZvaWRhbmNlIHBhdGggbXVzdCBiZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuICAgICAgfVxuICAgICAgbGV0IG5vcm1hbGl6ZWRVcmwgPSB1cmwucmVwbGFjZShuZXcgUmVnRXhwKGBeJHtfLmVzY2FwZVJlZ0V4cCh0aGlzLmJhc2VQYXRoKX1gKSwgJycpO1xuICAgICAgaWYgKGF2b2lkTWV0aG9kID09PSBtZXRob2QgJiYgYXZvaWRQYXRoUmVnZXgudGVzdChub3JtYWxpemVkVXJsKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RHJpdmVyfSBkcml2ZXJcbiAgICovXG4gIGFkZE1hbmFnZWREcml2ZXIoZHJpdmVyKSB7XG4gICAgdGhpcy5tYW5hZ2VkRHJpdmVycy5wdXNoKGRyaXZlcik7XG4gIH1cblxuICBnZXRNYW5hZ2VkRHJpdmVycygpIHtcbiAgICByZXR1cm4gdGhpcy5tYW5hZ2VkRHJpdmVycztcbiAgfVxuXG4gIGFzeW5jIGNsZWFyTmV3Q29tbWFuZFRpbWVvdXQoKSB7XG4gICAgaWYgKHRoaXMubm9Db21tYW5kVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLm5vQ29tbWFuZFRpbWVyKTtcbiAgICAgIHRoaXMubm9Db21tYW5kVGltZXIgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQge0RyaXZlckNvcmV9O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJ9IERyaXZlclxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNvbnN0cmFpbnRzfSBDb25zdHJhaW50c1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkV4ZWN1dGVNZXRob2RNYXB9IEV4ZWN1dGVNZXRob2RNYXBcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5TZXJ2ZXJBcmdzfSBTZXJ2ZXJBcmdzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRXZlbnRIaXN0b3J5fSBFdmVudEhpc3RvcnlcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5BcHBpdW1Mb2dnZXJ9IEFwcGl1bUxvZ2dlclxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlN0cmluZ1JlY29yZH0gU3RyaW5nUmVjb3JkXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQmFzZURyaXZlckNhcENvbnN0cmFpbnRzfSBCYXNlRHJpdmVyQ2FwQ29uc3RyYWludHNcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7Q29uc3RyYWludHN9IFtDPUJhc2VEcml2ZXJDYXBDb25zdHJhaW50c11cbiAqIEB0ZW1wbGF0ZSB7U3RyaW5nUmVjb3JkfHZvaWR9IFtFeHRyYT12b2lkXVxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNhcGFiaWxpdGllczxDLCBFeHRyYT59IENhcGFiaWxpdGllc1xuICovXG4vKipcbiAqIEB0ZW1wbGF0ZSB7U3RyaW5nUmVjb3JkfSBbVD17fV1cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5XM0NDYXBhYmlsaXRpZXM8VD59IFczQ0NhcGFiaWxpdGllc1xuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIHtDb25zdHJhaW50c30gQ1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNvcmU8Qz59IENvcmVcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7Q29uc3RyYWludHN9IENcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJPcHRzPEM+fSBEcml2ZXJPcHRzXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFHQSxNQUFNO0VBQUNBLE9BQU8sRUFBRUM7QUFBVixJQUE0QkMsV0FBQSxDQUFHQyxtQkFBSCxDQUF1QkMsU0FBdkIsQ0FBbEM7O0FBRUEsTUFBTUMsc0JBQXNCLEdBQUcsS0FBSyxJQUFwQztBQUVBLE1BQU1DLDRCQUE0QixHQUFHLHNCQUFyQzs7QUFNQSxNQUFNQyxVQUFOLENBQWlCO0VBS0csT0FBWEMsV0FBVyxHQUFHUCxjQUFIO0VBR0ssT0FBaEJRLGdCQUFnQixHQUFHLEVBQUg7RUFLdkJDLFNBQVMsR0FBRyxJQUFIO0VBS1RDLElBQUk7RUFLSkMsV0FBVztFQUVYQyxPQUFPLEdBQUdBLGdCQUFIO0VBVVBDLFFBQVEsR0FBR0MsNEJBQUg7RUFFUkMsc0JBQXNCLEdBQUcsS0FBSDtFQUd0QkMsYUFBYSxHQUFHLEVBQUg7RUFHYkMsWUFBWSxHQUFHLEVBQUg7RUFFWkMsbUJBQW1CLEdBQUdkLHNCQUFIO0VBRW5CZSxjQUFjLEdBQUcsQ0FBSDtFQUdkQyxpQkFBaUIsR0FBRyxFQUFIO0VBR2pCQyxvQkFBb0IsR0FBRyxFQUFIO0VBR3BCQyxjQUFjLEdBQUcsRUFBSDtFQUdkQyxjQUFjLEdBQUcsSUFBSDtFQUdkQyxhQUFhLEdBQUc7SUFBQ0MsUUFBUSxFQUFFO0VBQVgsQ0FBSDtFQUliQyxZQUFZLEdBQUcsSUFBSUMsb0JBQUosRUFBSDtFQUtaQyxJQUFJO0VBS0pDLG9CQUFvQixHQUFHLEtBQUg7RUFLcEJDLGtCQUFrQjtFQUtsQkMsa0JBQWtCLEdBQUcsSUFBSUMsa0JBQUosRUFBSDtFQVFsQkMsUUFBUSxHQUFHLElBQUlDLHVCQUFKLEVBQUg7O0VBTVJDLFdBQVcsQ0FBQ3pCLElBQUksR0FBaUMsRUFBdEMsRUFBMkNvQixr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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","names":["version","BASEDRIVER_VER","fs","readPackageJsonFrom","__dirname","NEW_COMMAND_TIMEOUT_MS","ON_UNEXPECTED_SHUTDOWN_EVENT","DriverCore","baseVersion","executeMethodMap","sessionId","opts","initialOpts","helpers","basePath","DEFAULT_BASE_PATH","relaxedSecurityEnabled","allowInsecure","denyInsecure","newCommandTimeoutMs","implicitWaitMs","locatorStrategies","webLocatorStrategies","managedDrivers","noCommandTimer","_eventHistory","commands","eventEmitter","EventEmitter","_log","shutdownUnexpectedly","shouldValidateCaps","commandsQueueGuard","AsyncLock","settings","DeviceSettings","constructor","logger","getLogger","generateDriverLogPrefix","tmpDir","process","env","APPIUM_TMP_DIR","os","tmpdir","_","cloneDeep","log","onUnexpectedShutdown","handler","on","driverData","isCommandsQueueEnabled","eventHistory","logEvent","eventName","Error","ts","Date","now","logTime","toTimeString","push","debug","getStatus","sessionExists","driverForSession","isMjsonwpProtocol","protocol","PROTOCOLS","MJSONWP","isW3CProtocol","W3C","setProtocolMJSONWP","setProtocolW3C","isFeatureEnabled","name","includes","ensureFeatureEnabled","assertFeatureEnabled","validateLocatorStrategy","strategy","webContext","validStrategies","join","concat","errors","InvalidSelectorError","proxyActive","getProxyAvoidList","canProxy","proxyRouteIsAvoided","method","url","body","avoidSchema","isArray","length","avoidMethod","avoidPathRegex","isRegExp","normalizedUrl","replace","RegExp","escapeRegExp","test","addManagedDriver","driver","getManagedDrivers","clearNewCommandTimeout","clearTimeout"],"sources":["../../../lib/basedriver/core.js"],"sourcesContent":["/* eslint-disable no-unused-vars */\n/* eslint-disable require-await */\n\nimport {fs, logger} from '@appium/support';\nimport AsyncLock from 'async-lock';\nimport {EventEmitter} from 'events';\nimport _ from 'lodash';\nimport os from 'os';\nimport {DEFAULT_BASE_PATH, PROTOCOLS} from '../constants';\nimport {errors} from '../protocol';\nimport DeviceSettings from './device-settings';\nimport helpers from './helpers';\n\n// for compat with running tests transpiled and in-place\nconst {version: BASEDRIVER_VER} = fs.readPackageJsonFrom(__dirname);\n\nconst NEW_COMMAND_TIMEOUT_MS = 60 * 1000;\n\nconst ON_UNEXPECTED_SHUTDOWN_EVENT = 'onUnexpectedShutdown';\n\n/**\n * @template {Constraints} [C=BaseDriverCapConstraints]\n * @implements {Core<C>}\n */\nclass DriverCore {\n /**\n * Make the basedriver version available so for any driver which inherits from this package, we\n * know which version of basedriver it inherited from\n */\n static baseVersion = BASEDRIVER_VER;\n\n /** @type {ExecuteMethodMap} */\n static executeMethodMap = {};\n\n /**\n * @type {string?}\n */\n sessionId = null;\n\n /**\n * @type {import('@appium/types').DriverOpts<C>}\n */\n opts;\n\n /**\n * @type {ServerArgs}\n */\n initialOpts;\n\n helpers = helpers;\n\n /**\n * basePath is used for several purposes, for example in setting up\n * proxying to other drivers, since we need to know what the base path\n * of any incoming request might look like. We set it to the default\n * initially but it is automatically updated during any actual program\n * execution by the routeConfiguringFunction, which is necessarily run as\n * the entrypoint for any Appium server\n */\n basePath = DEFAULT_BASE_PATH;\n\n relaxedSecurityEnabled = false;\n\n /** @type {string[]} */\n allowInsecure = [];\n\n /** @type {string[]} */\n denyInsecure = [];\n\n newCommandTimeoutMs = NEW_COMMAND_TIMEOUT_MS;\n\n implicitWaitMs = 0;\n\n /** @type {string[]} */\n locatorStrategies = [];\n\n /** @type {string[]} */\n webLocatorStrategies = [];\n\n /** @type {Driver[]} */\n managedDrivers = [];\n\n /** @type {NodeJS.Timeout?} */\n noCommandTimer = null;\n\n /** @type {EventHistory} */\n _eventHistory = {commands: []};\n\n // used to handle driver events\n /** @type {NodeJS.EventEmitter} */\n eventEmitter = new EventEmitter();\n\n /**\n * @type {AppiumLogger}\n */\n _log;\n\n /**\n * @protected\n */\n shutdownUnexpectedly = false;\n\n /**\n * @type {boolean}\n */\n shouldValidateCaps;\n\n /**\n * @protected\n */\n commandsQueueGuard = new AsyncLock();\n\n /**\n * settings should be instantiated by drivers which extend BaseDriver, but\n * we set it to an empty DeviceSettings instance here to make sure that the\n * default settings are applied even if an extending driver doesn't utilize\n * the settings functionality itself\n */\n settings = new DeviceSettings();\n\n /**\n * @param {DriverOpts<C>} opts\n * @param {boolean} [shouldValidateCaps]\n */\n constructor(opts = /** @type {DriverOpts<C>} */ ({}), shouldValidateCaps = true) {\n this._log = logger.getLogger(helpers.generateDriverLogPrefix(this));\n\n // setup state\n this.opts = opts;\n\n // use a custom tmp dir to avoid losing data and app when computer is\n // restarted\n this.opts.tmpDir = this.opts.tmpDir || process.env.APPIUM_TMP_DIR || os.tmpdir();\n\n // base-driver internals\n this.shouldValidateCaps = shouldValidateCaps;\n\n // keeping track of initial opts\n this.initialOpts = _.cloneDeep(opts);\n\n this.sessionId = null;\n }\n\n get log() {\n return this._log;\n }\n\n /**\n * Set a callback handler if needed to execute a custom piece of code\n * when the driver is shut down unexpectedly. Multiple calls to this method\n * will cause the handler to be executed mutiple times\n *\n * @param {(...args: any[]) => void} handler The code to be executed on unexpected shutdown.\n * The function may accept one argument, which is the actual error instance, which\n * caused the driver to shut down.\n */\n onUnexpectedShutdown(handler) {\n this.eventEmitter.on(ON_UNEXPECTED_SHUTDOWN_EVENT, handler);\n }\n\n /**\n * This property is used by AppiumDriver to store the data of the\n * specific driver sessions. This data can be later used to adjust\n * properties for driver instances running in parallel.\n * Override it in inherited driver classes if necessary.\n *\n * @return {Record<string,unknown>} Driver properties mapping\n */\n get driverData() {\n return {};\n }\n\n /**\n * This property controls the way {#executeCommand} method\n * handles new driver commands received from the client.\n * Override it for inherited classes only in special cases.\n *\n * @return {boolean} If the returned value is true (default) then all the commands\n * received by the particular driver instance are going to be put into the queue,\n * so each following command will not be executed until the previous command\n * execution is completed. False value disables that queue, so each driver command\n * is executed independently and does not wait for anything.\n */\n get isCommandsQueueEnabled() {\n return true;\n }\n\n /*\n * make eventHistory a property and return a cloned object so a consumer can't\n * inadvertently change data outside of logEvent\n */\n get eventHistory() {\n return _.cloneDeep(this._eventHistory);\n }\n\n /**\n * API method for driver developers to log timings for important events\n * @param {string} eventName\n */\n logEvent(eventName) {\n if (eventName === 'commands') {\n throw new Error('Cannot log commands directly');\n }\n if (typeof eventName !== 'string') {\n throw new Error(`Invalid eventName ${eventName}`);\n }\n if (!this._eventHistory[eventName]) {\n this._eventHistory[eventName] = [];\n }\n const ts = Date.now();\n const logTime = new Date(ts).toTimeString();\n this._eventHistory[eventName].push(ts);\n this.log.debug(`Event '${eventName}' logged at ${ts} (${logTime})`);\n }\n\n /**\n * Overridden in appium driver, but here so that individual drivers can be\n * tested with clients that poll\n */\n async getStatus() {\n return {};\n }\n\n /**\n * method required by MJSONWP in order to determine whether it should\n * respond with an invalid session response\n * @param {string} [sessionId]\n * @returns {boolean}\n */\n sessionExists(sessionId) {\n if (!sessionId) return false; // eslint-disable-line curly\n return sessionId === this.sessionId;\n }\n\n /**\n * method required by MJSONWP in order to determine if the command should\n * be proxied directly to the driver\n * @param {string} sessionId\n * @returns {Core<C> | null}\n */\n driverForSession(sessionId) {\n return this;\n }\n\n isMjsonwpProtocol() {\n return this.protocol === PROTOCOLS.MJSONWP;\n }\n\n isW3CProtocol() {\n return this.protocol === PROTOCOLS.W3C;\n }\n\n setProtocolMJSONWP() {\n this.protocol = PROTOCOLS.MJSONWP;\n }\n\n setProtocolW3C() {\n this.protocol = PROTOCOLS.W3C;\n }\n\n /**\n * Check whether a given feature is enabled via its name\n *\n * @param {string} name - name of feature/command\n *\n * @returns {Boolean}\n */\n isFeatureEnabled(name) {\n // if we have explicitly denied this feature, return false immediately\n if (this.denyInsecure && _.includes(this.denyInsecure, name)) {\n return false;\n }\n\n // if we specifically have allowed the feature, return true\n if (this.allowInsecure && _.includes(this.allowInsecure, name)) {\n return true;\n }\n\n // otherwise, if we've globally allowed insecure features and not denied\n // this one, return true\n if (this.relaxedSecurityEnabled) {\n return true;\n }\n\n // if we haven't allowed anything insecure, then reject\n return false;\n }\n\n /**\n * Assert that a given feature is enabled and throw a helpful error if it's\n * not\n *\n * @param {string} name - name of feature/command\n * @deprecated\n */\n ensureFeatureEnabled(name) {\n this.assertFeatureEnabled(name);\n }\n\n /**\n * Assert that a given feature is enabled and throw a helpful error if it's\n * not\n *\n * @param {string} name - name of feature/command\n */\n assertFeatureEnabled(name) {\n if (!this.isFeatureEnabled(name)) {\n throw new Error(\n `Potentially insecure feature '${name}' has not been ` +\n `enabled. If you want to enable this feature and accept ` +\n `the security ramifications, please do so by following ` +\n `the documented instructions at https://github.com/appium` +\n `/appium/blob/master/docs/en/writing-running-appium/security.md`\n );\n }\n }\n\n /**\n *\n * @param {string} strategy\n * @param {boolean} [webContext]\n */\n validateLocatorStrategy(strategy, webContext = false) {\n let validStrategies = this.locatorStrategies;\n this.log.debug(`Valid locator strategies for this request: ${validStrategies.join(', ')}`);\n\n if (webContext) {\n validStrategies = validStrategies.concat(this.webLocatorStrategies);\n }\n\n if (!_.includes(validStrategies, strategy)) {\n throw new errors.InvalidSelectorError(\n `Locator Strategy '${strategy}' is not supported for this session`\n );\n }\n }\n\n /**\n *\n * @param {string} [sessionId]\n * @returns {boolean}\n */\n proxyActive(sessionId) {\n return false;\n }\n\n /**\n *\n * @param {string} sessionId\n * @returns {import('@appium/types').RouteMatcher[]}\n */\n getProxyAvoidList(sessionId) {\n return [];\n }\n\n /**\n *\n * @param {string} [sessionId]\n * @returns {boolean}\n */\n canProxy(sessionId) {\n return false;\n }\n\n /**\n * Whether a given command route (expressed as method and url) should not be\n * proxied according to this driver\n *\n * @param {string} sessionId - the current sessionId (in case the driver runs\n * multiple session ids and requires it). This is not used in this method but\n * should be made available to overridden methods.\n * @param {import('@appium/types').HTTPMethod} method - HTTP method of the route\n * @param {string} url - url of the route\n * @param {any} [body] - webdriver request body\n *\n * @returns {boolean} - whether the route should be avoided\n */\n proxyRouteIsAvoided(sessionId, method, url, body) {\n for (let avoidSchema of this.getProxyAvoidList(sessionId)) {\n if (!_.isArray(avoidSchema) || avoidSchema.length !== 2) {\n throw new Error('Proxy avoidance must be a list of pairs');\n }\n let [avoidMethod, avoidPathRegex] = avoidSchema;\n if (!_.includes(['GET', 'POST', 'DELETE'], avoidMethod)) {\n throw new Error(`Unrecognized proxy avoidance method '${avoidMethod}'`);\n }\n if (!_.isRegExp(avoidPathRegex)) {\n throw new Error('Proxy avoidance path must be a regular expression');\n }\n let normalizedUrl = url.replace(new RegExp(`^${_.escapeRegExp(this.basePath)}`), '');\n if (avoidMethod === method && avoidPathRegex.test(normalizedUrl)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n *\n * @param {Driver} driver\n */\n addManagedDriver(driver) {\n this.managedDrivers.push(driver);\n }\n\n getManagedDrivers() {\n return this.managedDrivers;\n }\n\n async clearNewCommandTimeout() {\n if (this.noCommandTimer) {\n clearTimeout(this.noCommandTimer);\n this.noCommandTimer = null;\n }\n }\n}\n\nexport {DriverCore};\n\n/**\n * @typedef {import('@appium/types').Driver} Driver\n * @typedef {import('@appium/types').Constraints} Constraints\n * @typedef {import('@appium/types').ExecuteMethodMap} ExecuteMethodMap\n * @typedef {import('@appium/types').ServerArgs} ServerArgs\n * @typedef {import('@appium/types').EventHistory} EventHistory\n * @typedef {import('@appium/types').AppiumLogger} AppiumLogger\n * @typedef {import('@appium/types').StringRecord} StringRecord\n * @typedef {import('@appium/types').BaseDriverCapConstraints} BaseDriverCapConstraints\n */\n\n/**\n * @template {Constraints} [C=BaseDriverCapConstraints]\n * @template {StringRecord|void} [Extra=void]\n * @typedef {import('@appium/types').Capabilities<C, Extra>} Capabilities\n */\n/**\n * @template {StringRecord} [T={}]\n * @typedef {import('@appium/types').W3CCapabilities<T>} W3CCapabilities\n */\n\n/**\n * @template {Constraints} C\n * @typedef {import('@appium/types').Core<C>} Core\n */\n\n/**\n * @template {Constraints} C\n * @typedef {import('@appium/types').DriverOpts<C>} DriverOpts\n */\n"],"mappings":"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"}
@@ -1,5 +1,3 @@
1
- /** @type {import('@appium/types').Constraints} */
2
- export let desiredCapabilityConstraints: import('@appium/types').Constraints;
3
1
  export const validator: _validator.ValidateJS & {
4
2
  promise: typeof B;
5
3
  };
@@ -1 +1 @@
1
- {"version":3,"file":"desired-caps.d.ts","sourceRoot":"","sources":["../../../lib/basedriver/desired-caps.js"],"names":[],"mappings":"AASA,kDAAkD;AAClD,yCADW,OAAO,eAAe,EAAE,WAAW,CAgD5C;AArDF;;EAGI"}
1
+ {"version":3,"file":"desired-caps.d.ts","sourceRoot":"","sources":["../../../lib/basedriver/desired-caps.js"],"names":[],"mappings":"AAIA;;EAGI"}
@@ -1,11 +1,9 @@
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
  });
8
- exports.validator = exports.desiredCapabilityConstraints = void 0;
6
+ exports.validator = void 0;
9
7
 
10
8
  require("source-map-support/register");
11
9
 
@@ -15,57 +13,10 @@ var _validate = _interopRequireDefault(require("validate.js"));
15
13
 
16
14
  var _bluebird = _interopRequireDefault(require("bluebird"));
17
15
 
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
18
  const validator = _validate.default;
19
19
  exports.validator = validator;
20
- let desiredCapabilityConstraints = {
21
- platformName: {
22
- presence: true,
23
- isString: true
24
- },
25
- deviceName: {
26
- isString: true
27
- },
28
- platformVersion: {
29
- isString: true
30
- },
31
- newCommandTimeout: {
32
- isNumber: true
33
- },
34
- automationName: {
35
- isString: true
36
- },
37
- autoLaunch: {
38
- isBoolean: true
39
- },
40
- udid: {
41
- isString: true
42
- },
43
- orientation: {
44
- inclusion: ['LANDSCAPE', 'PORTRAIT']
45
- },
46
- autoWebview: {
47
- isBoolean: true
48
- },
49
- noReset: {
50
- isBoolean: true
51
- },
52
- fullReset: {
53
- isBoolean: true
54
- },
55
- language: {
56
- isString: true
57
- },
58
- locale: {
59
- isString: true
60
- },
61
- eventTimings: {
62
- isBoolean: true
63
- },
64
- printPageSourceOnFindFailure: {
65
- isBoolean: true
66
- }
67
- };
68
- exports.desiredCapabilityConstraints = desiredCapabilityConstraints;
69
20
 
70
21
  validator.validators.isString = function isString(value) {
71
22
  if (typeof value === 'string') {
@@ -166,4 +117,4 @@ validator.promise = _bluebird.default;
166
117
  validator.prettify = function prettify(val) {
167
118
  return val;
168
119
  };
169
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ2YWxpZGF0b3IiLCJfdmFsaWRhdG9yIiwiZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50cyIsInBsYXRmb3JtTmFtZSIsInByZXNlbmNlIiwiaXNTdHJpbmciLCJkZXZpY2VOYW1lIiwicGxhdGZvcm1WZXJzaW9uIiwibmV3Q29tbWFuZFRpbWVvdXQiLCJpc051bWJlciIsImF1dG9tYXRpb25OYW1lIiwiYXV0b0xhdW5jaCIsImlzQm9vbGVhbiIsInVkaWQiLCJvcmllbnRhdGlvbiIsImluY2x1c2lvbiIsImF1dG9XZWJ2aWV3Iiwibm9SZXNldCIsImZ1bGxSZXNldCIsImxhbmd1YWdlIiwibG9jYWxlIiwiZXZlbnRUaW1pbmdzIiwicHJpbnRQYWdlU291cmNlT25GaW5kRmFpbHVyZSIsInZhbGlkYXRvcnMiLCJ2YWx1ZSIsImlzTmFOIiwiTnVtYmVyIiwibG9nIiwid2FybiIsImluY2x1ZGVzIiwiaXNPYmplY3QiLCJpc0FycmF5IiwiQXJyYXkiLCJkZXByZWNhdGVkIiwib3B0aW9ucyIsImtleSIsImluY2x1c2lvbkNhc2VJbnNlbnNpdGl2ZSIsIm9wdGlvbiIsInRvTG93ZXJDYXNlIiwidG9TdHJpbmciLCJwcm9taXNlIiwiQiIsInByZXR0aWZ5IiwidmFsIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2Jhc2Vkcml2ZXIvZGVzaXJlZC1jYXBzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IF92YWxpZGF0b3IgZnJvbSAndmFsaWRhdGUuanMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuXG5jb25zdCB2YWxpZGF0b3IgPVxuICAvKiogQHR5cGUge2ltcG9ydCgndmFsaWRhdGUuanMnKS5WYWxpZGF0ZUpTICYge3Byb21pc2U6IHR5cGVvZiBpbXBvcnQoJ2JsdWViaXJkJyl9fSAqLyAoXG4gICAgX3ZhbGlkYXRvclxuICApO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNvbnN0cmFpbnRzfSAqL1xubGV0IGRlc2lyZWRDYXBhYmlsaXR5Q29uc3RyYWludHMgPSB7XG4gIHBsYXRmb3JtTmFtZToge1xuICAgIHByZXNlbmNlOiB0cnVlLFxuICAgIGlzU3RyaW5nOiB0cnVlLFxuICB9LFxuICBkZXZpY2VOYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWUsXG4gIH0sXG4gIHBsYXRmb3JtVmVyc2lvbjoge1xuICAgIGlzU3RyaW5nOiB0cnVlLFxuICB9LFxuICBuZXdDb21tYW5kVGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlLFxuICB9LFxuICBhdXRvbWF0aW9uTmFtZToge1xuICAgIGlzU3RyaW5nOiB0cnVlLFxuICB9LFxuICBhdXRvTGF1bmNoOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlLFxuICB9LFxuICB1ZGlkOiB7XG4gICAgaXNTdHJpbmc6IHRydWUsXG4gIH0sXG4gIG9yaWVudGF0aW9uOiB7XG4gICAgaW5jbHVzaW9uOiBbJ0xBTkRTQ0FQRScsICdQT1JUUkFJVCddLFxuICB9LFxuICBhdXRvV2Vidmlldzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZSxcbiAgfSxcbiAgbm9SZXNldDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZSxcbiAgfSxcbiAgZnVsbFJlc2V0OiB7XG4gICAgaXNCb29sZWFuOiB0cnVlLFxuICB9LFxuICBsYW5ndWFnZToge1xuICAgIGlzU3RyaW5nOiB0cnVlLFxuICB9LFxuICBsb2NhbGU6IHtcbiAgICBpc1N0cmluZzogdHJ1ZSxcbiAgfSxcbiAgZXZlbnRUaW1pbmdzOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlLFxuICB9LFxuICBwcmludFBhZ2VTb3VyY2VPbkZpbmRGYWlsdXJlOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlLFxuICB9LFxufTtcblxudmFsaWRhdG9yLnZhbGlkYXRvcnMuaXNTdHJpbmcgPSBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAnbXVzdCBiZSBvZiB0eXBlIHN0cmluZyc7XG59O1xudmFsaWRhdG9yLnZhbGlkYXRvcnMuaXNOdW1iZXIgPSBmdW5jdGlvbiBpc051bWJlcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIGFsbG93IGEgc3RyaW5nIHZhbHVlXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICFpc05hTihOdW1iZXIodmFsdWUpKSkge1xuICAgIGxvZy53YXJuKCdOdW1iZXIgY2FwYWJpbGl0eSBwYXNzZWQgaW4gYXMgc3RyaW5nLiBGdW5jdGlvbmFsaXR5IG1heSBiZSBjb21wcm9taXNlZC4nKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAnbXVzdCBiZSBvZiB0eXBlIG51bWJlcic7XG59O1xudmFsaWRhdG9yLnZhbGlkYXRvcnMuaXNCb29sZWFuID0gZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gYWxsb3cgYSBzdHJpbmcgdmFsdWVcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgWyd0cnVlJywgJ2ZhbHNlJywgJyddLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAnbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4nO1xufTtcbnZhbGlkYXRvci52YWxpZGF0b3JzLmlzT2JqZWN0ID0gZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gJ211c3QgYmUgb2YgdHlwZSBvYmplY3QnO1xufTtcbnZhbGlkYXRvci52YWxpZGF0b3JzLmlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAnbXVzdCBiZSBvZiB0eXBlIGFycmF5Jztcbn07XG52YWxpZGF0b3IudmFsaWRhdG9ycy5kZXByZWNhdGVkID0gZnVuY3Rpb24gZGVwcmVjYXRlZCh2YWx1ZSwgb3B0aW9ucywga2V5KSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgbG9nLndhcm4oYCR7a2V5fSBpcyBhIGRlcHJlY2F0ZWQgY2FwYWJpbGl0eWApO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbnZhbGlkYXRvci52YWxpZGF0b3JzLmluY2x1c2lvbkNhc2VJbnNlbnNpdGl2ZSA9IGZ1bmN0aW9uIGluY2x1c2lvbkNhc2VJbnNlbnNpdGl2ZSh2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gJ3VucmVjb2duaXNlZCc7XG4gIH1cbiAgZm9yIChsZXQgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9uLnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYCR7dmFsdWV9IG5vdCBwYXJ0IG9mICR7b3B0aW9ucy50b1N0cmluZygpfWA7XG59O1xuXG52YWxpZGF0b3IucHJvbWlzZSA9IEI7XG52YWxpZGF0b3IucHJldHRpZnkgPSBmdW5jdGlvbiBwcmV0dGlmeSh2YWwpIHtcbiAgcmV0dXJuIHZhbDtcbn07XG5cbmV4cG9ydCB7ZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50cywgdmFsaWRhdG9yfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxTQUFTLEdBRVhDLGlCQUZKOztBQU1BLElBQUlDLDRCQUE0QixHQUFHO0VBQ2pDQyxZQUFZLEVBQUU7SUFDWkMsUUFBUSxFQUFFLElBREU7SUFFWkMsUUFBUSxFQUFFO0VBRkUsQ0FEbUI7RUFLakNDLFVBQVUsRUFBRTtJQUNWRCxRQUFRLEVBQUU7RUFEQSxDQUxxQjtFQVFqQ0UsZUFBZSxFQUFFO0lBQ2ZGLFFBQVEsRUFBRTtFQURLLENBUmdCO0VBV2pDRyxpQkFBaUIsRUFBRTtJQUNqQkMsUUFBUSxFQUFFO0VBRE8sQ0FYYztFQWNqQ0MsY0FBYyxFQUFFO0lBQ2RMLFFBQVEsRUFBRTtFQURJLENBZGlCO0VBaUJqQ00sVUFBVSxFQUFFO0lBQ1ZDLFNBQVMsRUFBRTtFQURELENBakJxQjtFQW9CakNDLElBQUksRUFBRTtJQUNKUixRQUFRLEVBQUU7RUFETixDQXBCMkI7RUF1QmpDUyxXQUFXLEVBQUU7SUFDWEMsU0FBUyxFQUFFLENBQUMsV0FBRCxFQUFjLFVBQWQ7RUFEQSxDQXZCb0I7RUEwQmpDQyxXQUFXLEVBQUU7SUFDWEosU0FBUyxFQUFFO0VBREEsQ0ExQm9CO0VBNkJqQ0ssT0FBTyxFQUFFO0lBQ1BMLFNBQVMsRUFBRTtFQURKLENBN0J3QjtFQWdDakNNLFNBQVMsRUFBRTtJQUNU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
120
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ2YWxpZGF0b3IiLCJfdmFsaWRhdG9yIiwidmFsaWRhdG9ycyIsImlzU3RyaW5nIiwidmFsdWUiLCJpc051bWJlciIsImlzTmFOIiwiTnVtYmVyIiwibG9nIiwid2FybiIsImlzQm9vbGVhbiIsImluY2x1ZGVzIiwiaXNPYmplY3QiLCJpc0FycmF5IiwiQXJyYXkiLCJkZXByZWNhdGVkIiwib3B0aW9ucyIsImtleSIsImluY2x1c2lvbkNhc2VJbnNlbnNpdGl2ZSIsIm9wdGlvbiIsInRvTG93ZXJDYXNlIiwidG9TdHJpbmciLCJwcm9taXNlIiwiQiIsInByZXR0aWZ5IiwidmFsIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2Jhc2Vkcml2ZXIvZGVzaXJlZC1jYXBzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IF92YWxpZGF0b3IgZnJvbSAndmFsaWRhdGUuanMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdG9yID1cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ3ZhbGlkYXRlLmpzJykuVmFsaWRhdGVKUyAmIHtwcm9taXNlOiB0eXBlb2YgaW1wb3J0KCdibHVlYmlyZCcpfX0gKi8gKFxuICAgIF92YWxpZGF0b3JcbiAgKTtcblxudmFsaWRhdG9yLnZhbGlkYXRvcnMuaXNTdHJpbmcgPSBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAnbXVzdCBiZSBvZiB0eXBlIHN0cmluZyc7XG59O1xudmFsaWRhdG9yLnZhbGlkYXRvcnMuaXNOdW1iZXIgPSBmdW5jdGlvbiBpc051bWJlcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIGFsbG93IGEgc3RyaW5nIHZhbHVlXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICFpc05hTihOdW1iZXIodmFsdWUpKSkge1xuICAgIGxvZy53YXJuKCdOdW1iZXIgY2FwYWJpbGl0eSBwYXNzZWQgaW4gYXMgc3RyaW5nLiBGdW5jdGlvbmFsaXR5IG1heSBiZSBjb21wcm9taXNlZC4nKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAnbXVzdCBiZSBvZiB0eXBlIG51bWJlcic7XG59O1xudmFsaWRhdG9yLnZhbGlkYXRvcnMuaXNCb29sZWFuID0gZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gYWxsb3cgYSBzdHJpbmcgdmFsdWVcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgWyd0cnVlJywgJ2ZhbHNlJywgJyddLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAnbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4nO1xufTtcbnZhbGlkYXRvci52YWxpZGF0b3JzLmlzT2JqZWN0ID0gZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gJ211c3QgYmUgb2YgdHlwZSBvYmplY3QnO1xufTtcbnZhbGlkYXRvci52YWxpZGF0b3JzLmlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAnbXVzdCBiZSBvZiB0eXBlIGFycmF5Jztcbn07XG52YWxpZGF0b3IudmFsaWRhdG9ycy5kZXByZWNhdGVkID0gZnVuY3Rpb24gZGVwcmVjYXRlZCh2YWx1ZSwgb3B0aW9ucywga2V5KSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgbG9nLndhcm4oYCR7a2V5fSBpcyBhIGRlcHJlY2F0ZWQgY2FwYWJpbGl0eWApO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbnZhbGlkYXRvci52YWxpZGF0b3JzLmluY2x1c2lvbkNhc2VJbnNlbnNpdGl2ZSA9IGZ1bmN0aW9uIGluY2x1c2lvbkNhc2VJbnNlbnNpdGl2ZSh2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gJ3VucmVjb2duaXNlZCc7XG4gIH1cbiAgZm9yIChsZXQgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9uLnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYCR7dmFsdWV9IG5vdCBwYXJ0IG9mICR7b3B0aW9ucy50b1N0cmluZygpfWA7XG59O1xuXG52YWxpZGF0b3IucHJvbWlzZSA9IEI7XG52YWxpZGF0b3IucHJldHRpZnkgPSBmdW5j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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desired-caps.js","names":["validator","_validator","validators","isString","value","isNumber","isNaN","Number","log","warn","isBoolean","includes","isObject","isArray","Array","deprecated","options","key","inclusionCaseInsensitive","option","toLowerCase","toString","promise","B","prettify","val"],"sources":["../../../lib/basedriver/desired-caps.js"],"sourcesContent":["import log from './logger';\nimport _validator from 'validate.js';\nimport B from 'bluebird';\n\nexport const validator =\n /** @type {import('validate.js').ValidateJS & {promise: typeof import('bluebird')}} */ (\n _validator\n );\n\nvalidator.validators.isString = function isString(value) {\n if (typeof value === 'string') {\n return null;\n }\n\n if (typeof value === 'undefined') {\n return null;\n }\n\n return 'must be of type string';\n};\nvalidator.validators.isNumber = function isNumber(value) {\n if (typeof value === 'number') {\n return null;\n }\n\n if (typeof value === 'undefined') {\n return null;\n }\n\n // allow a string value\n if (typeof value === 'string' && !isNaN(Number(value))) {\n log.warn('Number capability passed in as string. Functionality may be compromised.');\n return null;\n }\n\n return 'must be of type number';\n};\nvalidator.validators.isBoolean = function isBoolean(value) {\n if (typeof value === 'boolean') {\n return null;\n }\n\n // allow a string value\n if (typeof value === 'string' && ['true', 'false', ''].includes(value)) {\n return null;\n }\n\n if (typeof value === 'undefined') {\n return null;\n }\n\n return 'must be of type boolean';\n};\nvalidator.validators.isObject = function isObject(value) {\n if (typeof value === 'object') {\n return null;\n }\n\n if (typeof value === 'undefined') {\n return null;\n }\n\n return 'must be of type object';\n};\nvalidator.validators.isArray = function isArray(value) {\n if (Array.isArray(value)) {\n return null;\n }\n\n if (typeof value === 'undefined') {\n return null;\n }\n\n return 'must be of type array';\n};\nvalidator.validators.deprecated = function deprecated(value, options, key) {\n if (options) {\n log.warn(`${key} is a deprecated capability`);\n }\n return null;\n};\nvalidator.validators.inclusionCaseInsensitive = function inclusionCaseInsensitive(value, options) {\n if (typeof value === 'undefined') {\n return null;\n } else if (typeof value !== 'string') {\n return 'unrecognised';\n }\n for (let option of options) {\n if (option.toLowerCase() === value.toLowerCase()) {\n return null;\n }\n }\n return `${value} not part of ${options.toString()}`;\n};\n\nvalidator.promise = B;\nvalidator.prettify = function prettify(val) {\n return val;\n};\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;;;AAEO,MAAMA,SAAS,GAElBC,iBAFG;;;AAKPD,SAAS,CAACE,UAAV,CAAqBC,QAArB,GAAgC,SAASA,QAAT,CAAkBC,KAAlB,EAAyB;EACvD,IAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;IAC7B,OAAO,IAAP;EACD;;EAED,IAAI,OAAOA,KAAP,KAAiB,WAArB,EAAkC;IAChC,OAAO,IAAP;EACD;;EAED,OAAO,wBAAP;AACD,CAVD;;AAWAJ,SAAS,CAACE,UAAV,CAAqBG,QAArB,GAAgC,SAASA,QAAT,CAAkBD,KAAlB,EAAyB;EACvD,IAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;IAC7B,OAAO,IAAP;EACD;;EAED,IAAI,OAAOA,KAAP,KAAiB,WAArB,EAAkC;IAChC,OAAO,IAAP;EACD;;EAGD,IAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6B,CAACE,KAAK,CAACC,MAAM,CAACH,KAAD,CAAP,CAAvC,EAAwD;IACtDI,eAAA,CAAIC,IAAJ,CAAS,0EAAT;;IACA,OAAO,IAAP;EACD;;EAED,OAAO,wBAAP;AACD,CAhBD;;AAiBAT,SAAS,CAACE,UAAV,CAAqBQ,SAArB,GAAiC,SAASA,SAAT,CAAmBN,KAAnB,EAA0B;EACzD,IAAI,OAAOA,KAAP,KAAiB,SAArB,EAAgC;IAC9B,OAAO,IAAP;EACD;;EAGD,IAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6B,CAAC,MAAD,EAAS,OAAT,EAAkB,EAAlB,EAAsBO,QAAtB,CAA+BP,KAA/B,CAAjC,EAAwE;IACtE,OAAO,IAAP;EACD;;EAED,IAAI,OAAOA,KAAP,KAAiB,WAArB,EAAkC;IAChC,OAAO,IAAP;EACD;;EAED,OAAO,yBAAP;AACD,CAfD;;AAgBAJ,SAAS,CAACE,UAAV,CAAqBU,QAArB,GAAgC,SAASA,QAAT,CAAkBR,KAAlB,EAAyB;EACvD,IAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;IAC7B,OAAO,IAAP;EACD;;EAED,IAAI,OAAOA,KAAP,KAAiB,WAArB,EAAkC;IAChC,OAAO,IAAP;EACD;;EAED,OAAO,wBAAP;AACD,CAVD;;AAWAJ,SAAS,CAACE,UAAV,CAAqBW,OAArB,GAA+B,SAASA,OAAT,CAAiBT,KAAjB,EAAwB;EACrD,IAAIU,KAAK,CAACD,OAAN,CAAcT,KAAd,CAAJ,EAA0B;IACxB,OAAO,IAAP;EACD;;EAED,IAAI,OAAOA,KAAP,KAAiB,WAArB,EAAkC;IAChC,OAAO,IAAP;EACD;;EAED,OAAO,uBAAP;AACD,CAVD;;AAWAJ,SAAS,CAACE,UAAV,CAAqBa,UAArB,GAAkC,SAASA,UAAT,CAAoBX,KAApB,EAA2BY,OAA3B,EAAoCC,GAApC,EAAyC;EACzE,IAAID,OAAJ,EAAa;IACXR,eAAA,CAAIC,IAAJ,CAAU,GAAEQ,GAAI,6BAAhB;EACD;;EACD,OAAO,IAAP;AACD,CALD;;AAMAjB,SAAS,CAACE,UAAV,CAAqBgB,wBAArB,GAAgD,SAASA,wBAAT,CAAkCd,KAAlC,EAAyCY,OAAzC,EAAkD;EAChG,IAAI,OAAOZ,KAAP,KAAiB,WAArB,EAAkC;IAChC,OAAO,IAAP;EACD,CAFD,MAEO,IAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;IACpC,OAAO,cAAP;EACD;;EACD,KAAK,IAAIe,MAAT,IAAmBH,OAAnB,EAA4B;IAC1B,IAAIG,MAAM,CAACC,WAAP,OAAyBhB,KAAK,CAACgB,WAAN,EAA7B,EAAkD;MAChD,OAAO,IAAP;IACD;EACF;;EACD,OAAQ,GAAEhB,KAAM,gBAAeY,OAAO,CAACK,QAAR,EAAmB,EAAlD;AACD,CAZD;;AAcArB,SAAS,CAACsB,OAAV,GAAoBC,iBAApB;;AACAvB,SAAS,CAACwB,QAAV,GAAqB,SAASA,QAAT,CAAkBC,GAAlB,EAAuB;EAC1C,OAAOA,GAAP;AACD,CAFD"}
@@ -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
  });
@@ -17,6 +15,8 @@ var _support = require("@appium/support");
17
15
 
18
16
  var _errors = require("../protocol/errors");
19
17
 
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
20
20
  const MAX_SETTINGS_SIZE = 20 * 1024 * 1024;
21
21
  exports.MAX_SETTINGS_SIZE = MAX_SETTINGS_SIZE;
22
22
 
@@ -66,4 +66,4 @@ class DeviceSettings {
66
66
  exports.DeviceSettings = DeviceSettings;
67
67
  var _default = DeviceSettings;
68
68
  exports.default = _default;
69
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNQVhfU0VUVElOR1NfU0laRSIsIkRldmljZVNldHRpbmdzIiwiX3NldHRpbmdzIiwiX29uU2V0dGluZ3NVcGRhdGUiLCJjb25zdHJ1Y3RvciIsImRlZmF1bHRTZXR0aW5ncyIsIm9uU2V0dGluZ3NVcGRhdGUiLCJ1cGRhdGUiLCJuZXdTZXR0aW5ncyIsIl8iLCJpc1BsYWluT2JqZWN0IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJKU09OIiwic3RyaW5naWZ5Iiwibm9kZSIsImdldE9iamVjdFNpemUiLCJ1dGlsIiwidG9SZWFkYWJsZVNpemVTdHJpbmciLCJwcm9wcyIsImtleXMiLCJwcm9wIiwiaXNVbmRlZmluZWQiLCJsb2ciLCJkZWJ1ZyIsImdldFNldHRpbmdzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2Jhc2Vkcml2ZXIvZGV2aWNlLXNldHRpbmdzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7bm9kZSwgdXRpbH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7ZXJyb3JzfSBmcm9tICcuLi9wcm90b2NvbC9lcnJvcnMnO1xuXG4vKipcbiAqIE1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIGEgZ2l2ZW4gZHJpdmVyJ3Mgc2V0dGluZ3Mgb2JqZWN0ICh3aGljaCBpcyBpbnRlcm5hbCB0byB7QGxpbmtjb2RlIERyaXZlclNldHRpbmdzfSkuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfU0VUVElOR1NfU0laRSA9IDIwICogMTAyNCAqIDEwMjQ7IC8vIDIwIE1CXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEBpbXBsZW1lbnRzIHtJRGV2aWNlU2V0dGluZ3M8VD59XG4gKi9cbmNsYXNzIERldmljZVNldHRpbmdzIHtcbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsVD59XG4gICAqL1xuICBfc2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQHR5cGUge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlNldHRpbmdzVXBkYXRlTGlzdGVuZXI8VD59XG4gICAqL1xuICBfb25TZXR0aW5nc1VwZGF0ZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIF9zaGFsbG93IGNvcHlfIG9mIHRoZSBgZGVmYXVsdFNldHRpbmdzYCBwYXJhbWV0ZXIhXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZyxUPn0gW2RlZmF1bHRTZXR0aW5nc11cbiAgICogQHBhcmFtIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5TZXR0aW5nc1VwZGF0ZUxpc3RlbmVyPFQ+fSBbb25TZXR0aW5nc1VwZGF0ZV1cbiAgICovXG4gIGNvbnN0cnVjdG9yKGRlZmF1bHRTZXR0aW5ncyA9IHt9LCBvblNldHRpbmdzVXBkYXRlID0gYXN5bmMgKCkgPT4ge30pIHtcbiAgICB0aGlzLl9zZXR0aW5ncyA9IHsuLi5kZWZhdWx0U2V0dGluZ3N9O1xuICAgIHRoaXMuX29uU2V0dGluZ3NVcGRhdGUgPSBvblNldHRpbmdzVXBkYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxzIHVwZGF0ZVNldHRpbmdzIGZyb20gaW1wbGVtZW50aW5nIGRyaXZlciBldmVyeSB0aW1lIGEgc2V0dGluZyBpcyBjaGFuZ2VkLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsVD59IG5ld1NldHRpbmdzXG4gICAqL1xuICBhc3luYyB1cGRhdGUobmV3U2V0dGluZ3MpIHtcbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChuZXdTZXR0aW5ncykpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGBTZXR0aW5ncyB1cGRhdGUgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHZhbGlkIEpTT04uIEdvdCBgICtcbiAgICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShuZXdTZXR0aW5ncyl9IGluc3RlYWRgXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChub2RlLmdldE9iamVjdFNpemUoey4uLnRoaXMuX3NldHRpbmdzLCAuLi5uZXdTZXR0aW5nc30pID49IE1BWF9TRVRUSU5HU19TSVpFKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgTmV3IHNldHRpbmdzIGNhbm5vdCBiZSBhcHBsaWVkLCBiZWNhdXNlIHRoZSBvdmVyYWxsIGAgK1xuICAgICAgICAgIGBvYmplY3Qgc2l6ZSBleGNlZWRzIHRoZSBhbGxvd2VkIGxpbWl0IG9mICR7dXRpbC50b1JlYWRhYmxlU2l6ZVN0cmluZyhNQVhfU0VUVElOR1NfU0laRSl9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wcyA9IC8qKiBAdHlwZSB7KGtleW9mIFQgJiBzdHJpbmcpW119ICovIChfLmtleXMobmV3U2V0dGluZ3MpKTtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHtcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLl9zZXR0aW5nc1twcm9wXSkpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzW3Byb3BdID09PSBuZXdTZXR0aW5nc1twcm9wXSkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgVGhlIHZhbHVlIG9mICcke3Byb3B9JyBzZXR0aW5nIGRpZCBub3QgY2hhbmdlLiBTa2lwcGluZyB0aGUgdXBkYXRlIGZvciBpdGApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLl9vblNldHRpbmdzVXBkYXRlKHByb3AsIG5ld1NldHRpbmdzW3Byb3BdLCB0aGlzLl9zZXR0aW5nc1twcm9wXSk7XG4gICAgICB0aGlzLl9zZXR0aW5nc1twcm9wXSA9IG5ld1NldHRpbmdzW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIGdldFNldHRpbmdzKCkge1xuICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEZXZpY2VTZXR0aW5ncztcbmV4cG9ydCB7RGV2aWNlU2V0dGluZ3N9O1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRGV2aWNlU2V0dGluZ3M8VD59IElEZXZpY2VTZXR0aW5nc1xuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS08sTUFBTUEsaUJBQWlCLEdBQUcsS0FBSyxJQUFMLEdBQVksSUFBdEM7OztBQU1QLE1BQU1DLGNBQU4sQ0FBcUI7RUFLbkJDLFNBQVM7RUFNVEMsaUJBQWlCOztFQU9qQkMsV0FBVyxDQUFDQyxlQUFlLEdBQUcsRUFBbkIsRUFBdUJDLGdCQUFnQixHQUFHLFlBQVksQ0FBRSxDQUF4RCxFQUEwRDtJQUNuRSxLQUFLSixTQUFMLEdBQWlCLEVBQUMsR0FBR0c7SUFBSixDQUFqQjtJQUNBLEtBQUtGLGlCQUFMLEdBQXlCRyxnQkFBekI7RUFDRDs7RUFNVyxNQUFOQyxNQUFNLENBQUNDLFdBQUQsRUFBYztJQUN4QixJQUFJLENBQUNDLGVBQUEsQ0FBRUMsYUFBRixDQUFnQkYsV0FBaEIsQ0FBTCxFQUFtQztNQUNqQyxNQUFNLElBQUlHLGNBQUEsQ0FBT0Msb0JBQVgsQ0FDSCx3REFBRCxHQUNHLEdBQUVDLElBQUksQ0FBQ0MsU0FBTCxDQUFlTixXQUFmLENBQTRCLFVBRjdCLENBQU47SUFJRDs7SUFFRCxJQUFJTyxhQUFBLENBQUtDLGFBQUwsQ0FBbUIsRUFBQyxHQUFHLEtBQUtkLFNBQVQ7TUFBb0IsR0FBR007SUFBdkIsQ0FBbkIsS0FBMkRSLGlCQUEvRCxFQUFrRjtNQUNoRixNQUFNLElBQUlXLGNBQUEsQ0FBT0Msb0JBQVgsQ0FDSCxzREFBRCxHQUNHLDRDQUEyQ0ssYUFBQSxDQUFLQyxvQkFBTCxDQUEwQmxCLGlCQUExQixDQUE2QyxFQUZ2RixDQUFOO0lBSUQ7O0lBRUQsTUFBTW1CLEtBQUssR0FBd0NWLGVBQUEsQ0FBRVcsSUFBRixDQUFPWixXQUFQLENBQW5EOztJQUNBLEtBQUssTUFBTWEsSUFBWCxJQUFtQkYsS0FBbkIsRUFBMEI7TUFDeEIsSUFBSSxDQUFDVixlQUFBLENBQUVhLFdBQUYsQ0FBYyxLQUFLcEIsU0FBTCxDQUFlbUIsSUFBZixDQUFkLENBQUwsRUFBMEM7UUFDeEMsSUFBSSxLQUFLbkIsU0FBTCxDQUFlbUIsSUFBZixNQUF5QmIsV0FBVyxDQUFDYSxJQUFELENBQXhDLEVBQWdEO1VBQzlDRSxlQUFBLENBQUlDLEtBQUosQ0FBVyxpQkFBZ0JILElBQUssc0RBQWhDOztVQUNBO1FBQ0Q7TUFDRjs7TUFDRCxNQUFNLEtBQUtsQixpQkFBTCxDQUF1QmtCLElBQXZCLEVBQTZCYixXQUFXLENBQUNhLElBQUQsQ0FBeEMsRUFBZ0QsS0FBS25CLFNBQUwsQ0FBZW1CLElBQWYsQ0FBaEQsQ0FBTjtNQUNBLEtBQUtuQixTQUFMLENBQWVtQixJQUFmLElBQXVCYixXQUFXLENBQUNhLElBQUQsQ0FBbEM7SUFDRDtFQUNGOztFQUVESSxXQUFXLEdBQUc7SUFDWixPQUFPLEtBQUt2QixTQUFaO0VBQ0Q7O0FBekRrQjs7O2VBNERORCxjIn0=
69
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNQVhfU0VUVElOR1NfU0laRSIsIkRldmljZVNldHRpbmdzIiwiX3NldHRpbmdzIiwiX29uU2V0dGluZ3NVcGRhdGUiLCJjb25zdHJ1Y3RvciIsImRlZmF1bHRTZXR0aW5ncyIsIm9uU2V0dGluZ3NVcGRhdGUiLCJ1cGRhdGUiLCJuZXdTZXR0aW5ncyIsIl8iLCJpc1BsYWluT2JqZWN0IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJKU09OIiwic3RyaW5naWZ5Iiwibm9kZSIsImdldE9iamVjdFNpemUiLCJ1dGlsIiwidG9SZWFkYWJsZVNpemVTdHJpbmciLCJwcm9wcyIsImtleXMiLCJwcm9wIiwiaXNVbmRlZmluZWQiLCJsb2ciLCJkZWJ1ZyIsImdldFNldHRpbmdzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2Jhc2Vkcml2ZXIvZGV2aWNlLXNldHRpbmdzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7bm9kZSwgdXRpbH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7ZXJyb3JzfSBmcm9tICcuLi9wcm90b2NvbC9lcnJvcnMnO1xuXG4vKipcbiAqIE1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIGEgZ2l2ZW4gZHJpdmVyJ3Mgc2V0dGluZ3Mgb2JqZWN0ICh3aGljaCBpcyBpbnRlcm5hbCB0byB7QGxpbmtjb2RlIERyaXZlclNldHRpbmdzfSkuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfU0VUVElOR1NfU0laRSA9IDIwICogMTAyNCAqIDEwMjQ7IC8vIDIwIE1CXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEBpbXBsZW1lbnRzIHtJRGV2aWNlU2V0dGluZ3M8VD59XG4gKi9cbmNsYXNzIERldmljZVNldHRpbmdzIHtcbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsVD59XG4gICAqL1xuICBfc2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQHR5cGUge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlNldHRpbmdzVXBkYXRlTGlzdGVuZXI8VD59XG4gICAqL1xuICBfb25TZXR0aW5nc1VwZGF0ZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIF9zaGFsbG93IGNvcHlfIG9mIHRoZSBgZGVmYXVsdFNldHRpbmdzYCBwYXJhbWV0ZXIhXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZyxUPn0gW2RlZmF1bHRTZXR0aW5nc11cbiAgICogQHBhcmFtIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5TZXR0aW5nc1VwZGF0ZUxpc3RlbmVyPFQ+fSBbb25TZXR0aW5nc1VwZGF0ZV1cbiAgICovXG4gIGNvbnN0cnVjdG9yKGRlZmF1bHRTZXR0aW5ncyA9IHt9LCBvblNldHRpbmdzVXBkYXRlID0gYXN5bmMgKCkgPT4ge30pIHtcbiAgICB0aGlzLl9zZXR0aW5ncyA9IHsuLi5kZWZhdWx0U2V0dGluZ3N9O1xuICAgIHRoaXMuX29uU2V0dGluZ3NVcGRhdGUgPSBvblNldHRpbmdzVXBkYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIGNhbGxzIHVwZGF0ZVNldHRpbmdzIGZyb20gaW1wbGVtZW50aW5nIGRyaXZlciBldmVyeSB0aW1lIGEgc2V0dGluZyBpcyBjaGFuZ2VkLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsVD59IG5ld1NldHRpbmdzXG4gICAqL1xuICBhc3luYyB1cGRhdGUobmV3U2V0dGluZ3MpIHtcbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChuZXdTZXR0aW5ncykpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGBTZXR0aW5ncyB1cGRhdGUgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHZhbGlkIEpTT04uIEdvdCBgICtcbiAgICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShuZXdTZXR0aW5ncyl9IGluc3RlYWRgXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChub2RlLmdldE9iamVjdFNpemUoey4uLnRoaXMuX3NldHRpbmdzLCAuLi5uZXdTZXR0aW5nc30pID49IE1BWF9TRVRUSU5HU19TSVpFKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgTmV3IHNldHRpbmdzIGNhbm5vdCBiZSBhcHBsaWVkLCBiZWNhdXNlIHRoZSBvdmVyYWxsIGAgK1xuICAgICAgICAgIGBvYmplY3Qgc2l6ZSBleGNlZWRzIHRoZSBhbGxvd2VkIGxpbWl0IG9mICR7dXRpbC50b1JlYWRhYmxlU2l6ZVN0cmluZyhNQVhfU0VUVElOR1NfU0laRSl9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wcyA9IC8qKiBAdHlwZSB7KGtleW9mIFQgJiBzdHJpbmcpW119ICovIChfLmtleXMobmV3U2V0dGluZ3MpKTtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHtcbiAgICAgIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLl9zZXR0aW5nc1twcm9wXSkpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzW3Byb3BdID09PSBuZXdTZXR0aW5nc1twcm9wXSkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgVGhlIHZhbHVlIG9mICcke3Byb3B9JyBzZXR0aW5nIGRpZCBub3QgY2hhbmdlLiBTa2lwcGluZyB0aGUgdXBkYXRlIGZvciBpdGApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLl9vblNldHRpbmdzVXBkYXRlKHByb3AsIG5ld1NldHRpbmdzW3Byb3BdLCB0aGlzLl9zZXR0aW5nc1twcm9wXSk7XG4gICAgICB0aGlzLl9zZXR0aW5nc1twcm9wXSA9IG5ld1NldHRpbmdzW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIGdldFNldHRpbmdzKCkge1xuICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEZXZpY2VTZXR0aW5ncztcbmV4cG9ydCB7RGV2aWNlU2V0dGluZ3N9O1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRGV2aWNlU2V0dGluZ3M8VD59IElEZXZpY2VTZXR0aW5nc1xuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBS08sTUFBTUEsaUJBQWlCLEdBQUcsS0FBSyxJQUFMLEdBQVksSUFBdEM7OztBQU1QLE1BQU1DLGNBQU4sQ0FBcUI7RUFLbkJDLFNBQVM7RUFNVEMsaUJBQWlCOztFQU9qQkMsV0FBVyxDQUFDQyxlQUFlLEdBQUcsRUFBbkIsRUFBdUJDLGdCQUFnQixHQUFHLFlBQVksQ0FBRSxDQUF4RCxFQUEwRDtJQUNuRSxLQUFLSixTQUFMLEdBQWlCLEVBQUMsR0FBR0c7SUFBSixDQUFqQjtJQUNBLEtBQUtGLGlCQUFMLEdBQXlCRyxnQkFBekI7RUFDRDs7RUFNVyxNQUFOQyxNQUFNLENBQUNDLFdBQUQsRUFBYztJQUN4QixJQUFJLENBQUNDLGVBQUEsQ0FBRUMsYUFBRixDQUFnQkYsV0FBaEIsQ0FBTCxFQUFtQztNQUNqQyxNQUFNLElBQUlHLGNBQUEsQ0FBT0Msb0JBQVgsQ0FDSCx3REFBRCxHQUNHLEdBQUVDLElBQUksQ0FBQ0MsU0FBTCxDQUFlTixXQUFmLENBQTRCLFVBRjdCLENBQU47SUFJRDs7SUFFRCxJQUFJTyxhQUFBLENBQUtDLGFBQUwsQ0FBbUIsRUFBQyxHQUFHLEtBQUtkLFNBQVQ7TUFBb0IsR0FBR007SUFBdkIsQ0FBbkIsS0FBMkRSLGlCQUEvRCxFQUFrRjtNQUNoRixNQUFNLElBQUlXLGNBQUEsQ0FBT0Msb0JBQVgsQ0FDSCxzREFBRCxHQUNHLDRDQUEyQ0ssYUFBQSxDQUFLQyxvQkFBTCxDQUEwQmxCLGlCQUExQixDQUE2QyxFQUZ2RixDQUFOO0lBSUQ7O0lBRUQsTUFBTW1CLEtBQUssR0FBd0NWLGVBQUEsQ0FBRVcsSUFBRixDQUFPWixXQUFQLENBQW5EOztJQUNBLEtBQUssTUFBTWEsSUFBWCxJQUFtQkYsS0FBbkIsRUFBMEI7TUFDeEIsSUFBSSxDQUFDVixlQUFBLENBQUVhLFdBQUYsQ0FBYyxLQUFLcEIsU0FBTCxDQUFlbUIsSUFBZixDQUFkLENBQUwsRUFBMEM7UUFDeEMsSUFBSSxLQUFLbkIsU0FBTCxDQUFlbUIsSUFBZixNQUF5QmIsV0FBVyxDQUFDYSxJQUFELENBQXhDLEVBQWdEO1VBQzlDRSxlQUFBLENBQUlDLEtBQUosQ0FBVyxpQkFBZ0JILElBQUssc0RBQWhDOztVQUNBO1FBQ0Q7TUFDRjs7TUFDRCxNQUFNLEtBQUtsQixpQkFBTCxDQUF1QmtCLElBQXZCLEVBQTZCYixXQUFXLENBQUNhLElBQUQsQ0FBeEMsRUFBZ0QsS0FBS25CLFNBQUwsQ0FBZW1CLElBQWYsQ0FBaEQsQ0FBTjtNQUNBLEtBQUtuQixTQUFMLENBQWVtQixJQUFmLElBQXVCYixXQUFXLENBQUNhLElBQUQsQ0FBbEM7SUFDRDtFQUNGOztFQUVESSxXQUFXLEdBQUc7SUFDWixPQUFPLEtBQUt2QixTQUFaO0VBQ0Q7O0FBekRrQjs7O2VBNERORCxjIn0=