hl7-tstd 1.0.0-dev.0 → 1.0.0-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE.txt CHANGED
@@ -187,7 +187,7 @@
187
187
  same "printed page" as the copyright notice for easier
188
188
  identification within third-party archives.
189
189
 
190
- Copyright 2025 1nandagopal
190
+ Copyright 2026 1nandagopal
191
191
 
192
192
  Licensed under the Apache License, Version 2.0 (the "License");
193
193
  you may not use this file except in compliance with the License.
package/README.md CHANGED
@@ -2,22 +2,29 @@
2
2
 
3
3
  A simple package to create, parse & transform HL7 message.
4
4
 
5
- ```typescript
5
+ ![GitHub License](https://img.shields.io/github/license/1nandagopal/hl7-tstd)
6
+
7
+ ```javascript
6
8
  // CJS
7
9
  const { HL7 } = require('hl7-tstd');
10
+ ```
8
11
 
12
+ ```javascript
9
13
  // ESM
10
- import HL7, { type Segment } from 'hl7-tstd';
14
+ import { HL7 } from 'hl7-tstd';
15
+ ```
11
16
 
17
+ ```typescript
12
18
  // TS
13
- import HL7, { type Segment } from 'hl7-tstd';
19
+ import { HL7, type Segment } from 'hl7-tstd';
14
20
 
15
21
  const hl7 = new HL7(raw); // raw: raw HL7 message string
16
22
  ```
17
23
 
18
- > ⚠️ _Warning:_ `Segment` import is provided only to facilitate typing variables. It is not intended for intantiation. Stick to type-only import.
24
+ > [!WARNING]
25
+ > ⚠️ `Segment` is only a type export aimed at helping with type annotation. Using it for other purposes can lead to runtime exceptions.
19
26
 
20
- ### parseOptions
27
+ ## parseOptions
21
28
 
22
29
  Additional configs for hl7 parsing and building.
23
30
 
@@ -28,20 +35,22 @@ Additional configs for hl7 parsing and building.
28
35
  | componentDelim | `^` | `string` |
29
36
  | subCompDelim | `&` | `string` |
30
37
  | eolDelim | `\r?\n\|\r` | `\r?\n\|\r` \| `\r\n` \| `\n` \| `\r` |
31
- | buildEolChar | `\r\n` | `string` |
38
+ | buildEolChar | `\r` | `string` |
32
39
 
33
40
  ## API References
34
41
 
42
+ ### Segment
43
+
35
44
  <details id="get">
36
45
  <summary><code>get</code></summary>
37
46
 
38
47
  Gets the value from a segment.
39
48
 
40
- | Parameter | Type | Requirement |
41
- | :---------------- | :------: | :----------: |
42
- | field | `string` | **Required** |
43
- | repeatingIndex | `number` | Default: 0 |
44
- | subComponentIndex | `number` | Default: 0 |
49
+ | Parameter | Type | Requirement |
50
+ | :---------------- | :----------------: | :----------: |
51
+ | field | `string` | **Required** |
52
+ | repeatingIndex | `number` \| `true` | Default: 0 |
53
+ | subComponentIndex | `number` \| `true` | Default: 0 |
45
54
 
46
55
  Return: `string` | `null`
47
56
 
@@ -51,28 +60,34 @@ const zyxSegment = hl7.getSegment('ZYX');
51
60
  zyxSegment?.get('ZYX.5.2', 1, 2);
52
61
  ```
53
62
 
54
- ### Examples
63
+ #### Examples
55
64
 
56
- ```
65
+ ```plaintext
57
66
  ZYX|1|A|B|C|Repeat1~Component1^Component2~SubComp1&SubComp2^Component2~Repeat3
58
67
  ```
59
68
 
60
69
  ```typescript
61
- // Get entire segment
62
- zyxSegment.get('ZYX'); // ZYX|1|A|B|C|Repeat1~Component1^Component2~SubComp1&SubComp2^Component2~Repeat3
63
-
64
- // Get repeating fields
65
- zyxSegment.get('ZYX.5'); // Repeat1
66
- zyxSegment.get('ZYX.5', 2); // SubComp1&SubComp2^Component2
67
- zyxSegment.get('ZYX.5', -1); // Repeat1~Component1^Component2~SubComp1&SubComp2^Component2~Repeat3
70
+ // Get segment
71
+ zyx.get('ZYX'); // ZYX|1|A|B|C|Repeat1
72
+ zyx.get('ZYX', true); // ZYX|1|A|B|C|Repeat1~Component1^Component2~SubComp1^Component2~Repeat3
73
+ zyx.get('ZYX', true, true); // ZYX|1|A|B|C|Repeat1~Component1^Component2~SubComp1&SubComp2^Component2~Repeat3 <- entire segment string
74
+
75
+ // Get repeating field
76
+ zyx.get('ZYX.5'); // Repeat1
77
+ zyx.get('ZYX.5', 1); // Component1^Component2
78
+ zyx.get('ZYX.5', 2); // SubComp1^Component2
79
+ zyx.get('ZYX.5', true); // Repeat1~Component1^Component2~SubComp1^Component2~Repeat3
80
+ zyx.get('ZYX.5', true, true); // Repeat1~Component1^Component2~SubComp1&SubComp2^Component2~Repeat3 <- entire ZYX.5 field
68
81
 
69
82
  // Get component
70
- zyxSegment.get('ZYX.5.1', 1); // Component1
83
+ zyx.get('ZYX.5.1', 1); // Component1
84
+ zyx.get('ZYX.5.1', 2); // SubComp1
85
+ zyx.get('ZYX.5.1', true); // Repeat1~Component1~SubComp1~Repeat3
71
86
 
72
87
  // Get subcomponent
73
- zyxSegment.get('ZYX.5.1', 2); // SubComp1
74
- zyxSegment.get('ZYX.5.1', 2, 1); // SubComp2
75
- zyxSegment.get('ZYX.5.1', 2, -1); // SubComp1&SubComp2
88
+ zyx.get('ZYX.5.1', 2, 1); // SubComp2
89
+ zyx.get('ZYX.5.1', true, 1); // ~~SubComp2~
90
+ zyx.get('ZYX.5.1', true, true); // Repeat1~Component1~SubComp1&SubComp2~Repeat3 <- entire ZYX.5.1 sub components
76
91
  ```
77
92
 
78
93
  </details>
@@ -82,12 +97,12 @@ zyxSegment.get('ZYX.5.1', 2, -1); // SubComp1&SubComp2
82
97
 
83
98
  Sets the value of on a segment.
84
99
 
85
- | Parameter | Type | Requirement |
86
- | :---------------- | :------: | :----------: |
87
- | field | `string` | **Required** |
88
- | value | `string` | **Required** |
89
- | repeatingIndex | `number` | Default: 0 |
90
- | subComponentIndex | `number` | Default: 0 |
100
+ | Parameter | Type | Requirement |
101
+ | :---------------- | :----------------: | :----------: |
102
+ | field | `string` | **Required** |
103
+ | value | `string` | **Required** |
104
+ | repeatingIndex | `number` \| `true` | Default: 0 |
105
+ | subComponentIndex | `number` \| `true` | Default: 0 |
91
106
 
92
107
  ```typescript
93
108
  const zyxSegment = hl7.getSegment('ZYX');
@@ -97,6 +112,8 @@ zyxSegment?.set('ZYX.5.2', 'ABCD', 1, 2); // ZYX|||||~^&&ABCD
97
112
 
98
113
  </details>
99
114
 
115
+ ### HL7
116
+
100
117
  <details id="getSegment">
101
118
  <summary><code>getSegment</code></summary>
102
119
 
@@ -153,7 +170,7 @@ Setting _consecutive_ as `true` will return first set consecutive of matching Se
153
170
  Return: `Segment[]`
154
171
 
155
172
  ```typescript
156
- const obrSegment = hl7.getSegment('OBX');
173
+ const obrSegment = hl7.getSegment('OBR');
157
174
 
158
175
  const obxAfterObr = hl7.getSegmentsAfter(obrSegment!, 'OBX', ['OBR']);
159
176
  ```
@@ -316,18 +333,19 @@ Here,
316
333
  <details id="transform">
317
334
  <summary><code>transform</code> 🗑 </summary>
318
335
 
336
+ > [!WARNING]
319
337
  > ⚠️ **Deprecated**: This method is triggered internally and doesn't need to be invoked manually.
320
338
 
321
339
  Transforms the raw HL7 message suitable for manipulation and building.
322
340
 
323
341
  ```typescript
324
- hl7.transform(); // depricated
342
+ hl7.transform(); // deprecated
325
343
  ```
326
344
 
327
345
  </details>
328
346
 
329
347
  ---
330
348
 
331
- ### Attribution
349
+ ## Attribution
332
350
 
333
351
  This project includes code inspired from [hl7-standard](https://github.com/ironbridgecorp/hl7-standard), licensed under the Apache License 2.0.
package/dist/index.cjs CHANGED
@@ -18,8 +18,8 @@ var Segment = class {
18
18
  this.data = {};
19
19
  __privateAdd(this, _parseMap);
20
20
  var _a, _b, _c, _d;
21
- if (!type || !/^[A-Z\d]{3}(\.\d+){0,2}$/.test(type))
22
- throw new Error(`Invalid parameter: 'field' [${type}]`);
21
+ if (!type || !/^[A-Z0-9]{3}$/.test(type))
22
+ throw new Error(`Invalid parameter: 'type' [${type}]`);
23
23
  this.data[type === "MSH" ? "1" : "0"] = [{ 1: [type] }];
24
24
  this.parseOptions = {
25
25
  fieldDelim: (_a = parseOptions == null ? void 0 : parseOptions.fieldDelim) != null ? _a : "|",
@@ -35,8 +35,8 @@ var Segment = class {
35
35
  });
36
36
  }
37
37
  get(field, repeatingIndex = 0, subComponentIndex = 0) {
38
- const validate = (val) => !(typeof val === "number" && val >= 0 || val == true);
39
- if (!field || !/^[A-Z\d]{3}(\.\d+){0,2}$/.test(field))
38
+ const validate = (val) => !(typeof val === "number" && val >= 0 || val === true);
39
+ if (!field || !/^[A-Z0-9]{3}(\.\d+){0,2}$/.test(field))
40
40
  throw new Error(`Invalid parameter: 'field' [${field}]`);
41
41
  if (validate(repeatingIndex))
42
42
  throw new Error(`Invalid parameter: 'repeatingIndex' [${repeatingIndex}]`);
@@ -48,11 +48,11 @@ var Segment = class {
48
48
  throw new Error(
49
49
  `Invalid parameter: 'field'. Cannot get [${field}] from [${this.type}] segment.`
50
50
  );
51
- return __privateMethod(this, _Segment_instances, traverse_fn).call(this, this.data, path);
51
+ return __privateMethod(this, _Segment_instances, traverse_fn).call(this, this.data, path) || null;
52
52
  }
53
53
  set(field, value, repeatingIndex = 0, subComponentIndex = 0) {
54
54
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s;
55
- const validate = (val) => !(typeof val === "number" && val >= 0 || val == true);
55
+ const validate = (val) => !(typeof val === "number" && val >= 0 || val === true);
56
56
  if (!field || !/^[A-Z\d]{3}(\.\d+){1,2}$/.test(field))
57
57
  throw new Error(`Invalid parameter: 'field' [${field}]`);
58
58
  if (value == null || typeof value !== "string")
@@ -68,7 +68,7 @@ var Segment = class {
68
68
  );
69
69
  if (!fieldIdx || !Number(fieldIdx)) throw new Error(`Invalid parameter: 'field' [${field}]`);
70
70
  for (let i = type === "MSH" ? 2 : 1; i <= Number(fieldIdx); i++) {
71
- if (!((_d = (_c = (_b = (_a = this.data) == null ? void 0 : _a[i]) == null ? void 0 : _b[0]) == null ? void 0 : _c[1]) == null ? void 0 : _d[0]) == null) this.data[i] = [{ 1: [""] }];
71
+ if (((_d = (_c = (_b = (_a = this.data) == null ? void 0 : _a[i]) == null ? void 0 : _b[0]) == null ? void 0 : _c[1]) == null ? void 0 : _d[0]) == null) this.data[i] = [{ 1: [""] }];
72
72
  }
73
73
  if (Number.isInteger(repeatingIndex)) {
74
74
  for (let i = 0; i <= Number(repeatingIndex); i++) {
@@ -200,7 +200,7 @@ var DLL = class {
200
200
  node.next = null;
201
201
  return;
202
202
  }
203
- if (!targetNode) throw new Error("Failed to locate node targetNode");
203
+ if (!targetNode) throw new Error("Failed to locate targetNode");
204
204
  if (node === targetNode || targetNode.next === node) return;
205
205
  __privateMethod(this, _DLL_instances, detachNode_fn).call(this, node);
206
206
  node.prev = targetNode;
@@ -213,7 +213,7 @@ var DLL = class {
213
213
  const newNode = new Node(newSegment);
214
214
  __privateGet(this, _segmentNodeMap).set(newSegment, newNode);
215
215
  const targetNode = this.getNodeFromSegment(targetSegment);
216
- if (!targetNode) throw new Error();
216
+ if (!targetNode) throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);
217
217
  this.moveNodeBefore(newNode, targetNode);
218
218
  return newSegment;
219
219
  }
@@ -272,8 +272,9 @@ var HL7 = class {
272
272
  componentDelim: (_c = parseOptions == null ? void 0 : parseOptions.componentDelim) != null ? _c : "^",
273
273
  subCompDelim: (_d = parseOptions == null ? void 0 : parseOptions.subCompDelim) != null ? _d : "&",
274
274
  eolDelim: (_e = parseOptions == null ? void 0 : parseOptions.eolDelim) != null ? _e : "\r?\n|\r",
275
- buildEolChar: (_f = parseOptions == null ? void 0 : parseOptions.buildEolChar) != null ? _f : "\r\n"
275
+ buildEolChar: (_f = parseOptions == null ? void 0 : parseOptions.buildEolChar) != null ? _f : "\r"
276
276
  };
277
+ if (this.parseOptions.fieldDelim.length !== 1) throw new Error("Invalid field delimiter");
277
278
  __privateSet(this, _dll, new DLL());
278
279
  this.transform();
279
280
  }
@@ -281,14 +282,14 @@ var HL7 = class {
281
282
  * @deprecated This method is triggered internally and doesnt need to be invoked manually.
282
283
  */
283
284
  transform() {
284
- var _a;
285
285
  if (typeof this.raw !== "string" || !this.raw.startsWith("MSH")) {
286
286
  throw new Error("Invalid raw HL7 message. Expected msg to be a string starting with MSH");
287
287
  }
288
288
  if (!["\r?\n|\r", "\r\n", "\n", "\r"].includes(this.parseOptions.eolDelim)) {
289
289
  throw new Error("Invalid EOL character. Expected \\r?\\n|\\r, \\r\\n, \\n, \\r");
290
290
  }
291
- const segmentsStrArr = this.raw.split(RegExp(this.parseOptions.eolDelim)).filter((segmentStr) => this.validateSegment(segmentStr));
291
+ __privateSet(this, _dll, new DLL());
292
+ const segmentsStrArr = this.raw.split(RegExp(this.parseOptions.eolDelim)).filter((segmentStr) => Boolean(segmentStr) && this.validateSegment(segmentStr));
292
293
  const { fieldDelim, repeatingDelim, componentDelim, subCompDelim } = this.parseOptions;
293
294
  for (const segmentStr of segmentsStrArr) {
294
295
  const fields = segmentStr.split(fieldDelim);
@@ -309,7 +310,7 @@ var HL7 = class {
309
310
  }
310
311
  fieldIdx++;
311
312
  }
312
- if (type === "MSH" && ((_a = segment.data[2]) == null ? void 0 : _a[0]) && fields[1]) {
313
+ if (type === "MSH" && fields[1]) {
313
314
  segment.data[2] = [{ 1: [fields[1]] }];
314
315
  }
315
316
  __privateGet(this, _dll).appendNewSegment(segment);
@@ -345,7 +346,7 @@ var HL7 = class {
345
346
  if (type && !/^[A-Z\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);
346
347
  return __privateGet(this, _dll).getSegments(type);
347
348
  }
348
- getSegmentsAfter(type, startSegment, stopSegmentType = [], consecutive = false) {
349
+ getSegmentsAfter(startSegment, type, stopSegmentType = [], consecutive = false) {
349
350
  if (!/^[A-Z\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);
350
351
  if (!startSegment || !(startSegment instanceof Segment))
351
352
  throw new Error(`Invalid parameter: 'startSegment'`);
@@ -365,7 +366,7 @@ var HL7 = class {
365
366
  if (!/^[A-Z\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);
366
367
  if (!targetSegment || !(targetSegment instanceof Segment))
367
368
  throw new Error(`Invalid parameter: 'targetSegment'`);
368
- if (__privateGet(this, _dll).getNodeFromSegment(targetSegment))
369
+ if (!__privateGet(this, _dll).getNodeFromSegment(targetSegment))
369
370
  throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);
370
371
  return __privateGet(this, _dll).appendNewSegment(new Segment(type, this.parseOptions), targetSegment);
371
372
  }
@@ -373,8 +374,8 @@ var HL7 = class {
373
374
  if (!/^[A-Z\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);
374
375
  if (!targetSegment || !(targetSegment instanceof Segment))
375
376
  throw new Error(`Invalid parameter: 'targetSegment'`);
376
- if (__privateGet(this, _dll).getNodeFromSegment(targetSegment))
377
- throw new Error(`Failed to locate: 'startSegment' [${targetSegment.type}]`);
377
+ if (!__privateGet(this, _dll).getNodeFromSegment(targetSegment))
378
+ throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);
378
379
  return __privateGet(this, _dll).prependNewSegment(new Segment(type, this.parseOptions), targetSegment);
379
380
  }
380
381
  deleteSegment(segment) {
@@ -384,7 +385,7 @@ var HL7 = class {
384
385
  for (const segment of segments) {
385
386
  if (!segment || !(segment instanceof Segment))
386
387
  throw new Error(`Invalid parameter: 'segments'`);
387
- if (__privateGet(this, _dll).getNodeFromSegment(segment))
388
+ if (!__privateGet(this, _dll).getNodeFromSegment(segment))
388
389
  throw new Error(`Failed to locate: 'segment' [${segment.type}]`);
389
390
  __privateGet(this, _dll).deleteSegment(segment);
390
391
  }
@@ -434,14 +435,12 @@ var HL7 = class {
434
435
  }
435
436
  }
436
437
  validateSegment(segment) {
437
- if (/^[A-Z\d]{3}\|/.test(segment)) {
438
- return true;
439
- }
440
- throw new Error(`Invalid Segment: [${segment.substring(0, 4)}]`);
438
+ if (new RegExp(`^[A-Z0-9]{3}\\${this.parseOptions.fieldDelim}`).test(segment)) return true;
439
+ else throw new Error(`Invalid segment: ${segment}`);
441
440
  }
442
441
  };
443
442
  _dll = new WeakMap();
444
443
 
445
444
  exports.HL7 = HL7;
446
445
  //# sourceMappingURL=index.cjs.map
447
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9zZWdtZW50LnRzIiwiLi4vc3JjL3V0aWxzL2RsbC50cyIsIi4uL3NyYy91dGlscy9obDcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQSxTQUFBLEVBQUEsa0JBQUEsRUFBQSxXQUFBO0FBRU8sSUFBTSxVQUFOLE1BQWM7QUFBQSxFQUtuQixXQUFBLENBQ1csTUFDVCxZQUFBLEVBQ0E7QUFGUyxJQUFBLElBQUEsQ0FBQSxJQUFBLEdBQUEsSUFBQTtBQU5OLElBQUEsWUFBQSxDQUFBLElBQUEsRUFBQSxrQkFBQSxDQUFBO0FBQ0wsSUFBQSxJQUFBLENBQUEsSUFBQSxHQUFxQixFQUFDO0FBRXRCLElBQUEsWUFBQSxDQUFBLElBQUEsRUFBQSxTQUFBLENBQUE7QUFMRixJQUFBLElBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQTtBQVdJLElBQUEsSUFBSSxDQUFDLElBQUEsSUFBUSxDQUFDLDBCQUFBLENBQTJCLEtBQUssSUFBSSxDQUFBO0FBQ2hELE1BQUEsTUFBTSxJQUFJLEtBQUEsQ0FBTSxDQUFBLDRCQUFBLEVBQStCLElBQUksQ0FBQSxDQUFBLENBQUcsQ0FBQTtBQUN4RCxJQUFBLElBQUEsQ0FBSyxJQUFBLENBQUssSUFBQSxLQUFTLEtBQUEsR0FBUSxHQUFBLEdBQU0sR0FBRyxDQUFBLEdBQUksQ0FBQyxFQUFFLENBQUEsRUFBRyxDQUFDLElBQUksQ0FBQSxFQUFHLENBQUE7QUFDdEQsSUFBQSxJQUFBLENBQUssWUFBQSxHQUFlO0FBQUEsTUFDbEIsVUFBQSxFQUFBLENBQVksRUFBQSxHQUFBLFlBQUEsSUFBQSxJQUFBLEdBQUEsTUFBQSxHQUFBLFlBQUEsQ0FBYyxVQUFBLEtBQWQsSUFBQSxHQUFBLEVBQUEsR0FBNEIsR0FBQTtBQUFBLE1BQ3hDLGNBQUEsRUFBQSxDQUFnQixFQUFBLEdBQUEsWUFBQSxJQUFBLElBQUEsR0FBQSxNQUFBLEdBQUEsWUFBQSxDQUFjLGNBQUEsS0FBZCxJQUFBLEdBQUEsRUFBQSxHQUFnQyxHQUFBO0FBQUEsTUFDaEQsY0FBQSxFQUFBLENBQWdCLEVBQUEsR0FBQSxZQUFBLElBQUEsSUFBQSxHQUFBLE1BQUEsR0FBQSxZQUFBLENBQWMsY0FBQSxLQUFkLElBQUEsR0FBQSxFQUFBLEdBQWdDLEdBQUE7QUFBQSxNQUNoRCxZQUFBLEVBQUEsQ0FBYyxFQUFBLEdBQUEsWUFBQSxJQUFBLElBQUEsR0FBQSxNQUFBLEdBQUEsWUFBQSxDQUFjLFlBQUEsS0FBZCxJQUFBLEdBQUEsRUFBQSxHQUE4QjtBQUFBLEtBQzlDO0FBQ0EsSUFBQSxZQUFBLENBQUEsSUFBQSxFQUFLLFNBQUEsRUFBWTtBQUFBLE1BQ2YsQ0FBQSxFQUFHLEtBQUssWUFBQSxDQUFhLFVBQUE7QUFBQSxNQUNyQixDQUFBLEVBQUcsS0FBSyxZQUFBLENBQWEsY0FBQTtBQUFBLE1BQ3JCLENBQUEsRUFBRyxLQUFLLFlBQUEsQ0FBYSxjQUFBO0FBQUEsTUFDckIsQ0FBQSxFQUFHLEtBQUssWUFBQSxDQUFhO0FBQUEsS0FDdkIsQ0FBQTtBQUFBLEVBQ0Y7QUFBQSxFQUVBLEdBQUEsQ0FBSSxLQUFBLEVBQWUsY0FBQSxHQUFnQyxDQUFBLEVBQUcsb0JBQW1DLENBQUEsRUFBRztBQUMxRixJQUFBLE1BQU0sUUFBQSxHQUFXLENBQUMsR0FBQSxLQUNoQixFQUFHLE9BQU8sR0FBQSxLQUFRLFFBQUEsSUFBWSxHQUFBLElBQU8sQ0FBQSxJQUFNLEdBQUEsSUFBTyxJQUFBLENBQUE7QUFFcEQsSUFBQSxJQUFJLENBQUMsS0FBQSxJQUFTLENBQUMsMEJBQUEsQ0FBMkIsS0FBSyxLQUFLLENBQUE7QUFDbEQsTUFBQSxNQUFNLElBQUksS0FBQSxDQUFNLENBQUEsNEJBQUEsRUFBK0IsS0FBSyxDQUFBLENBQUEsQ0FBRyxDQUFBO0FBQ3pELElBQUEsSUFBSSxTQUFTLGNBQWMsQ0FBQTtBQUN6QixNQUFBLE1BQU0sSUFBSSxLQUFBLENBQU0sQ0FBQSxxQ0FBQSxFQUF3QyxjQUFjLENBQUEsQ0FBQSxDQUFHLENBQUE7QUFDM0UsSUFBQSxJQUFJLFNBQVMsaUJBQWlCLENBQUE7QUFDNUIsTUFBQSxNQUFNLElBQUksS0FBQSxDQUFNLENBQUEsd0NBQUEsRUFBMkMsaUJBQWlCLENBQUEsQ0FBQSxDQUFHLENBQUE7QUFFakYsSUFBQSxNQUFNLENBQUMsSUFBQSxFQUFNLFFBQUEsRUFBVSxPQUFPLENBQUEsR0FBSSxLQUFBLENBQU0sTUFBTSxHQUFHLENBQUE7QUFDakQsSUFBQSxNQUFNLElBQUEsR0FBTyxDQUFDLFFBQUEsRUFBVSxjQUFBLEVBQWdCLFNBQVMsaUJBQWlCLENBQUE7QUFFbEUsSUFBQSxJQUFJLENBQUMsSUFBQSxJQUFRLElBQUEsS0FBUyxJQUFBLENBQUssSUFBQTtBQUN6QixNQUFBLE1BQU0sSUFBSSxLQUFBO0FBQUEsUUFDUixDQUFBLHdDQUFBLEVBQTJDLEtBQUssQ0FBQSxRQUFBLEVBQVcsSUFBQSxDQUFLLElBQUksQ0FBQSxVQUFBO0FBQUEsT0FDdEU7QUFFRixJQUFBLE9BQU8sZUFBQSxDQUFBLElBQUEsRUFBSyxrQkFBQSxFQUFBLFdBQUEsQ0FBQSxDQUFMLElBQUEsQ0FBQSxJQUFBLEVBQWUsSUFBQSxDQUFLLElBQUEsRUFBTSxJQUFBLENBQUE7QUFBQSxFQUNuQztBQUFBLEVBRUEsSUFDRSxLQUFBLEVBQ0EsS0FBQSxFQUNBLGNBQUEsR0FBZ0MsQ0FBQSxFQUNoQyxvQkFBbUMsQ0FBQSxFQUNuQztBQXZESixJQUFBLElBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQTtBQXdESSxJQUFBLE1BQU0sUUFBQSxHQUFXLENBQUMsR0FBQSxLQUNoQixFQUFHLE9BQU8sR0FBQSxLQUFRLFFBQUEsSUFBWSxHQUFBLElBQU8sQ0FBQSxJQUFNLEdBQUEsSUFBTyxJQUFBLENBQUE7QUFFcEQsSUFBQSxJQUFJLENBQUMsS0FBQSxJQUFTLENBQUMsMEJBQUEsQ0FBMkIsS0FBSyxLQUFLLENBQUE7QUFDbEQsTUFBQSxNQUFNLElBQUksS0FBQSxDQUFNLENBQUEsNEJBQUEsRUFBK0IsS0FBSyxDQUFBLENBQUEsQ0FBRyxDQUFBO0FBQ3pELElBQUEsSUFBSSxLQUFBLElBQVMsSUFBQSxJQUFRLE9BQU8sS0FBQSxLQUFVLFFBQUE7QUFDcEMsTUFBQSxNQUFNLElBQUksS0FBQSxDQUFNLENBQUEsNEJBQUEsRUFBK0IsS0FBSyxDQUFBLENBQUEsQ0FBRyxDQUFBO0FBQ3pELElBQUEsSUFBSSxTQUFTLGNBQWMsQ0FBQTtBQUN6QixNQUFBLE1BQU0sSUFBSSxLQUFBLENBQU0sQ0FBQSxxQ0FBQSxFQUF3QyxjQUFjLENBQUEsQ0FBQSxDQUFHLENBQUE7QUFDM0UsSUFBQSxJQUFJLFNBQVMsaUJBQWlCLENBQUE7QUFDNUIsTUFBQSxNQUFNLElBQUksS0FBQSxDQUFNLENBQUEsd0NBQUEsRUFBMkMsaUJBQWlCLENBQUEsQ0FBQSxDQUFHLENBQUE7QUFFakYsSUFBQSxNQUFNLENBQUMsSUFBQSxFQUFNLFFBQUEsRUFBVSxPQUFPLENBQUEsR0FBSSxLQUFBLENBQU0sTUFBTSxHQUFHLENBQUE7QUFFakQsSUFBQSxJQUFJLENBQUMsSUFBQSxJQUFRLElBQUEsS0FBUyxJQUFBLENBQUssSUFBQTtBQUN6QixNQUFBLE1BQU0sSUFBSSxLQUFBO0FBQUEsUUFDUiwrQkFBK0IsS0FBSyxDQUFBLGVBQUEsRUFBa0IsS0FBSyxDQUFBLFFBQUEsRUFBVyxLQUFLLElBQUksQ0FBQSxVQUFBO0FBQUEsT0FDakY7QUFDRixJQUFBLElBQUksQ0FBQyxRQUFBLElBQVksQ0FBQyxNQUFBLENBQU8sUUFBUSxDQUFBLEVBQUcsTUFBTSxJQUFJLEtBQUEsQ0FBTSxDQUFBLDRCQUFBLEVBQStCLEtBQUssQ0FBQSxDQUFBLENBQUcsQ0FBQTtBQUUzRixJQUFBLEtBQUEsSUFBUyxDQUFBLEdBQUksU0FBUyxLQUFBLEdBQVEsQ0FBQSxHQUFJLEdBQUcsQ0FBQSxJQUFLLE1BQUEsQ0FBTyxRQUFRLENBQUEsRUFBRyxDQUFBLEVBQUEsRUFBSztBQUMvRCxNQUFBLElBQUksRUFBQSxDQUFDLDRCQUFLLElBQUEsS0FBTCxJQUFBLEdBQUEsTUFBQSxHQUFBLEVBQUEsQ0FBWSxPQUFaLElBQUEsR0FBQSxNQUFBLEdBQUEsRUFBQSxDQUFpQixDQUFBLENBQUEsS0FBakIsSUFBQSxHQUFBLE1BQUEsR0FBQSxFQUFBLENBQXNCLENBQUEsQ0FBQSxLQUF0QixJQUFBLEdBQUEsTUFBQSxHQUFBLEVBQUEsQ0FBMkIsQ0FBQSxDQUFBLENBQUEsSUFBTSxNQUFNLElBQUEsQ0FBSyxJQUFBLENBQUssQ0FBQyxDQUFBLEdBQUksQ0FBQyxFQUFFLENBQUEsRUFBRyxDQUFDLEVBQUUsQ0FBQSxFQUFHLENBQUE7QUFBQSxJQUN6RTtBQUVBLElBQUEsSUFBSSxNQUFBLENBQU8sU0FBQSxDQUFVLGNBQWMsQ0FBQSxFQUFHO0FBQ3BDLE1BQUEsS0FBQSxJQUFTLElBQUksQ0FBQSxFQUFHLENBQUEsSUFBSyxNQUFBLENBQU8sY0FBYyxHQUFHLENBQUEsRUFBQSxFQUFLO0FBQ2hELFFBQUEsSUFBQSxDQUFBLENBQUksRUFBQSxHQUFBLENBQUEsRUFBQSxHQUFBLENBQUEsRUFBQSxHQUFBLElBQUEsQ0FBSyxLQUFLLFFBQVEsQ0FBQSxLQUFsQixtQkFBc0IsQ0FBQSxDQUFBLEtBQXRCLElBQUEsR0FBQSxNQUFBLEdBQUEsRUFBQSxDQUEyQixPQUEzQixJQUFBLEdBQUEsTUFBQSxHQUFBLEVBQUEsQ0FBZ0MsQ0FBQSxDQUFBLEtBQU0sTUFBTSxJQUFBLENBQUssSUFBQSxDQUFLLFFBQVEsQ0FBQSxDQUFHLENBQUMsSUFBSSxFQUFFLENBQUEsRUFBRyxDQUFDLEVBQUUsQ0FBQSxFQUFFO0FBQUEsTUFDdEY7QUFFQSxNQUFBLElBQUksT0FBQSxJQUFXLE1BQUEsQ0FBTyxPQUFPLENBQUEsRUFBRztBQUM5QixRQUFBLEtBQUEsSUFBUyxJQUFJLENBQUEsRUFBRyxDQUFBLElBQUssTUFBQSxDQUFPLE9BQU8sR0FBRyxDQUFBLEVBQUEsRUFBSztBQUN6QyxVQUFBLElBQUEsQ0FBQSxDQUFJLEVBQUEsR0FBQSxDQUFBLEVBQUEsR0FBQSxDQUFBLEVBQUEsR0FBQSxJQUFBLENBQUssS0FBSyxRQUFRLENBQUEsS0FBbEIsbUJBQXNCLGNBQUEsQ0FBQSxLQUF0QixJQUFBLEdBQUEsTUFBQSxHQUFBLEVBQUEsQ0FBa0QsQ0FBQSxDQUFBLEtBQWxELElBQUEsR0FBQSxNQUFBLEdBQUEsRUFBQSxDQUF1RCxDQUFBLENBQUEsS0FBTSxJQUFBO0FBQy9ELFlBQUEsSUFBQSxDQUFLLElBQUEsQ0FBSyxRQUFRLENBQUEsQ0FBRyxjQUF3QixFQUFHLENBQUMsQ0FBQSxHQUFJLENBQUMsRUFBRSxDQUFBO0FBQUEsUUFDNUQ7QUFFQSxRQUFBLElBQUksTUFBQSxDQUFPLFNBQUEsQ0FBVSxpQkFBaUIsQ0FBQSxFQUFHO0FBQ3ZDLFVBQUEsS0FBQSxJQUFTLElBQUksQ0FBQSxFQUFHLENBQUEsSUFBSyxNQUFBLENBQU8saUJBQWlCLEdBQUcsQ0FBQSxFQUFBLEVBQUs7QUFDbkQsWUFBQSxJQUFBLENBQUEsQ0FBSSxFQUFBLEdBQUEsQ0FBQSxFQUFBLEdBQUEsQ0FBQSxFQUFBLEdBQUEsSUFBQSxDQUFLLEtBQUssUUFBUSxDQUFBLEtBQWxCLG1CQUFzQixjQUFBLENBQUEsS0FBdEIsSUFBQSxHQUFBLE1BQUEsR0FBQSxFQUFBLENBQWtELE9BQUEsQ0FBQSxLQUFsRCxJQUFBLEdBQUEsTUFBQSxHQUFBLEVBQUEsQ0FBNkQsQ0FBQSxDQUFBLEtBQU0sSUFBQTtBQUNyRSxjQUFBLElBQUEsQ0FBSyxJQUFBLENBQUssUUFBUSxDQUFBLENBQUcsY0FBd0IsRUFBRyxPQUFPLENBQUEsQ0FBRyxDQUFDLENBQUEsR0FBSSxFQUFBO0FBQUEsVUFDbkU7QUFFQSxVQUFBLElBQUEsQ0FBSyxJQUFBLENBQUssUUFBUSxDQUFBLENBQUcsY0FBd0IsRUFBRyxPQUFPLENBQUEsQ0FBRyxpQkFBMkIsQ0FBQSxHQUNuRixLQUFBO0FBQUEsUUFDSixDQUFBLE1BQUEsSUFBVyxzQkFBc0IsSUFBQSxFQUFNO0FBQ3JDLFVBQUEsSUFBQSxDQUFLLElBQUEsQ0FBSyxRQUFRLENBQUEsQ0FBRyxjQUF3QixFQUFHLE9BQU8sQ0FBQSxHQUFJLENBQUMsS0FBSyxDQUFBO0FBQUEsUUFDbkU7QUFBQSxNQUNGLENBQUEsTUFBTztBQUNMLFFBQUEsSUFBQSxDQUFLLElBQUEsQ0FBSyxRQUFRLENBQUEsQ0FBRyxjQUF3QixJQUFJLEVBQUUsQ0FBQSxFQUFHLENBQUMsS0FBSyxDQUFBLEVBQUU7QUFBQSxNQUNoRTtBQUFBLElBQ0YsQ0FBQSxNQUFBLElBQVcsa0JBQWtCLElBQUEsRUFBTTtBQUNqQyxNQUFBLElBQUEsQ0FBSyxJQUFBLENBQUssUUFBUSxDQUFBLEdBQUksQ0FBQyxFQUFFLENBQUEsRUFBRyxDQUFDLEVBQUUsQ0FBQSxFQUFHLENBQUE7QUFFbEMsTUFBQSxJQUFJLE9BQUEsSUFBVyxNQUFBLENBQU8sT0FBTyxDQUFBLEVBQUc7QUFDOUIsUUFBQSxLQUFBLElBQVMsSUFBSSxDQUFBLEVBQUcsQ0FBQSxJQUFLLE1BQUEsQ0FBTyxPQUFPLEdBQUcsQ0FBQSxFQUFBLEVBQUs7QUFDekMsVUFBQSxJQUFBLENBQUEsQ0FBSSxFQUFBLEdBQUEsQ0FBQSxFQUFBLEdBQUEsQ0FBQSxFQUFBLEdBQUEsSUFBQSxDQUFLLEtBQUssUUFBUSxDQUFBLEtBQWxCLG1CQUFzQixDQUFBLENBQUEsS0FBdEIsSUFBQSxHQUFBLE1BQUEsR0FBQSxFQUFBLENBQTJCLE9BQTNCLElBQUEsR0FBQSxNQUFBLEdBQUEsRUFBQSxDQUFnQyxDQUFBLENBQUEsS0FBTSxNQUFNLElBQUEsQ0FBSyxJQUFBLENBQUssUUFBUSxDQUFBLENBQUcsQ0FBQyxFQUFHLENBQUMsQ0FBQSxHQUFJLENBQUMsRUFBRSxDQUFBO0FBQUEsUUFDbkY7QUFFQSxRQUFBLElBQUksTUFBQSxDQUFPLFNBQUEsQ0FBVSxpQkFBaUIsQ0FBQSxFQUFHO0FBQ3ZDLFVBQUEsS0FBQSxJQUFTLElBQUksQ0FBQSxFQUFHLENBQUEsSUFBSyxNQUFBLENBQU8saUJBQWlCLEdBQUcsQ0FBQSxFQUFBLEVBQUs7QUFDbkQsWUFBQSxJQUFBLENBQUEsQ0FBSSxFQUFBLEdBQUEsQ0FBQSxFQUFBLEdBQUEsQ0FBQSxFQUFBLEdBQUEsSUFBQSxDQUFLLEtBQUssUUFBUSxDQUFBLEtBQWxCLG1CQUFzQixDQUFBLENBQUEsS0FBdEIsSUFBQSxHQUFBLE1BQUEsR0FBQSxFQUFBLENBQTJCLE9BQUEsQ0FBQSxLQUEzQixJQUFBLEdBQUEsTUFBQSxHQUFBLEVBQUEsQ0FBc0MsQ0FBQSxDQUFBLEtBQU0sSUFBQTtBQUM5QyxjQUFBLElBQUEsQ0FBSyxJQUFBLENBQUssUUFBUSxDQUFBLENBQUcsQ0FBQyxFQUFHLE9BQU8sQ0FBQSxDQUFHLENBQUMsQ0FBQSxHQUFJLEVBQUE7QUFBQSxVQUM1QztBQUVBLFVBQUEsSUFBQSxDQUFLLElBQUEsQ0FBSyxRQUFRLENBQUEsQ0FBRyxDQUFDLEVBQUcsT0FBTyxDQUFBLENBQUcsaUJBQTJCLENBQUEsR0FBSSxLQUFBO0FBQUEsUUFDcEUsQ0FBQSxNQUFBLElBQVcsc0JBQXNCLElBQUEsRUFBTTtBQUNyQyxVQUFBLElBQUEsQ0FBSyxJQUFBLENBQUssUUFBUSxDQUFBLENBQUcsQ0FBQyxFQUFHLE9BQU8sQ0FBQSxHQUFJLENBQUMsS0FBSyxDQUFBO0FBQUEsUUFDNUM7QUFBQSxNQUNGLENBQUEsTUFBTztBQUNMLFFBQUEsSUFBQSxDQUFLLElBQUEsQ0FBSyxRQUFRLENBQUEsR0FBSSxDQUFDLEVBQUUsQ0FBQSxFQUFHLENBQUMsS0FBSyxDQUFBLEVBQUcsQ0FBQTtBQUFBLE1BQ3ZDO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUE4QkYsQ0FBQTtBQXhKRSxTQUFBLEdBQUEsSUFBQSxPQUFBLEVBQUE7QUFISyxrQkFBQSxHQUFBLElBQUEsT0FBQSxFQUFBO0FBK0hMLFdBQUEsR0FBUyxTQUNQLElBQUEsRUFDQSxJQUFBLEVBQ0EsS0FBQSxHQUFRLENBQUEsRUFDQTtBQUNSLEVBQUEsTUFBTSxLQUFBLEdBQVEsS0FBSyxLQUFLLENBQUE7QUFFeEIsRUFBQSxJQUFJLEtBQUEsQ0FBTSxPQUFBLENBQVEsSUFBSSxDQUFBLEVBQUc7QUFDdkIsSUFBQSxJQUFJLEtBQUEsS0FBVSxJQUFBLElBQVEsS0FBQSxJQUFTLElBQUEsRUFBTTtBQUNuQyxNQUFBLE1BQU0sS0FBQSxHQUFRLFlBQUEsQ0FBQSxJQUFBLEVBQUssU0FBQSxDQUFBLENBQVUsS0FBQSxFQUFPLENBQUE7QUFDcEMsTUFBQSxPQUFPLElBQUEsQ0FBSyxHQUFBLENBQUksQ0FBQyxJQUFBLEtBQVMsZUFBQSxDQUFBLElBQUEsRUFBSyxrQkFBQSxFQUFBLFdBQUEsQ0FBQSxDQUFMLElBQUEsQ0FBQSxJQUFBLEVBQWUsSUFBQSxFQUFNLElBQUEsRUFBTSxLQUFBLENBQU0sQ0FBQSxDQUFFLElBQUEsQ0FBSyxLQUFLLENBQUE7QUFBQSxJQUN6RSxDQUFBLE1BQU87QUFDTCxNQUFBLE9BQU8sZUFBQSxDQUFBLElBQUEsRUFBSyxpQ0FBTCxJQUFBLENBQUEsSUFBQSxFQUFlLElBQUEsQ0FBSyxPQUFPLEtBQUssQ0FBQyxDQUFBLEVBQUcsSUFBQSxFQUFNLEVBQUUsS0FBQSxDQUFBO0FBQUEsSUFDckQ7QUFBQSxFQUNGLENBQUEsTUFBQSxJQUFXLE9BQU8sSUFBQSxLQUFTLFFBQUEsRUFBVTtBQUNuQyxJQUFBLElBQUksS0FBQSxLQUFVLElBQUEsSUFBUSxLQUFBLElBQVMsSUFBQSxFQUFNO0FBQ25DLE1BQUEsTUFBTSxLQUFBLEdBQVEsWUFBQSxDQUFBLElBQUEsRUFBSyxTQUFBLENBQUEsQ0FBVSxLQUFBLEVBQU8sQ0FBQTtBQUVwQyxNQUFBLE1BQU0sR0FBQSxHQUFNLE1BQUEsQ0FBTyxJQUFBLENBQUssSUFBSSxFQUFFLEdBQUEsQ0FBSSxDQUFDLEdBQUEsS0FBUSxlQUFBLENBQUEsSUFBQSxFQUFLLGlDQUFMLElBQUEsQ0FBQSxJQUFBLEVBQWUsSUFBQSxDQUFLLEdBQUcsQ0FBQSxFQUFHLE1BQU0sS0FBQSxDQUFNLENBQUE7QUFFakYsTUFBQSxPQUFPLEdBQUEsQ0FBSSxLQUFLLEtBQUssQ0FBQTtBQUFBLElBQ3ZCLENBQUEsTUFBTztBQUNMLE1BQUEsT0FBTyxlQUFBLENBQUEsSUFBQSxFQUFLLGlDQUFMLElBQUEsQ0FBQSxJQUFBLEVBQWUsSUFBQSxDQUFLLE9BQU8sS0FBSyxDQUFDLENBQUEsRUFBRyxJQUFBLEVBQU0sRUFBRSxLQUFBLENBQUE7QUFBQSxJQUNyRDtBQUFBLEVBQ0YsQ0FBQSxNQUFPO0FBQ0wsSUFBQSxPQUFPLElBQUE7QUFBQSxFQUNUO0FBQ0YsQ0FBQTs7O0FDekpGLElBQU0sT0FBTixNQUFXO0FBQUEsRUFDVCxXQUFBLENBQ2tCLElBQUEsRUFDVCxJQUFBLEdBQW9CLElBQUEsRUFDcEIsT0FBb0IsSUFBQSxFQUMzQjtBQUhnQixJQUFBLElBQUEsQ0FBQSxJQUFBLEdBQUEsSUFBQTtBQUNULElBQUEsSUFBQSxDQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsSUFBQSxJQUFBLENBQUEsSUFBQSxHQUFBLElBQUE7QUFBQSxFQUNOO0FBQ0wsQ0FBQTtBQVRBLElBQUEsS0FBQSxFQUFBLEtBQUEsRUFBQSxlQUFBLEVBQUEsY0FBQSxFQUFBLGFBQUE7QUFXTyxJQUFNLE1BQU4sTUFBVTtBQUFBLEVBQVYsV0FBQSxHQUFBO0FBQUEsSUFBQSxZQUFBLENBQUEsSUFBQSxFQUFBLGNBQUEsQ0FBQTtBQUNMLElBQUEsWUFBQSxDQUFBLElBQUEsRUFBQSxLQUFBLEVBQXFCLElBQUEsQ0FBQTtBQUNyQixJQUFBLFlBQUEsQ0FBQSxJQUFBLEVBQUEsS0FBQSxFQUFxQixJQUFBLENBQUE7QUFDckIsSUFBQSxZQUFBLENBQUEsSUFBQSxFQUFBLGVBQUEsc0JBQXNCLE9BQUEsRUFBdUIsQ0FBQTtBQUFBLEVBQUE7QUFBQSxFQUU3QyxXQUFXLElBQUEsRUFBbUI7QUFDNUIsSUFBQSxJQUFJLE9BQU8sWUFBQSxDQUFBLElBQUEsRUFBSyxLQUFBLENBQUE7QUFFaEIsSUFBQSxPQUFPLElBQUEsRUFBTTtBQUNYLE1BQUEsSUFBSSxJQUFBLENBQUssSUFBQSxDQUFLLElBQUEsS0FBUyxJQUFBLFNBQWEsSUFBQSxDQUFLLElBQUE7QUFFekMsTUFBQSxJQUFBLEdBQU8sSUFBQSxDQUFLLElBQUE7QUFBQSxJQUNkO0FBRUEsSUFBQSxPQUFPLElBQUEsSUFBUSxJQUFBO0FBQUEsRUFDakI7QUFBQSxFQUVBLFlBQVksSUFBQSxFQUFvQjtBQUM5QixJQUFBLE1BQU0sV0FBVyxFQUFDO0FBQ2xCLElBQUEsSUFBSSxPQUFPLFlBQUEsQ0FBQSxJQUFBLEVBQUssS0FBQSxDQUFBO0FBRWhCLElBQUEsT0FBTyxJQUFBLEVBQU07QUFDWCxNQUFBLElBQUksSUFBQSxFQUFNO0FBQ1IsUUFBQSxJQUFJLFNBQVMsSUFBQSxDQUFLLElBQUEsQ0FBSyxNQUFNLFFBQUEsQ0FBUyxJQUFBLENBQUssS0FBSyxJQUFJLENBQUE7QUFBQSxNQUN0RCxDQUFBLE1BQU87QUFDTCxRQUFBLFFBQUEsQ0FBUyxJQUFBLENBQUssS0FBSyxJQUFJLENBQUE7QUFBQSxNQUN6QjtBQUVBLE1BQUEsSUFBQSxHQUFPLElBQUEsQ0FBSyxJQUFBO0FBQUEsSUFDZDtBQUVBLElBQUEsT0FBTyxRQUFBO0FBQUEsRUFDVDtBQUFBLEVBRUEsaUJBQ0UsSUFBQSxFQUNBLFlBQUEsRUFDQSxrQkFBaUMsRUFBQyxFQUNsQyxjQUFjLEtBQUEsRUFDZDtBQUNBLElBQUEsTUFBTSxTQUFBLEdBQVksSUFBQSxDQUFLLGtCQUFBLENBQW1CLFlBQVksQ0FBQTtBQUV0RCxJQUFBLElBQUksQ0FBQyxXQUFXLE1BQU0sSUFBSSxNQUFNLENBQUEsa0NBQUEsRUFBcUMsWUFBQSxDQUFhLElBQUksQ0FBQSxDQUFBLENBQUcsQ0FBQTtBQUV6RixJQUFBLE1BQU0sTUFBTSxFQUFDO0FBQ2IsSUFBQSxJQUFJLE9BQU8sU0FBQSxDQUFVLElBQUE7QUFFckIsSUFBQSxPQUFPLElBQUEsRUFBTTtBQUNYLE1BQUEsSUFBSSxnQkFBZ0IsTUFBQSxJQUFVLGVBQUEsQ0FBZ0IsU0FBUyxJQUFBLENBQUssSUFBQSxDQUFLLElBQUksQ0FBQSxFQUFHO0FBRXhFLE1BQUEsSUFBSSxLQUFLLElBQUEsQ0FBSyxJQUFBLEtBQVMsTUFBTSxHQUFBLENBQUksSUFBQSxDQUFLLEtBQUssSUFBSSxDQUFBO0FBQUEsV0FBQSxJQUN0QyxXQUFBLElBQWUsSUFBSSxNQUFBLEVBQVE7QUFFcEMsTUFBQSxJQUFBLEdBQU8sSUFBQSxDQUFLLElBQUE7QUFBQSxJQUNkO0FBRUEsSUFBQSxPQUFPLEdBQUE7QUFBQSxFQUNUO0FBQUEsRUFFQSxnQkFBQSxDQUFpQixZQUFxQixhQUFBLEVBQXlCO0FBQzdELElBQUEsTUFBTSxPQUFBLEdBQVUsSUFBSSxJQUFBLENBQUssVUFBVSxDQUFBO0FBQ25DLElBQUEsWUFBQSxDQUFBLElBQUEsRUFBSyxlQUFBLENBQUEsQ0FBZ0IsR0FBQSxDQUFJLFVBQUEsRUFBWSxPQUFPLENBQUE7QUFFNUMsSUFBQSxJQUFBLENBQUssY0FBYyxPQUFBLEVBQVMsSUFBQSxDQUFLLG1CQUFtQixhQUFhLENBQUEsSUFBSyxtQkFBSyxLQUFBLENBQUssQ0FBQTtBQUVoRixJQUFBLE9BQU8sVUFBQTtBQUFBLEVBQ1Q7QUFBQSxFQUVBLGFBQUEsQ0FBYyxNQUFZLFVBQUEsRUFBeUI7QUFDakQsSUFBQSxJQUFJLENBQUMsSUFBQSxFQUFNLE1BQU0sSUFBSSxNQUFNLHVCQUF1QixDQUFBO0FBRWxELElBQUEsSUFBSSxDQUFDLG1CQUFLLEtBQUEsQ0FBQSxFQUFPO0FBQ2YsTUFBQSxZQUFBLENBQUEsSUFBQSxFQUFLLEtBQUEsRUFBUSxtQkFBSyxLQUFBLEVBQVEsSUFBQSxDQUFBLENBQUE7QUFDMUIsTUFBQSxJQUFBLENBQUssSUFBQSxHQUFPLElBQUE7QUFDWixNQUFBLElBQUEsQ0FBSyxJQUFBLEdBQU8sSUFBQTtBQUNaLE1BQUE7QUFBQSxJQUNGO0FBRUEsSUFBQSxJQUFJLENBQUMsVUFBQSxFQUFZLE1BQU0sSUFBSSxNQUFNLGtDQUFrQyxDQUFBO0FBQ25FLElBQUEsSUFBSSxJQUFBLEtBQVMsVUFBQSxJQUFjLFVBQUEsQ0FBVyxJQUFBLEtBQVMsSUFBQSxFQUFNO0FBRXJELElBQUEsZUFBQSxDQUFBLElBQUEsRUFBSywrQkFBTCxJQUFBLENBQUEsSUFBQSxFQUFpQixJQUFBLENBQUE7QUFFakIsSUFBQSxJQUFBLENBQUssSUFBQSxHQUFPLFVBQUE7QUFDWixJQUFBLElBQUEsQ0FBSyxPQUFPLFVBQUEsQ0FBVyxJQUFBO0FBRXZCLElBQUEsSUFBSSxVQUFBLENBQVcsSUFBQSxFQUFNLFVBQUEsQ0FBVyxJQUFBLENBQUssSUFBQSxHQUFPLElBQUE7QUFBQSw0QkFDbEMsS0FBQSxFQUFRLElBQUEsQ0FBQTtBQUVsQixJQUFBLFVBQUEsQ0FBVyxJQUFBLEdBQU8sSUFBQTtBQUFBLEVBQ3BCO0FBQUEsRUFFQSxpQkFBQSxDQUFrQixZQUFxQixhQUFBLEVBQXdCO0FBQzdELElBQUEsTUFBTSxPQUFBLEdBQVUsSUFBSSxJQUFBLENBQUssVUFBVSxDQUFBO0FBQ25DLElBQUEsWUFBQSxDQUFBLElBQUEsRUFBSyxlQUFBLENBQUEsQ0FBZ0IsR0FBQSxDQUFJLFVBQUEsRUFBWSxPQUFPLENBQUE7QUFFNUMsSUFBQSxNQUFNLFVBQUEsR0FBYSxJQUFBLENBQUssa0JBQUEsQ0FBbUIsYUFBYSxDQUFBO0FBRXhELElBQUEsSUFBSSxDQUFDLFVBQUEsRUFBWSxNQUFNLElBQUksS0FBQSxFQUFNO0FBRWpDLElBQUEsSUFBQSxDQUFLLGNBQUEsQ0FBZSxTQUFTLFVBQVUsQ0FBQTtBQUV2QyxJQUFBLE9BQU8sVUFBQTtBQUFBLEVBQ1Q7QUFBQSxFQUVBLGNBQUEsQ0FBZSxNQUFZLFVBQUEsRUFBa0I7QUFDM0MsSUFBQSxJQUFJLENBQUMsSUFBQSxFQUFNLE1BQU0sSUFBSSxNQUFNLHVCQUF1QixDQUFBO0FBRWxELElBQUEsSUFBSSxDQUFDLG1CQUFLLEtBQUEsQ0FBQSxFQUFPO0FBQ2YsTUFBQSxZQUFBLENBQUEsSUFBQSxFQUFLLEtBQUEsRUFBUSxtQkFBSyxLQUFBLEVBQVEsSUFBQSxDQUFBLENBQUE7QUFDMUIsTUFBQSxJQUFBLENBQUssSUFBQSxHQUFPLElBQUE7QUFDWixNQUFBLElBQUEsQ0FBSyxJQUFBLEdBQU8sSUFBQTtBQUNaLE1BQUE7QUFBQSxJQUNGO0FBRUEsSUFBQSxJQUFJLENBQUMsVUFBQSxFQUFZLE1BQU0sSUFBSSxNQUFNLDZCQUE2QixDQUFBO0FBQzlELElBQUEsSUFBSSxJQUFBLEtBQVMsVUFBQSxJQUFjLFVBQUEsQ0FBVyxJQUFBLEtBQVMsSUFBQSxFQUFNO0FBRXJELElBQUEsZUFBQSxDQUFBLElBQUEsRUFBSywrQkFBTCxJQUFBLENBQUEsSUFBQSxFQUFpQixJQUFBLENBQUE7QUFFakIsSUFBQSxJQUFBLENBQUssSUFBQSxHQUFPLFVBQUE7QUFDWixJQUFBLElBQUEsQ0FBSyxPQUFPLFVBQUEsQ0FBVyxJQUFBO0FBRXZCLElBQUEsSUFBSSxVQUFBLENBQVcsSUFBQSxFQUFNLFVBQUEsQ0FBVyxJQUFBLENBQUssSUFBQSxHQUFPLElBQUE7QUFBQSw0QkFDbEMsS0FBQSxFQUFRLElBQUEsQ0FBQTtBQUVsQixJQUFBLFVBQUEsQ0FBVyxJQUFBLEdBQU8sSUFBQTtBQUFBLEVBQ3BCO0FBQUEsRUFFQSxjQUFjLE9BQUEsRUFBa0I7QUFDOUIsSUFBQSxNQUFNLElBQUEsR0FBTyxJQUFBLENBQUssa0JBQUEsQ0FBbUIsT0FBTyxDQUFBO0FBQzVDLElBQUEsSUFBSSxDQUFDLE1BQU0sTUFBTSxJQUFJLE1BQU0sQ0FBQSw2QkFBQSxFQUFnQyxPQUFBLENBQVEsSUFBSSxDQUFBLENBQUEsQ0FBRyxDQUFBO0FBRTFFLElBQUEsZUFBQSxDQUFBLElBQUEsRUFBSywrQkFBTCxJQUFBLENBQUEsSUFBQSxFQUFpQixJQUFBLENBQUE7QUFDakIsSUFBQSxZQUFBLENBQUEsSUFBQSxFQUFLLGVBQUEsQ0FBQSxDQUFnQixPQUFPLE9BQU8sQ0FBQTtBQUFBLEVBQ3JDO0FBQUEsRUFhQSxtQkFBbUIsT0FBQSxFQUFtQjtBQUNwQyxJQUFBLElBQUksT0FBQSxJQUFXLEVBQUUsT0FBQSxZQUFtQixPQUFBLENBQUE7QUFDbEMsTUFBQSxNQUFNLElBQUksTUFBTSxDQUFBLGdFQUFBLENBQWtFLENBQUE7QUFFcEYsSUFBQSxPQUFRLE9BQUEsSUFBVyxZQUFBLENBQUEsSUFBQSxFQUFLLGVBQUEsQ0FBQSxDQUFnQixHQUFBLENBQUksT0FBTyxDQUFBLElBQU0sSUFBQTtBQUFBLEVBQzNEO0FBQ0YsQ0FBQTtBQXpKRSxLQUFBLEdBQUEsSUFBQSxPQUFBLEVBQUE7QUFDQSxLQUFBLEdBQUEsSUFBQSxPQUFBLEVBQUE7QUFDQSxlQUFBLEdBQUEsSUFBQSxPQUFBLEVBQUE7QUFISyxjQUFBLEdBQUEsSUFBQSxPQUFBLEVBQUE7QUF5SUwsYUFBQSxHQUFXLFNBQUMsSUFBQSxFQUFZO0FBQ3RCLEVBQUEsSUFBSSxJQUFBLENBQUssSUFBQSxFQUFNLElBQUEsQ0FBSyxJQUFBLENBQUssT0FBTyxJQUFBLENBQUssSUFBQTtBQUNyQyxFQUFBLElBQUksWUFBQSxDQUFBLElBQUEsRUFBSyxLQUFBLENBQUEsS0FBVSxJQUFBLEVBQU0sWUFBQSxDQUFBLElBQUEsRUFBSyxPQUFRLElBQUEsQ0FBSyxJQUFBLENBQUE7QUFFM0MsRUFBQSxJQUFJLElBQUEsQ0FBSyxJQUFBLEVBQU0sSUFBQSxDQUFLLElBQUEsQ0FBSyxPQUFPLElBQUEsQ0FBSyxJQUFBO0FBQ3JDLEVBQUEsSUFBSSxZQUFBLENBQUEsSUFBQSxFQUFLLEtBQUEsQ0FBQSxLQUFVLElBQUEsRUFBTSxZQUFBLENBQUEsSUFBQSxFQUFLLE9BQVEsSUFBQSxDQUFLLElBQUEsQ0FBQTtBQUUzQyxFQUFBLElBQUEsQ0FBSyxJQUFBLEdBQU8sSUFBQTtBQUNaLEVBQUEsSUFBQSxDQUFLLElBQUEsR0FBTyxJQUFBO0FBQ2QsQ0FBQTs7O0FDN0pGLElBQUEsSUFBQTtBQUlPLElBQU0sTUFBTixNQUFVO0FBQUEsRUFLZixXQUFBLENBQVksUUFBZ0IsWUFBQSxFQUFpRDtBQUY3RSxJQUFBLFlBQUEsQ0FBQSxJQUFBLEVBQUEsSUFBQSxDQUFBO0FBUEYsSUFBQSxJQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQTtBQVVJLElBQUEsSUFBQSxDQUFLLEdBQUEsR0FBTSxNQUFBO0FBQ1gsSUFBQSxJQUFBLENBQUssWUFBQSxHQUFlO0FBQUEsTUFDbEIsVUFBQSxFQUFBLENBQVksRUFBQSxHQUFBLFlBQUEsSUFBQSxJQUFBLEdBQUEsTUFBQSxHQUFBLFlBQUEsQ0FBYyxVQUFBLEtBQWQsSUFBQSxHQUFBLEVBQUEsR0FBNEIsR0FBQTtBQUFBLE1BQ3hDLGNBQUEsRUFBQSxDQUFnQixFQUFBLEdBQUEsWUFBQSxJQUFBLElBQUEsR0FBQSxNQUFBLEdBQUEsWUFBQSxDQUFjLGNBQUEsS0FBZCxJQUFBLEdBQUEsRUFBQSxHQUFnQyxHQUFBO0FBQUEsTUFDaEQsY0FBQSxFQUFBLENBQWdCLEVBQUEsR0FBQSxZQUFBLElBQUEsSUFBQSxHQUFBLE1BQUEsR0FBQSxZQUFBLENBQWMsY0FBQSxLQUFkLElBQUEsR0FBQSxFQUFBLEdBQWdDLEdBQUE7QUFBQSxNQUNoRCxZQUFBLEVBQUEsQ0FBYyxFQUFBLEdBQUEsWUFBQSxJQUFBLElBQUEsR0FBQSxNQUFBLEdBQUEsWUFBQSxDQUFjLFlBQUEsS0FBZCxJQUFBLEdBQUEsRUFBQSxHQUE4QixHQUFBO0FBQUEsTUFDNUMsUUFBQSxFQUFBLENBQVUsRUFBQSxHQUFBLFlBQUEsSUFBQSxJQUFBLEdBQUEsTUFBQSxHQUFBLFlBQUEsQ0FBYyxRQUFBLEtBQWQsSUFBQSxHQUFBLEVBQUEsR0FBMEIsVUFBQTtBQUFBLE1BQ3BDLFlBQUEsRUFBQSxDQUFjLEVBQUEsR0FBQSxZQUFBLElBQUEsSUFBQSxHQUFBLE1BQUEsR0FBQSxZQUFBLENBQWMsWUFBQSxLQUFkLElBQUEsR0FBQSxFQUFBLEdBQThCO0FBQUEsS0FDOUM7QUFDQSxJQUFBLFlBQUEsQ0FBQSxJQUFBLEVBQUssSUFBQSxFQUFPLElBQUksR0FBQSxFQUFJLENBQUE7QUFDcEIsSUFBQSxJQUFBLENBQUssU0FBQSxFQUFVO0FBQUEsRUFDakI7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLFNBQUEsR0FBWTtBQTFCZCxJQUFBLElBQUEsRUFBQTtBQTJCSSxJQUFBLElBQUksT0FBTyxLQUFLLEdBQUEsS0FBUSxRQUFBLElBQVksQ0FBQyxJQUFBLENBQUssR0FBQSxDQUFJLFVBQUEsQ0FBVyxLQUFLLENBQUEsRUFBRztBQUMvRCxNQUFBLE1BQU0sSUFBSSxNQUFNLHdFQUF3RSxDQUFBO0FBQUEsSUFDMUY7QUFFQSxJQUFBLElBQUksQ0FBQyxDQUFDLFVBQUEsRUFBYSxNQUFBLEVBQVEsSUFBQSxFQUFNLElBQUksQ0FBQSxDQUFFLFFBQUEsQ0FBUyxJQUFBLENBQUssWUFBQSxDQUFhLFFBQVEsQ0FBQSxFQUFHO0FBQzNFLE1BQUEsTUFBTSxJQUFJLE1BQU0sK0RBQWdFLENBQUE7QUFBQSxJQUNsRjtBQUVBLElBQUEsTUFBTSxpQkFBaUIsSUFBQSxDQUFLLEdBQUEsQ0FDekIsS0FBQSxDQUFNLE1BQUEsQ0FBTyxLQUFLLFlBQUEsQ0FBYSxRQUFRLENBQUMsQ0FBQSxDQUN4QyxPQUFPLENBQUMsVUFBQSxLQUFlLElBQUEsQ0FBSyxlQUFBLENBQWdCLFVBQVUsQ0FBQyxDQUFBO0FBRTFELElBQUEsTUFBTSxFQUFFLFVBQUEsRUFBWSxjQUFBLEVBQWdCLGNBQUEsRUFBZ0IsWUFBQSxLQUFpQixJQUFBLENBQUssWUFBQTtBQUUxRSxJQUFBLEtBQUEsTUFBVyxjQUFjLGNBQUEsRUFBZ0I7QUFDdkMsTUFBQSxNQUFNLE1BQUEsR0FBUyxVQUFBLENBQVcsS0FBQSxDQUFNLFVBQVUsQ0FBQTtBQUMxQyxNQUFBLE1BQU0sSUFBQSxHQUFPLFVBQUEsQ0FBVyxTQUFBLENBQVUsQ0FBQSxFQUFHLENBQUMsQ0FBQTtBQUN0QyxNQUFBLE1BQU0sT0FBQSxHQUFVLElBQUksT0FBQSxDQUFRLElBQUEsRUFBTSxLQUFLLFlBQVksQ0FBQTtBQUNuRCxNQUFBLElBQUksUUFBQSxHQUFXLElBQUEsS0FBUyxLQUFBLEdBQVEsQ0FBQSxHQUFJLENBQUE7QUFDcEMsTUFBQSxPQUFBLENBQVEsT0FBTyxFQUFDO0FBRWhCLE1BQUEsS0FBQSxNQUFXLFNBQVMsTUFBQSxFQUFRO0FBQzFCLFFBQUEsT0FBQSxDQUFRLEtBQUssUUFBUSxDQUFBLEdBQUksUUFBUSxJQUFBLENBQUssUUFBUSxLQUFLLEVBQUM7QUFDcEQsUUFBQSxJQUFJLGNBQUEsR0FBaUIsQ0FBQTtBQUVyQixRQUFBLEtBQUEsTUFBVyxXQUFBLElBQWUsS0FBQSxDQUFNLEtBQUEsQ0FBTSxjQUFjLENBQUEsRUFBRztBQUNyRCxVQUFBLElBQUksT0FBQSxHQUFVLENBQUE7QUFDZCxVQUFBLE9BQUEsQ0FBUSxJQUFBLENBQUssUUFBUSxDQUFBLENBQUcsY0FBYyxDQUFBLEdBQUksT0FBQSxDQUFRLElBQUEsQ0FBSyxRQUFRLENBQUEsQ0FBRyxjQUFjLENBQUEsSUFBSyxFQUFDO0FBRXRGLFVBQUEsS0FBQSxNQUFXLElBQUEsSUFBUSxXQUFBLENBQVksS0FBQSxDQUFNLGNBQWMsQ0FBQSxFQUFHO0FBQ3BELFlBQUEsT0FBQSxDQUFRLElBQUEsQ0FBSyxRQUFRLENBQUEsQ0FBRyxjQUFjLEVBQUcsT0FBQSxFQUFTLENBQUEsR0FBSSxJQUFBLENBQUssS0FBQSxDQUFNLFlBQVksQ0FBQTtBQUFBLFVBQy9FO0FBRUEsVUFBQSxjQUFBLEVBQUE7QUFBQSxRQUNGO0FBRUEsUUFBQSxRQUFBLEVBQUE7QUFBQSxNQUNGO0FBRUEsTUFBQSxJQUFJLElBQUEsS0FBUyxLQUFBLEtBQUEsQ0FBUyxFQUFBLEdBQUEsT0FBQSxDQUFRLElBQUEsQ0FBSyxDQUFDLE1BQWQsSUFBQSxHQUFBLE1BQUEsR0FBQSxFQUFBLENBQWtCLENBQUEsQ0FBQSxDQUFBLElBQU0sTUFBQSxDQUFPLENBQUMsQ0FBQSxFQUFHO0FBQ3ZELFFBQUEsT0FBQSxDQUFRLElBQUEsQ0FBSyxDQUFDLENBQUEsR0FBSSxDQUFDLEVBQUUsQ0FBQSxFQUFHLENBQUMsTUFBQSxDQUFPLENBQUMsQ0FBQyxDQUFBLEVBQUcsQ0FBQTtBQUFBLE1BQ3ZDO0FBRUEsTUFBQSxZQUFBLENBQUEsSUFBQSxFQUFLLElBQUEsQ0FBQSxDQUFLLGlCQUFpQixPQUFPLENBQUE7QUFBQSxJQUNwQztBQUFBLEVBQ0Y7QUFBQSxFQUVBLEtBQUEsR0FBUTtBQTFFVixJQUFBLElBQUEsRUFBQTtBQTJFSSxJQUFBLE1BQU0sRUFBRSxVQUFBLEVBQVksY0FBQSxFQUFnQixnQkFBZ0IsWUFBQSxFQUFjLFlBQUEsS0FDaEUsSUFBQSxDQUFLLFlBQUE7QUFDUCxJQUFBLE1BQU0sUUFBQSxHQUFXLEtBQUssV0FBQSxFQUFZO0FBQ2xDLElBQUEsTUFBTSxjQUFjLEVBQUM7QUFFckIsSUFBQSxLQUFBLE1BQVcsV0FBVyxRQUFBLEVBQVU7QUFDOUIsTUFBQSxNQUFNLGVBQWUsRUFBQztBQUV0QixNQUFBLEtBQUEsTUFBVyxRQUFBLElBQVksUUFBUSxJQUFBLEVBQU07QUFDbkMsUUFBQSxNQUFNLGdCQUFnQixFQUFDO0FBRXZCLFFBQUEsS0FBQSxNQUFXLGNBQUEsSUFBa0IsT0FBQSxDQUFRLElBQUEsQ0FBSyxRQUFRLENBQUEsRUFBSTtBQUNwRCxVQUFBLE1BQU0sY0FBYyxFQUFDO0FBRXJCLFVBQUEsS0FBQSxNQUFXLFdBQVcsY0FBQSxFQUFnQjtBQUNwQyxZQUFBLFdBQUEsQ0FBWSxNQUFLLEVBQUEsR0FBQSxjQUFBLENBQWUsT0FBTyxDQUFBLEtBQXRCLElBQUEsR0FBQSxNQUFBLEdBQUEsRUFBQSxDQUF5QixLQUFLLFlBQUEsQ0FBYSxDQUFBO0FBQUEsVUFDOUQ7QUFFQSxVQUFBLGFBQUEsQ0FBYyxJQUFBLENBQUssV0FBQSxDQUFZLElBQUEsQ0FBSyxjQUFjLENBQUMsQ0FBQTtBQUFBLFFBQ3JEO0FBRUEsUUFBQSxZQUFBLENBQWEsSUFBQSxDQUFLLGFBQUEsQ0FBYyxJQUFBLENBQUssY0FBYyxDQUFDLENBQUE7QUFBQSxNQUN0RDtBQUVBLE1BQUEsV0FBQSxDQUFZLElBQUEsQ0FBSyxZQUFBLENBQWEsSUFBQSxDQUFLLFVBQVUsQ0FBQyxDQUFBO0FBQUEsSUFDaEQ7QUFFQSxJQUFBLE9BQU8sV0FBQSxDQUFZLEtBQUssWUFBWSxDQUFBO0FBQUEsRUFDdEM7QUFBQSxFQUVBLFdBQVcsSUFBQSxFQUFtQztBQUM1QyxJQUFBLElBQUksQ0FBQyxjQUFBLENBQWUsSUFBQSxDQUFLLElBQUksQ0FBQSxRQUFTLElBQUksS0FBQSxDQUFNLENBQUEsMkJBQUEsRUFBOEIsSUFBSSxDQUFBLENBQUEsQ0FBRyxDQUFBO0FBRXJGLElBQUEsT0FBTyxZQUFBLENBQUEsSUFBQSxFQUFLLElBQUEsQ0FBQSxDQUFLLFVBQUEsQ0FBVyxJQUFJLENBQUE7QUFBQSxFQUNsQztBQUFBLEVBRUEsWUFBWSxJQUFBLEVBQStCO0FBQ3pDLElBQUEsSUFBSSxJQUFBLElBQVEsQ0FBQyxjQUFBLENBQWUsSUFBQSxDQUFLLElBQUksQ0FBQSxFQUFHLE1BQU0sSUFBSSxLQUFBLENBQU0sQ0FBQSwyQkFBQSxFQUE4QixJQUFJLENBQUEsQ0FBQSxDQUFHLENBQUE7QUFFN0YsSUFBQSxPQUFPLFlBQUEsQ0FBQSxJQUFBLEVBQUssSUFBQSxDQUFBLENBQUssV0FBQSxDQUFZLElBQUksQ0FBQTtBQUFBLEVBQ25DO0FBQUEsRUFFQSxpQkFDRSxJQUFBLEVBQ0EsWUFBQSxFQUNBLGtCQUFpQyxFQUFDLEVBQ2xDLGNBQWMsS0FBQSxFQUNIO0FBQ1gsSUFBQSxJQUFJLENBQUMsY0FBQSxDQUFlLElBQUEsQ0FBSyxJQUFJLENBQUEsUUFBUyxJQUFJLEtBQUEsQ0FBTSxDQUFBLDJCQUFBLEVBQThCLElBQUksQ0FBQSxDQUFBLENBQUcsQ0FBQTtBQUNyRixJQUFBLElBQUksQ0FBQyxZQUFBLElBQWdCLEVBQUUsWUFBQSxZQUF3QixPQUFBLENBQUE7QUFDN0MsTUFBQSxNQUFNLElBQUksTUFBTSxDQUFBLGlDQUFBLENBQW1DLENBQUE7QUFDckQsSUFBQSxJQUFJLENBQUMsZUFBQSxJQUFtQixDQUFDLEtBQUEsQ0FBTSxRQUFRLGVBQWUsQ0FBQTtBQUNwRCxNQUFBLE1BQU0sSUFBSSxNQUFNLENBQUEsb0NBQUEsQ0FBc0MsQ0FBQTtBQUN4RCxJQUFBLElBQUksT0FBTyxXQUFBLEtBQWdCLFNBQUE7QUFDekIsTUFBQSxNQUFNLElBQUksS0FBQSxDQUFNLENBQUEsa0NBQUEsRUFBcUMsV0FBVyxDQUFBLENBQUEsQ0FBRyxDQUFBO0FBQ3JFLElBQUEsSUFBSSxDQUFDLFlBQUEsQ0FBQSxJQUFBLEVBQUssSUFBQSxDQUFBLENBQUssa0JBQUEsQ0FBbUIsWUFBWSxDQUFBO0FBQzVDLE1BQUEsTUFBTSxJQUFJLEtBQUEsQ0FBTSxDQUFBLGtDQUFBLEVBQXFDLFlBQUEsQ0FBYSxJQUFJLENBQUEsQ0FBQSxDQUFHLENBQUE7QUFFM0UsSUFBQSxPQUFPLG1CQUFLLElBQUEsQ0FBQSxDQUFLLGdCQUFBLENBQWlCLElBQUEsRUFBTSxZQUFBLEVBQWMsaUJBQWlCLFdBQVcsQ0FBQTtBQUFBLEVBQ3BGO0FBQUEsRUFFQSxjQUFjLElBQUEsRUFBNEI7QUFDeEMsSUFBQSxJQUFJLENBQUMsY0FBQSxDQUFlLElBQUEsQ0FBSyxJQUFJLENBQUEsUUFBUyxJQUFJLEtBQUEsQ0FBTSxDQUFBLDJCQUFBLEVBQThCLElBQUksQ0FBQSxDQUFBLENBQUcsQ0FBQTtBQUVyRixJQUFBLE9BQU8sWUFBQSxDQUFBLElBQUEsRUFBSyxNQUFLLGdCQUFBLENBQWlCLElBQUksUUFBUSxJQUFBLEVBQU0sSUFBQSxDQUFLLFlBQVksQ0FBQyxDQUFBO0FBQUEsRUFDeEU7QUFBQSxFQUVBLGtCQUFBLENBQW1CLE1BQW1CLGFBQUEsRUFBaUM7QUFDckUsSUFBQSxJQUFJLENBQUMsY0FBQSxDQUFlLElBQUEsQ0FBSyxJQUFJLENBQUEsUUFBUyxJQUFJLEtBQUEsQ0FBTSxDQUFBLDJCQUFBLEVBQThCLElBQUksQ0FBQSxDQUFBLENBQUcsQ0FBQTtBQUNyRixJQUFBLElBQUksQ0FBQyxhQUFBLElBQWlCLEVBQUUsYUFBQSxZQUF5QixPQUFBLENBQUE7QUFDL0MsTUFBQSxNQUFNLElBQUksTUFBTSxDQUFBLGtDQUFBLENBQW9DLENBQUE7QUFDdEQsSUFBQSxJQUFJLFlBQUEsQ0FBQSxJQUFBLEVBQUssSUFBQSxDQUFBLENBQUssa0JBQUEsQ0FBbUIsYUFBYSxDQUFBO0FBQzVDLE1BQUEsTUFBTSxJQUFJLEtBQUEsQ0FBTSxDQUFBLG1DQUFBLEVBQXNDLGFBQUEsQ0FBYyxJQUFJLENBQUEsQ0FBQSxDQUFHLENBQUE7QUFFN0UsSUFBQSxPQUFPLFlBQUEsQ0FBQSxJQUFBLEVBQUssTUFBSyxnQkFBQSxDQUFpQixJQUFJLFFBQVEsSUFBQSxFQUFNLElBQUEsQ0FBSyxZQUFZLENBQUEsRUFBRyxhQUFhLENBQUE7QUFBQSxFQUN2RjtBQUFBLEVBRUEsbUJBQUEsQ0FBb0IsTUFBbUIsYUFBQSxFQUFpQztBQUN0RSxJQUFBLElBQUksQ0FBQyxjQUFBLENBQWUsSUFBQSxDQUFLLElBQUksQ0FBQSxRQUFTLElBQUksS0FBQSxDQUFNLENBQUEsMkJBQUEsRUFBOEIsSUFBSSxDQUFBLENBQUEsQ0FBRyxDQUFBO0FBQ3JGLElBQUEsSUFBSSxDQUFDLGFBQUEsSUFBaUIsRUFBRSxhQUFBLFlBQXlCLE9BQUEsQ0FBQTtBQUMvQyxNQUFBLE1BQU0sSUFBSSxNQUFNLENBQUEsa0NBQUEsQ0FBb0MsQ0FBQTtBQUN0RCxJQUFBLElBQUksWUFBQSxDQUFBLElBQUEsRUFBSyxJQUFBLENBQUEsQ0FBSyxrQkFBQSxDQUFtQixhQUFhLENBQUE7QUFDNUMsTUFBQSxNQUFNLElBQUksS0FBQSxDQUFNLENBQUEsa0NBQUEsRUFBcUMsYUFBQSxDQUFjLElBQUksQ0FBQSxDQUFBLENBQUcsQ0FBQTtBQUU1RSxJQUFBLE9BQU8sWUFBQSxDQUFBLElBQUEsRUFBSyxNQUFLLGlCQUFBLENBQWtCLElBQUksUUFBUSxJQUFBLEVBQU0sSUFBQSxDQUFLLFlBQVksQ0FBQSxFQUFHLGFBQWEsQ0FBQTtBQUFBLEVBQ3hGO0FBQUEsRUFFQSxjQUFjLE9BQUEsRUFBa0I7QUFDOUIsSUFBQSxJQUFBLENBQUssY0FBQSxDQUFlLENBQUMsT0FBTyxDQUFDLENBQUE7QUFBQSxFQUMvQjtBQUFBLEVBRUEsZUFBZSxRQUFBLEVBQXFCO0FBQ2xDLElBQUEsS0FBQSxNQUFXLFdBQVcsUUFBQSxFQUFVO0FBQzlCLE1BQUEsSUFBSSxDQUFDLE9BQUEsSUFBVyxFQUFFLE9BQUEsWUFBbUIsT0FBQSxDQUFBO0FBQ25DLFFBQUEsTUFBTSxJQUFJLE1BQU0sQ0FBQSw2QkFBQSxDQUErQixDQUFBO0FBQ2pELE1BQUEsSUFBSSxZQUFBLENBQUEsSUFBQSxFQUFLLElBQUEsQ0FBQSxDQUFLLGtCQUFBLENBQW1CLE9BQU8sQ0FBQTtBQUN0QyxRQUFBLE1BQU0sSUFBSSxLQUFBLENBQU0sQ0FBQSw2QkFBQSxFQUFnQyxPQUFBLENBQVEsSUFBSSxDQUFBLENBQUEsQ0FBRyxDQUFBO0FBRWpFLE1BQUEsWUFBQSxDQUFBLElBQUEsRUFBSyxJQUFBLENBQUEsQ0FBSyxjQUFjLE9BQU8sQ0FBQTtBQUFBLElBQ2pDO0FBQUEsRUFDRjtBQUFBLEVBRUEsZ0JBQUEsQ0FBaUIsU0FBa0IsYUFBQSxFQUF3QjtBQUN6RCxJQUFBLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBQSxZQUFtQixVQUFVLE1BQU0sSUFBSSxNQUFNLENBQUEsNEJBQUEsQ0FBOEIsQ0FBQTtBQUM3RixJQUFBLElBQUksQ0FBQyxhQUFBLElBQWlCLEVBQUUsYUFBQSxZQUF5QixPQUFBLENBQUE7QUFDL0MsTUFBQSxNQUFNLElBQUksTUFBTSxDQUFBLGtDQUFBLENBQW9DLENBQUE7QUFFdEQsSUFBQSxNQUFNLElBQUEsR0FBTyxZQUFBLENBQUEsSUFBQSxFQUFLLElBQUEsQ0FBQSxDQUFLLGtCQUFBLENBQW1CLE9BQU8sQ0FBQTtBQUNqRCxJQUFBLE1BQU0sVUFBQSxHQUFhLFlBQUEsQ0FBQSxJQUFBLEVBQUssSUFBQSxDQUFBLENBQUssa0JBQUEsQ0FBbUIsYUFBYSxDQUFBO0FBRTdELElBQUEsSUFBSSxDQUFDLE1BQU0sTUFBTSxJQUFJLE1BQU0sQ0FBQSw2QkFBQSxFQUFnQyxPQUFBLENBQVEsSUFBSSxDQUFBLENBQUEsQ0FBRyxDQUFBO0FBQzFFLElBQUEsSUFBSSxDQUFDLFlBQVksTUFBTSxJQUFJLE1BQU0sQ0FBQSxtQ0FBQSxFQUFzQyxhQUFBLENBQWMsSUFBSSxDQUFBLENBQUEsQ0FBRyxDQUFBO0FBRTVGLElBQUEsWUFBQSxDQUFBLElBQUEsRUFBSyxJQUFBLENBQUEsQ0FBSyxhQUFBLENBQWMsSUFBQSxFQUFNLFVBQVUsQ0FBQTtBQUFBLEVBQzFDO0FBQUEsRUFFQSxpQkFBQSxDQUFrQixTQUFrQixhQUFBLEVBQXdCO0FBQzFELElBQUEsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFBLFlBQW1CLFVBQVUsTUFBTSxJQUFJLE1BQU0sQ0FBQSw0QkFBQSxDQUE4QixDQUFBO0FBQzdGLElBQUEsSUFBSSxDQUFDLGFBQUEsSUFBaUIsRUFBRSxhQUFBLFlBQXlCLE9BQUEsQ0FBQTtBQUMvQyxNQUFBLE1BQU0sSUFBSSxNQUFNLENBQUEsa0NBQUEsQ0FBb0MsQ0FBQTtBQUV0RCxJQUFBLE1BQU0sSUFBQSxHQUFPLFlBQUEsQ0FBQSxJQUFBLEVBQUssSUFBQSxDQUFBLENBQUssa0JBQUEsQ0FBbUIsT0FBTyxDQUFBO0FBQ2pELElBQUEsTUFBTSxVQUFBLEdBQWEsWUFBQSxDQUFBLElBQUEsRUFBSyxJQUFBLENBQUEsQ0FBSyxrQkFBQSxDQUFtQixhQUFhLENBQUE7QUFFN0QsSUFBQSxJQUFJLENBQUMsTUFBTSxNQUFNLElBQUksTUFBTSxDQUFBLDZCQUFBLEVBQWdDLE9BQUEsQ0FBUSxJQUFJLENBQUEsQ0FBQSxDQUFHLENBQUE7QUFDMUUsSUFBQSxJQUFJLENBQUMsWUFBWSxNQUFNLElBQUksTUFBTSxDQUFBLG1DQUFBLEVBQXNDLGFBQUEsQ0FBYyxJQUFJLENBQUEsQ0FBQSxDQUFHLENBQUE7QUFFNUYsSUFBQSxZQUFBLENBQUEsSUFBQSxFQUFLLElBQUEsQ0FBQSxDQUFLLGNBQUEsQ0FBZSxJQUFBLEVBQU0sVUFBVSxDQUFBO0FBQUEsRUFDM0M7QUFBQSxFQUVBLGVBQUEsQ0FDRSxhQUFBLEVBQ0EsVUFBQSxHQUFhLENBQUEsRUFDYixRQUFRLEtBQUEsRUFDUjtBQWpOSixJQUFBLElBQUEsRUFBQTtBQWtOSSxJQUFBLElBQ0UsQ0FBQyxhQUFBLElBQ0QsT0FBTyxhQUFBLEtBQWtCLFFBQUEsSUFDekIsT0FBTyxNQUFBLENBQU8sYUFBYSxDQUFBLENBQUUsSUFBQSxDQUFLLENBQUMsR0FBQSxLQUFRLENBQUMsS0FBQSxDQUFNLE9BQUEsQ0FBUSxHQUFHLENBQUMsQ0FBQTtBQUU5RCxNQUFBLE1BQU0sSUFBSSxNQUFNLENBQUEsa0NBQUEsQ0FBb0MsQ0FBQTtBQUN0RCxJQUFBLElBQUksQ0FBQyxVQUFBLElBQWMsT0FBTyxVQUFBLEtBQWUsUUFBQTtBQUN2QyxNQUFBLE1BQU0sSUFBSSxLQUFBLENBQU0sQ0FBQSxpQ0FBQSxFQUFvQyxVQUFVLENBQUEsQ0FBQSxDQUFHLENBQUE7QUFDbkUsSUFBQSxJQUFJLEtBQUEsSUFBUyxDQUFDLHFCQUFBLENBQXNCLElBQUEsQ0FBSyxLQUFLLENBQUE7QUFDNUMsTUFBQSxNQUFNLElBQUksS0FBQSxDQUFNLENBQUEsNEJBQUEsRUFBK0IsS0FBSyxDQUFBLENBQUEsQ0FBRyxDQUFBO0FBRXpELElBQUEsTUFBTSxRQUFBLEdBQVcsS0FBSyxXQUFBLEVBQVk7QUFDbEMsSUFBQSxNQUFNLFdBQWlELEVBQUM7QUFDeEQsSUFBQSxNQUFNLHVCQUFvRSxFQUFDO0FBRTNFLElBQUEsS0FBQSxNQUFXLENBQUMsR0FBQSxFQUFLLGdCQUFnQixLQUFLLE1BQUEsQ0FBTyxPQUFBLENBQVEsYUFBYSxDQUFBLEVBQUc7QUFDbkUsTUFBQSxRQUFBLENBQVMsR0FBRyxDQUFBLEdBQUksVUFBQTtBQUVoQixNQUFBLElBQUksZ0JBQUE7QUFDRixRQUFBLEtBQUEsTUFBVyxPQUFPLGdCQUFBLEVBQWtCLENBQUEsQ0FBQywyRUFBOEIsRUFBQyxFQUFHLEtBQUssR0FBRyxDQUFBO0FBQUEsSUFDbkY7QUFFQSxJQUFBLEtBQUEsTUFBVyxXQUFXLFFBQUEsRUFBVTtBQUM5QixNQUFBLElBQUksYUFBQSxDQUFjLE9BQUEsQ0FBUSxJQUFJLENBQUEsRUFBRztBQUMvQixRQUFBLE9BQUEsQ0FBUSxHQUFBLENBQUksQ0FBQSxFQUFHLE9BQUEsQ0FBUSxJQUFJLENBQUEsQ0FBQSxFQUFJLEtBQUssQ0FBQSxDQUFBLEVBQUksTUFBQSxDQUFPLFFBQUEsQ0FBUyxPQUFBLENBQVEsSUFBSSxDQUFBLEVBQUcsQ0FBQyxDQUFBO0FBRXhFLFFBQUEsSUFBSSxvQkFBQSxDQUFxQixRQUFRLElBQUksQ0FBQTtBQUNuQyxVQUFBLEtBQUEsTUFBVyxPQUFPLG9CQUFBLENBQXFCLE9BQUEsQ0FBUSxJQUFJLENBQUEsRUFBSSxRQUFBLENBQVMsR0FBRyxDQUFBLEdBQUksVUFBQTtBQUFBLE1BQzNFO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUVRLGdCQUFnQixPQUFBLEVBQWlCO0FBQ3ZDLElBQUEsSUFBSSxlQUFBLENBQWdCLElBQUEsQ0FBSyxPQUFPLENBQUEsRUFBRztBQUNqQyxNQUFBLE9BQU8sSUFBQTtBQUFBLElBQ1Q7QUFFQSxJQUFBLE1BQU0sSUFBSSxNQUFNLENBQUEsa0JBQUEsRUFBcUIsT0FBQSxDQUFRLFVBQVUsQ0FBQSxFQUFHLENBQUMsQ0FBQyxDQUFBLENBQUEsQ0FBRyxDQUFBO0FBQUEsRUFDakU7QUFDRjtBQWxQRSxJQUFBLEdBQUEsSUFBQSxPQUFBLEVBQUEiLCJmaWxlIjoiaW5kZXguY2pzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcmV0dGlmeSwgU2VnbWVudFR5cGUsIFRQYXJzZU9wdGlvbnMsIFRTZWdtZW50RGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgU2VnbWVudCB7XG4gIGRhdGE6IFRTZWdtZW50RGF0YSA9IHt9O1xuICBwcml2YXRlIHBhcnNlT3B0aW9uczogUHJldHRpZnk8T21pdDxUUGFyc2VPcHRpb25zLCAnZW9sRGVsaW0nIHwgJ2J1aWxkRW9sQ2hhcic+PjtcbiAgI3BhcnNlTWFwOiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHR5cGU6IFNlZ21lbnRUeXBlLFxuICAgIHBhcnNlT3B0aW9ucz86IFByZXR0aWZ5PE9taXQ8VFBhcnNlT3B0aW9ucywgJ2VvbERlbGltJyB8ICdidWlsZEVvbENoYXInPj4sXG4gICkge1xuICAgIGlmICghdHlwZSB8fCAhL15bQS1aXFxkXXszfShcXC5cXGQrKXswLDJ9JC8udGVzdCh0eXBlKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdmaWVsZCcgWyR7dHlwZX1dYCk7XG4gICAgdGhpcy5kYXRhW3R5cGUgPT09ICdNU0gnID8gJzEnIDogJzAnXSA9IFt7IDE6IFt0eXBlXSB9XTtcbiAgICB0aGlzLnBhcnNlT3B0aW9ucyA9IHtcbiAgICAgIGZpZWxkRGVsaW06IHBhcnNlT3B0aW9ucz8uZmllbGREZWxpbSA/PyAnfCcsXG4gICAgICByZXBlYXRpbmdEZWxpbTogcGFyc2VPcHRpb25zPy5yZXBlYXRpbmdEZWxpbSA/PyAnficsXG4gICAgICBjb21wb25lbnREZWxpbTogcGFyc2VPcHRpb25zPy5jb21wb25lbnREZWxpbSA/PyAnXicsXG4gICAgICBzdWJDb21wRGVsaW06IHBhcnNlT3B0aW9ucz8uc3ViQ29tcERlbGltID8/ICcmJyxcbiAgICB9O1xuICAgIHRoaXMuI3BhcnNlTWFwID0ge1xuICAgICAgMDogdGhpcy5wYXJzZU9wdGlvbnMuZmllbGREZWxpbSxcbiAgICAgIDE6IHRoaXMucGFyc2VPcHRpb25zLnJlcGVhdGluZ0RlbGltLFxuICAgICAgMjogdGhpcy5wYXJzZU9wdGlvbnMuY29tcG9uZW50RGVsaW0sXG4gICAgICAzOiB0aGlzLnBhcnNlT3B0aW9ucy5zdWJDb21wRGVsaW0sXG4gICAgfTtcbiAgfVxuXG4gIGdldChmaWVsZDogc3RyaW5nLCByZXBlYXRpbmdJbmRleDogbnVtYmVyIHwgdHJ1ZSA9IDAsIHN1YkNvbXBvbmVudEluZGV4OiBudW1iZXIgfCB0cnVlID0gMCkge1xuICAgIGNvbnN0IHZhbGlkYXRlID0gKHZhbDogbnVtYmVyIHwgdHJ1ZSkgPT5cbiAgICAgICEoKHR5cGVvZiB2YWwgPT09ICdudW1iZXInICYmIHZhbCA+PSAwKSB8fCB2YWwgPT0gdHJ1ZSk7XG5cbiAgICBpZiAoIWZpZWxkIHx8ICEvXltBLVpcXGRdezN9KFxcLlxcZCspezAsMn0kLy50ZXN0KGZpZWxkKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdmaWVsZCcgWyR7ZmllbGR9XWApO1xuICAgIGlmICh2YWxpZGF0ZShyZXBlYXRpbmdJbmRleCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAncmVwZWF0aW5nSW5kZXgnIFske3JlcGVhdGluZ0luZGV4fV1gKTtcbiAgICBpZiAodmFsaWRhdGUoc3ViQ29tcG9uZW50SW5kZXgpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3N1YkNvbXBvbmVudEluZGV4JyBbJHtzdWJDb21wb25lbnRJbmRleH1dYCk7XG5cbiAgICBjb25zdCBbdHlwZSwgZmllbGRJZHgsIGNvbXBJZHhdID0gZmllbGQuc3BsaXQoJy4nKTtcbiAgICBjb25zdCBwYXRoID0gW2ZpZWxkSWR4LCByZXBlYXRpbmdJbmRleCwgY29tcElkeCwgc3ViQ29tcG9uZW50SW5kZXhdIGFzIGNvbnN0O1xuXG4gICAgaWYgKCF0eXBlIHx8IHR5cGUgIT09IHRoaXMudHlwZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgcGFyYW1ldGVyOiAnZmllbGQnLiBDYW5ub3QgZ2V0IFske2ZpZWxkfV0gZnJvbSBbJHt0aGlzLnR5cGV9XSBzZWdtZW50LmAsXG4gICAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuI3RyYXZlcnNlKHRoaXMuZGF0YSwgcGF0aCk7XG4gIH1cblxuICBzZXQoXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIHJlcGVhdGluZ0luZGV4OiBudW1iZXIgfCB0cnVlID0gMCxcbiAgICBzdWJDb21wb25lbnRJbmRleDogbnVtYmVyIHwgdHJ1ZSA9IDAsXG4gICkge1xuICAgIGNvbnN0IHZhbGlkYXRlID0gKHZhbDogbnVtYmVyIHwgdHJ1ZSkgPT5cbiAgICAgICEoKHR5cGVvZiB2YWwgPT09ICdudW1iZXInICYmIHZhbCA+PSAwKSB8fCB2YWwgPT0gdHJ1ZSk7XG5cbiAgICBpZiAoIWZpZWxkIHx8ICEvXltBLVpcXGRdezN9KFxcLlxcZCspezEsMn0kLy50ZXN0KGZpZWxkKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdmaWVsZCcgWyR7ZmllbGR9XWApO1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAndmFsdWUnIFske3ZhbHVlfV1gKTtcbiAgICBpZiAodmFsaWRhdGUocmVwZWF0aW5nSW5kZXgpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3JlcGVhdGluZ0luZGV4JyBbJHtyZXBlYXRpbmdJbmRleH1dYCk7XG4gICAgaWYgKHZhbGlkYXRlKHN1YkNvbXBvbmVudEluZGV4KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdzdWJDb21wb25lbnRJbmRleCcgWyR7c3ViQ29tcG9uZW50SW5kZXh9XWApO1xuXG4gICAgY29uc3QgW3R5cGUsIGZpZWxkSWR4LCBjb21wSWR4XSA9IGZpZWxkLnNwbGl0KCcuJyk7XG5cbiAgICBpZiAoIXR5cGUgfHwgdHlwZSAhPT0gdGhpcy50eXBlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBwYXJhbWV0ZXI6ICdmaWVsZCcgWyR7ZmllbGR9XS4gQ2Fubm90IHNldCBbJHtmaWVsZH1dIGZyb20gWyR7dGhpcy50eXBlfV0gc2VnbWVudC5gLFxuICAgICAgKTtcbiAgICBpZiAoIWZpZWxkSWR4IHx8ICFOdW1iZXIoZmllbGRJZHgpKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAnZmllbGQnIFske2ZpZWxkfV1gKTtcblxuICAgIGZvciAobGV0IGkgPSB0eXBlID09PSAnTVNIJyA/IDIgOiAxOyBpIDw9IE51bWJlcihmaWVsZElkeCk7IGkrKykge1xuICAgICAgaWYgKCF0aGlzLmRhdGE/LltpXT8uWzBdPy5bMV0/LlswXSA9PSBudWxsKSB0aGlzLmRhdGFbaV0gPSBbeyAxOiBbJyddIH1dO1xuICAgIH1cblxuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHJlcGVhdGluZ0luZGV4KSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gTnVtYmVyKHJlcGVhdGluZ0luZGV4KTsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFbZmllbGRJZHhdPy5baV0/LlsxXT8uWzBdID09IG51bGwpIHRoaXMuZGF0YVtmaWVsZElkeF0hW2ldID0geyAxOiBbJyddIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wSWR4ICYmIE51bWJlcihjb21wSWR4KSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBOdW1iZXIoY29tcElkeCk7IGkrKykge1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFbZmllbGRJZHhdPy5bcmVwZWF0aW5nSW5kZXggYXMgbnVtYmVyXT8uW2ldPy5bMF0gPT0gbnVsbClcbiAgICAgICAgICAgIHRoaXMuZGF0YVtmaWVsZElkeF0hW3JlcGVhdGluZ0luZGV4IGFzIG51bWJlcl0hW2ldID0gWycnXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHN1YkNvbXBvbmVudEluZGV4KSkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IE51bWJlcihzdWJDb21wb25lbnRJbmRleCk7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVtmaWVsZElkeF0/LltyZXBlYXRpbmdJbmRleCBhcyBudW1iZXJdPy5bY29tcElkeF0/LltpXSA9PSBudWxsKVxuICAgICAgICAgICAgICB0aGlzLmRhdGFbZmllbGRJZHhdIVtyZXBlYXRpbmdJbmRleCBhcyBudW1iZXJdIVtjb21wSWR4XSFbaV0gPSAnJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmRhdGFbZmllbGRJZHhdIVtyZXBlYXRpbmdJbmRleCBhcyBudW1iZXJdIVtjb21wSWR4XSFbc3ViQ29tcG9uZW50SW5kZXggYXMgbnVtYmVyXSA9XG4gICAgICAgICAgICB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChzdWJDb21wb25lbnRJbmRleCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuZGF0YVtmaWVsZElkeF0hW3JlcGVhdGluZ0luZGV4IGFzIG51bWJlcl0hW2NvbXBJZHhdID0gW3ZhbHVlXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhW2ZpZWxkSWR4XSFbcmVwZWF0aW5nSW5kZXggYXMgbnVtYmVyXSA9IHsgMTogW3ZhbHVlXSB9O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVwZWF0aW5nSW5kZXggPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5kYXRhW2ZpZWxkSWR4XSA9IFt7IDE6IFsnJ10gfV07XG5cbiAgICAgIGlmIChjb21wSWR4ICYmIE51bWJlcihjb21wSWR4KSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBOdW1iZXIoY29tcElkeCk7IGkrKykge1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFbZmllbGRJZHhdPy5bMF0/LltpXT8uWzBdID09IG51bGwpIHRoaXMuZGF0YVtmaWVsZElkeF0hWzBdIVtpXSA9IFsnJ107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihzdWJDb21wb25lbnRJbmRleCkpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBOdW1iZXIoc3ViQ29tcG9uZW50SW5kZXgpOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbZmllbGRJZHhdPy5bMF0/Lltjb21wSWR4XT8uW2ldID09IG51bGwpXG4gICAgICAgICAgICAgIHRoaXMuZGF0YVtmaWVsZElkeF0hWzBdIVtjb21wSWR4XSFbaV0gPSAnJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmRhdGFbZmllbGRJZHhdIVswXSFbY29tcElkeF0hW3N1YkNvbXBvbmVudEluZGV4IGFzIG51bWJlcl0gPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChzdWJDb21wb25lbnRJbmRleCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuZGF0YVtmaWVsZElkeF0hWzBdIVtjb21wSWR4XSA9IFt2YWx1ZV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YVtmaWVsZElkeF0gPSBbeyAxOiBbdmFsdWVdIH1dO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICN0cmF2ZXJzZShcbiAgICBkYXRhOiBhbnksXG4gICAgcGF0aDogcmVhZG9ubHkgW3N0cmluZyB8IHVuZGVmaW5lZCwgbnVtYmVyIHwgdHJ1ZSwgc3RyaW5nIHwgdW5kZWZpbmVkLCBudW1iZXIgfCB0cnVlXSxcbiAgICBkZXB0aCA9IDAsXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgaW5kZXggPSBwYXRoW2RlcHRoXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBpZiAoaW5kZXggPT09IHRydWUgfHwgaW5kZXggPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBkZWxpbSA9IHRoaXMuI3BhcnNlTWFwW2RlcHRoKytdO1xuICAgICAgICByZXR1cm4gZGF0YS5tYXAoKGl0ZW0pID0+IHRoaXMuI3RyYXZlcnNlKGl0ZW0sIHBhdGgsIGRlcHRoKSkuam9pbihkZWxpbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy4jdHJhdmVyc2UoZGF0YVtOdW1iZXIoaW5kZXgpXSwgcGF0aCwgKytkZXB0aCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChpbmRleCA9PT0gdHJ1ZSB8fCBpbmRleCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGRlbGltID0gdGhpcy4jcGFyc2VNYXBbZGVwdGgrK107XG5cbiAgICAgICAgY29uc3QgdmFsID0gT2JqZWN0LmtleXMoZGF0YSkubWFwKChrZXkpID0+IHRoaXMuI3RyYXZlcnNlKGRhdGFba2V5XSwgcGF0aCwgZGVwdGgpKTtcblxuICAgICAgICByZXR1cm4gdmFsLmpvaW4oZGVsaW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3RyYXZlcnNlKGRhdGFbTnVtYmVyKGluZGV4KV0sIHBhdGgsICsrZGVwdGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IFNlZ21lbnQgfSBmcm9tICcuL3NlZ21lbnQnO1xuaW1wb3J0IHR5cGUgeyBTZWdtZW50VHlwZSB9IGZyb20gJy4vdHlwZXMnO1xuXG5jbGFzcyBOb2RlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGRhdGE6IFNlZ21lbnQsXG4gICAgcHVibGljIG5leHQ6IE5vZGUgfCBudWxsID0gbnVsbCxcbiAgICBwdWJsaWMgcHJldjogTm9kZSB8IG51bGwgPSBudWxsLFxuICApIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBETEwge1xuICAjaGVhZDogTm9kZSB8IG51bGwgPSBudWxsO1xuICAjdGFpbDogTm9kZSB8IG51bGwgPSBudWxsO1xuICAjc2VnbWVudE5vZGVNYXAgPSBuZXcgV2Vha01hcDxTZWdtZW50LCBOb2RlPigpO1xuXG4gIGdldFNlZ21lbnQodHlwZTogU2VnbWVudFR5cGUpIHtcbiAgICBsZXQgY3VyciA9IHRoaXMuI2hlYWQ7XG5cbiAgICB3aGlsZSAoY3Vycikge1xuICAgICAgaWYgKGN1cnIuZGF0YS50eXBlID09PSB0eXBlKSByZXR1cm4gY3Vyci5kYXRhO1xuXG4gICAgICBjdXJyID0gY3Vyci5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyIHx8IG51bGw7XG4gIH1cblxuICBnZXRTZWdtZW50cyh0eXBlPzogU2VnbWVudFR5cGUpIHtcbiAgICBjb25zdCBzZWdtZW50cyA9IFtdO1xuICAgIGxldCBjdXJyID0gdGhpcy4jaGVhZDtcblxuICAgIHdoaWxlIChjdXJyKSB7XG4gICAgICBpZiAodHlwZSkge1xuICAgICAgICBpZiAodHlwZSA9PT0gY3Vyci5kYXRhLnR5cGUpIHNlZ21lbnRzLnB1c2goY3Vyci5kYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goY3Vyci5kYXRhKTtcbiAgICAgIH1cblxuICAgICAgY3VyciA9IGN1cnIubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VnbWVudHM7XG4gIH1cblxuICBnZXRTZWdtZW50c0FmdGVyKFxuICAgIHR5cGU6IFNlZ21lbnRUeXBlLFxuICAgIHN0YXJ0U2VnbWVudDogU2VnbWVudCxcbiAgICBzdG9wU2VnbWVudFR5cGU6IFNlZ21lbnRUeXBlW10gPSBbXSxcbiAgICBjb25zZWN1dGl2ZSA9IGZhbHNlLFxuICApIHtcbiAgICBjb25zdCBzdGFydE5vZGUgPSB0aGlzLmdldE5vZGVGcm9tU2VnbWVudChzdGFydFNlZ21lbnQpO1xuXG4gICAgaWYgKCFzdGFydE5vZGUpIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvY2F0ZTogJ3N0YXJ0U2VnbWVudCcgWyR7c3RhcnRTZWdtZW50LnR5cGV9XWApO1xuXG4gICAgY29uc3QgcmVzID0gW107XG4gICAgbGV0IGN1cnIgPSBzdGFydE5vZGUubmV4dDtcblxuICAgIHdoaWxlIChjdXJyKSB7XG4gICAgICBpZiAoc3RvcFNlZ21lbnRUeXBlLmxlbmd0aCAmJiBzdG9wU2VnbWVudFR5cGUuaW5jbHVkZXMoY3Vyci5kYXRhLnR5cGUpKSBicmVhaztcblxuICAgICAgaWYgKGN1cnIuZGF0YS50eXBlID09PSB0eXBlKSByZXMucHVzaChjdXJyLmRhdGEpO1xuICAgICAgZWxzZSBpZiAoY29uc2VjdXRpdmUgJiYgcmVzLmxlbmd0aCkgYnJlYWs7XG5cbiAgICAgIGN1cnIgPSBjdXJyLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGFwcGVuZE5ld1NlZ21lbnQobmV3U2VnbWVudDogU2VnbWVudCwgdGFyZ2V0U2VnbWVudD86IFNlZ21lbnQpIHtcbiAgICBjb25zdCBuZXdOb2RlID0gbmV3IE5vZGUobmV3U2VnbWVudCk7XG4gICAgdGhpcy4jc2VnbWVudE5vZGVNYXAuc2V0KG5ld1NlZ21lbnQsIG5ld05vZGUpO1xuXG4gICAgdGhpcy5tb3ZlTm9kZUFmdGVyKG5ld05vZGUsIHRoaXMuZ2V0Tm9kZUZyb21TZWdtZW50KHRhcmdldFNlZ21lbnQpIHx8IHRoaXMuI3RhaWwpO1xuXG4gICAgcmV0dXJuIG5ld1NlZ21lbnQ7XG4gIH1cblxuICBtb3ZlTm9kZUFmdGVyKG5vZGU6IE5vZGUsIHRhcmdldE5vZGU6IE5vZGUgfCBudWxsKSB7XG4gICAgaWYgKCFub2RlKSB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2NhdGUgbm9kZScpO1xuXG4gICAgaWYgKCF0aGlzLiNoZWFkKSB7XG4gICAgICB0aGlzLiNoZWFkID0gdGhpcy4jdGFpbCA9IG5vZGU7XG4gICAgICBub2RlLnByZXYgPSBudWxsO1xuICAgICAgbm9kZS5uZXh0ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldE5vZGUpIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvY2F0ZSBub2RlIHRhcmdldE5vZGUnKTtcbiAgICBpZiAobm9kZSA9PT0gdGFyZ2V0Tm9kZSB8fCB0YXJnZXROb2RlLm5leHQgPT09IG5vZGUpIHJldHVybjtcblxuICAgIHRoaXMuI2RldGFjaE5vZGUobm9kZSk7XG5cbiAgICBub2RlLnByZXYgPSB0YXJnZXROb2RlO1xuICAgIG5vZGUubmV4dCA9IHRhcmdldE5vZGUubmV4dDtcblxuICAgIGlmICh0YXJnZXROb2RlLm5leHQpIHRhcmdldE5vZGUubmV4dC5wcmV2ID0gbm9kZTtcbiAgICBlbHNlIHRoaXMuI3RhaWwgPSBub2RlO1xuXG4gICAgdGFyZ2V0Tm9kZS5uZXh0ID0gbm9kZTtcbiAgfVxuXG4gIHByZXBlbmROZXdTZWdtZW50KG5ld1NlZ21lbnQ6IFNlZ21lbnQsIHRhcmdldFNlZ21lbnQ6IFNlZ21lbnQpIHtcbiAgICBjb25zdCBuZXdOb2RlID0gbmV3IE5vZGUobmV3U2VnbWVudCk7XG4gICAgdGhpcy4jc2VnbWVudE5vZGVNYXAuc2V0KG5ld1NlZ21lbnQsIG5ld05vZGUpO1xuXG4gICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRoaXMuZ2V0Tm9kZUZyb21TZWdtZW50KHRhcmdldFNlZ21lbnQpO1xuXG4gICAgaWYgKCF0YXJnZXROb2RlKSB0aHJvdyBuZXcgRXJyb3IoKTsgLy8gVG9kb1xuXG4gICAgdGhpcy5tb3ZlTm9kZUJlZm9yZShuZXdOb2RlLCB0YXJnZXROb2RlKTtcblxuICAgIHJldHVybiBuZXdTZWdtZW50O1xuICB9XG5cbiAgbW92ZU5vZGVCZWZvcmUobm9kZTogTm9kZSwgdGFyZ2V0Tm9kZTogTm9kZSkge1xuICAgIGlmICghbm9kZSkgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9jYXRlIG5vZGUnKTtcblxuICAgIGlmICghdGhpcy4jaGVhZCkge1xuICAgICAgdGhpcy4jaGVhZCA9IHRoaXMuI3RhaWwgPSBub2RlO1xuICAgICAgbm9kZS5wcmV2ID0gbnVsbDtcbiAgICAgIG5vZGUubmV4dCA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXROb2RlKSB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2NhdGUgdGFyZ2V0Tm9kZScpO1xuICAgIGlmIChub2RlID09PSB0YXJnZXROb2RlIHx8IHRhcmdldE5vZGUucHJldiA9PT0gbm9kZSkgcmV0dXJuO1xuXG4gICAgdGhpcy4jZGV0YWNoTm9kZShub2RlKTtcblxuICAgIG5vZGUubmV4dCA9IHRhcmdldE5vZGU7XG4gICAgbm9kZS5wcmV2ID0gdGFyZ2V0Tm9kZS5wcmV2O1xuXG4gICAgaWYgKHRhcmdldE5vZGUucHJldikgdGFyZ2V0Tm9kZS5wcmV2Lm5leHQgPSBub2RlO1xuICAgIGVsc2UgdGhpcy4jaGVhZCA9IG5vZGU7XG5cbiAgICB0YXJnZXROb2RlLnByZXYgPSBub2RlO1xuICB9XG5cbiAgZGVsZXRlU2VnbWVudChzZWdtZW50OiBTZWdtZW50KSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUZyb21TZWdtZW50KHNlZ21lbnQpO1xuICAgIGlmICghbm9kZSkgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9jYXRlOiAnc2VnbWVudCcgWyR7c2VnbWVudC50eXBlfV1gKTtcblxuICAgIHRoaXMuI2RldGFjaE5vZGUobm9kZSk7XG4gICAgdGhpcy4jc2VnbWVudE5vZGVNYXAuZGVsZXRlKHNlZ21lbnQpO1xuICB9XG5cbiAgI2RldGFjaE5vZGUobm9kZTogTm9kZSkge1xuICAgIGlmIChub2RlLnByZXYpIG5vZGUucHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuICAgIGlmICh0aGlzLiNoZWFkID09PSBub2RlKSB0aGlzLiNoZWFkID0gbm9kZS5uZXh0O1xuXG4gICAgaWYgKG5vZGUubmV4dCkgbm9kZS5uZXh0LnByZXYgPSBub2RlLnByZXY7XG4gICAgaWYgKHRoaXMuI3RhaWwgPT09IG5vZGUpIHRoaXMuI3RhaWwgPSBub2RlLnByZXY7XG5cbiAgICBub2RlLnByZXYgPSBudWxsO1xuICAgIG5vZGUubmV4dCA9IG51bGw7XG4gIH1cblxuICBnZXROb2RlRnJvbVNlZ21lbnQoc2VnbWVudD86IFNlZ21lbnQpIHtcbiAgICBpZiAoc2VnbWVudCAmJiAhKHNlZ21lbnQgaW5zdGFuY2VvZiBTZWdtZW50KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdzZWdtZW50Jy4gc2VnbWVudCBub3QgYW4gaW5zdGFuY2Ugb2YgU2VnbWVudGApO1xuXG4gICAgcmV0dXJuIChzZWdtZW50ICYmIHRoaXMuI3NlZ21lbnROb2RlTWFwLmdldChzZWdtZW50KSkgfHwgbnVsbDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgRExMIH0gZnJvbSAnLi9kbGwnO1xuaW1wb3J0IHsgU2VnbWVudCB9IGZyb20gJy4vc2VnbWVudCc7XG5pbXBvcnQgdHlwZSB7IFByZXR0aWZ5LCBTZWdtZW50VHlwZSwgVFBhcnNlT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgSEw3IHtcbiAgcmF3OiBzdHJpbmc7XG4gIHBhcnNlT3B0aW9uczogVFBhcnNlT3B0aW9ucztcbiAgI2RsbDogRExMO1xuXG4gIGNvbnN0cnVjdG9yKGhsN01zZzogc3RyaW5nLCBwYXJzZU9wdGlvbnM/OiBQcmV0dGlmeTxQYXJ0aWFsPFRQYXJzZU9wdGlvbnM+Pikge1xuICAgIHRoaXMucmF3ID0gaGw3TXNnO1xuICAgIHRoaXMucGFyc2VPcHRpb25zID0ge1xuICAgICAgZmllbGREZWxpbTogcGFyc2VPcHRpb25zPy5maWVsZERlbGltID8/ICd8JyxcbiAgICAgIHJlcGVhdGluZ0RlbGltOiBwYXJzZU9wdGlvbnM/LnJlcGVhdGluZ0RlbGltID8/ICd+JyxcbiAgICAgIGNvbXBvbmVudERlbGltOiBwYXJzZU9wdGlvbnM/LmNvbXBvbmVudERlbGltID8/ICdeJyxcbiAgICAgIHN1YkNvbXBEZWxpbTogcGFyc2VPcHRpb25zPy5zdWJDb21wRGVsaW0gPz8gJyYnLFxuICAgICAgZW9sRGVsaW06IHBhcnNlT3B0aW9ucz8uZW9sRGVsaW0gPz8gJ1xccj9cXG58XFxyJyxcbiAgICAgIGJ1aWxkRW9sQ2hhcjogcGFyc2VPcHRpb25zPy5idWlsZEVvbENoYXIgPz8gJ1xcclxcbicsXG4gICAgfTtcbiAgICB0aGlzLiNkbGwgPSBuZXcgRExMKCk7XG4gICAgdGhpcy50cmFuc2Zvcm0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBpcyB0cmlnZ2VyZWQgaW50ZXJuYWxseSBhbmQgZG9lc250IG5lZWQgdG8gYmUgaW52b2tlZCBtYW51YWxseS5cbiAgICovXG4gIHRyYW5zZm9ybSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMucmF3ICE9PSAnc3RyaW5nJyB8fCAhdGhpcy5yYXcuc3RhcnRzV2l0aCgnTVNIJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByYXcgSEw3IG1lc3NhZ2UuIEV4cGVjdGVkIG1zZyB0byBiZSBhIHN0cmluZyBzdGFydGluZyB3aXRoIE1TSCcpO1xuICAgIH1cblxuICAgIGlmICghWydcXHI/XFxuXFx8XFxyJywgJ1xcclxcbicsICdcXG4nLCAnXFxyJ10uaW5jbHVkZXModGhpcy5wYXJzZU9wdGlvbnMuZW9sRGVsaW0pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgRU9MIGNoYXJhY3Rlci4gRXhwZWN0ZWQgXFxcXHI/XFxcXG5cXHxcXFxcciwgXFxcXHJcXFxcbiwgXFxcXG4sIFxcXFxyJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VnbWVudHNTdHJBcnIgPSB0aGlzLnJhd1xuICAgICAgLnNwbGl0KFJlZ0V4cCh0aGlzLnBhcnNlT3B0aW9ucy5lb2xEZWxpbSkpXG4gICAgICAuZmlsdGVyKChzZWdtZW50U3RyKSA9PiB0aGlzLnZhbGlkYXRlU2VnbWVudChzZWdtZW50U3RyKSk7XG5cbiAgICBjb25zdCB7IGZpZWxkRGVsaW0sIHJlcGVhdGluZ0RlbGltLCBjb21wb25lbnREZWxpbSwgc3ViQ29tcERlbGltIH0gPSB0aGlzLnBhcnNlT3B0aW9ucztcblxuICAgIGZvciAoY29uc3Qgc2VnbWVudFN0ciBvZiBzZWdtZW50c1N0ckFycikge1xuICAgICAgY29uc3QgZmllbGRzID0gc2VnbWVudFN0ci5zcGxpdChmaWVsZERlbGltKTtcbiAgICAgIGNvbnN0IHR5cGUgPSBzZWdtZW50U3RyLnN1YnN0cmluZygwLCAzKSBhcyBTZWdtZW50VHlwZTtcbiAgICAgIGNvbnN0IHNlZ21lbnQgPSBuZXcgU2VnbWVudCh0eXBlLCB0aGlzLnBhcnNlT3B0aW9ucyk7XG4gICAgICBsZXQgZmllbGRJZHggPSB0eXBlID09PSAnTVNIJyA/IDEgOiAwO1xuICAgICAgc2VnbWVudC5kYXRhID0ge307XG5cbiAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICAgIHNlZ21lbnQuZGF0YVtmaWVsZElkeF0gPSBzZWdtZW50LmRhdGFbZmllbGRJZHhdIHx8IFtdO1xuICAgICAgICBsZXQgcmVwZWF0RmllbGRJZHggPSAwO1xuXG4gICAgICAgIGZvciAoY29uc3QgcmVwZWF0RmllbGQgb2YgZmllbGQuc3BsaXQocmVwZWF0aW5nRGVsaW0pKSB7XG4gICAgICAgICAgbGV0IGNvbXBJZHggPSAxO1xuICAgICAgICAgIHNlZ21lbnQuZGF0YVtmaWVsZElkeF0hW3JlcGVhdEZpZWxkSWR4XSA9IHNlZ21lbnQuZGF0YVtmaWVsZElkeF0hW3JlcGVhdEZpZWxkSWR4XSB8fCB7fTtcblxuICAgICAgICAgIGZvciAoY29uc3QgY29tcCBvZiByZXBlYXRGaWVsZC5zcGxpdChjb21wb25lbnREZWxpbSkpIHtcbiAgICAgICAgICAgIHNlZ21lbnQuZGF0YVtmaWVsZElkeF0hW3JlcGVhdEZpZWxkSWR4XSFbY29tcElkeCsrXSA9IGNvbXAuc3BsaXQoc3ViQ29tcERlbGltKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXBlYXRGaWVsZElkeCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgZmllbGRJZHgrKztcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgPT09ICdNU0gnICYmIHNlZ21lbnQuZGF0YVsyXT8uWzBdICYmIGZpZWxkc1sxXSkge1xuICAgICAgICBzZWdtZW50LmRhdGFbMl0gPSBbeyAxOiBbZmllbGRzWzFdXSB9XTtcbiAgICAgIH1cblxuICAgICAgdGhpcy4jZGxsLmFwcGVuZE5ld1NlZ21lbnQoc2VnbWVudCk7XG4gICAgfVxuICB9XG5cbiAgYnVpbGQoKSB7XG4gICAgY29uc3QgeyBmaWVsZERlbGltLCByZXBlYXRpbmdEZWxpbSwgY29tcG9uZW50RGVsaW0sIHN1YkNvbXBEZWxpbSwgYnVpbGRFb2xDaGFyIH0gPVxuICAgICAgdGhpcy5wYXJzZU9wdGlvbnM7XG4gICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLmdldFNlZ21lbnRzKCk7XG4gICAgY29uc3Qgc2VnbWVudHNTdHIgPSBbXTtcblxuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cykge1xuICAgICAgY29uc3QgZmllbGRzU3RyQXJyID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgZmllbGRLZXkgaW4gc2VnbWVudC5kYXRhKSB7XG4gICAgICAgIGNvbnN0IHJlcGVhdHNTdHJBcnIgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHJlcGVhdGluZ0ZpZWxkIG9mIHNlZ21lbnQuZGF0YVtmaWVsZEtleV0hKSB7XG4gICAgICAgICAgY29uc3QgY29tcHNTdHJBcnIgPSBbXTtcblxuICAgICAgICAgIGZvciAoY29uc3QgY29tcEtleSBpbiByZXBlYXRpbmdGaWVsZCkge1xuICAgICAgICAgICAgY29tcHNTdHJBcnIucHVzaChyZXBlYXRpbmdGaWVsZFtjb21wS2V5XT8uam9pbihzdWJDb21wRGVsaW0pKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXBlYXRzU3RyQXJyLnB1c2goY29tcHNTdHJBcnIuam9pbihjb21wb25lbnREZWxpbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZmllbGRzU3RyQXJyLnB1c2gocmVwZWF0c1N0ckFyci5qb2luKHJlcGVhdGluZ0RlbGltKSk7XG4gICAgICB9XG5cbiAgICAgIHNlZ21lbnRzU3RyLnB1c2goZmllbGRzU3RyQXJyLmpvaW4oZmllbGREZWxpbSkpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWdtZW50c1N0ci5qb2luKGJ1aWxkRW9sQ2hhcik7XG4gIH1cblxuICBnZXRTZWdtZW50KHR5cGU6IFNlZ21lbnRUeXBlKTogU2VnbWVudCB8IG51bGwge1xuICAgIGlmICghL15bQS1aXFxkXXszfSQvLnRlc3QodHlwZSkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd0eXBlJyBbJHt0eXBlfV1gKTtcblxuICAgIHJldHVybiB0aGlzLiNkbGwuZ2V0U2VnbWVudCh0eXBlKTtcbiAgfVxuXG4gIGdldFNlZ21lbnRzKHR5cGU/OiBTZWdtZW50VHlwZSk6IFNlZ21lbnRbXSB7XG4gICAgaWYgKHR5cGUgJiYgIS9eW0EtWlxcZF17M30kLy50ZXN0KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAndHlwZScgWyR7dHlwZX1dYCk7XG5cbiAgICByZXR1cm4gdGhpcy4jZGxsLmdldFNlZ21lbnRzKHR5cGUpO1xuICB9XG5cbiAgZ2V0U2VnbWVudHNBZnRlcihcbiAgICB0eXBlOiBTZWdtZW50VHlwZSxcbiAgICBzdGFydFNlZ21lbnQ6IFNlZ21lbnQsXG4gICAgc3RvcFNlZ21lbnRUeXBlOiBTZWdtZW50VHlwZVtdID0gW10sXG4gICAgY29uc2VjdXRpdmUgPSBmYWxzZSxcbiAgKTogU2VnbWVudFtdIHtcbiAgICBpZiAoIS9eW0EtWlxcZF17M30kLy50ZXN0KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAndHlwZScgWyR7dHlwZX1dYCk7XG4gICAgaWYgKCFzdGFydFNlZ21lbnQgfHwgIShzdGFydFNlZ21lbnQgaW5zdGFuY2VvZiBTZWdtZW50KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdzdGFydFNlZ21lbnQnYCk7XG4gICAgaWYgKCFzdG9wU2VnbWVudFR5cGUgfHwgIUFycmF5LmlzQXJyYXkoc3RvcFNlZ21lbnRUeXBlKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdzdG9wU2VnbWVudFR5cGUnYCk7XG4gICAgaWYgKHR5cGVvZiBjb25zZWN1dGl2ZSAhPT0gJ2Jvb2xlYW4nKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ2NvbnNlY3V0aXZlJyBbJHtjb25zZWN1dGl2ZX1dYCk7XG4gICAgaWYgKCF0aGlzLiNkbGwuZ2V0Tm9kZUZyb21TZWdtZW50KHN0YXJ0U2VnbWVudCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2NhdGU6ICdzdGFydFNlZ21lbnQnIFske3N0YXJ0U2VnbWVudC50eXBlfV1gKTtcblxuICAgIHJldHVybiB0aGlzLiNkbGwuZ2V0U2VnbWVudHNBZnRlcih0eXBlLCBzdGFydFNlZ21lbnQsIHN0b3BTZWdtZW50VHlwZSwgY29uc2VjdXRpdmUpO1xuICB9XG5cbiAgY3JlYXRlU2VnbWVudCh0eXBlOiBTZWdtZW50VHlwZSk6IFNlZ21lbnQge1xuICAgIGlmICghL15bQS1aXFxkXXszfSQvLnRlc3QodHlwZSkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd0eXBlJyBbJHt0eXBlfV1gKTtcblxuICAgIHJldHVybiB0aGlzLiNkbGwuYXBwZW5kTmV3U2VnbWVudChuZXcgU2VnbWVudCh0eXBlLCB0aGlzLnBhcnNlT3B0aW9ucykpO1xuICB9XG5cbiAgY3JlYXRlU2VnbWVudEFmdGVyKHR5cGU6IFNlZ21lbnRUeXBlLCB0YXJnZXRTZWdtZW50OiBTZWdtZW50KTogU2VnbWVudCB7XG4gICAgaWYgKCEvXltBLVpcXGRdezN9JC8udGVzdCh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3R5cGUnIFske3R5cGV9XWApO1xuICAgIGlmICghdGFyZ2V0U2VnbWVudCB8fCAhKHRhcmdldFNlZ21lbnQgaW5zdGFuY2VvZiBTZWdtZW50KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd0YXJnZXRTZWdtZW50J2ApO1xuICAgIGlmICh0aGlzLiNkbGwuZ2V0Tm9kZUZyb21TZWdtZW50KHRhcmdldFNlZ21lbnQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9jYXRlOiAndGFyZ2V0U2VnbWVudCcgWyR7dGFyZ2V0U2VnbWVudC50eXBlfV1gKTtcblxuICAgIHJldHVybiB0aGlzLiNkbGwuYXBwZW5kTmV3U2VnbWVudChuZXcgU2VnbWVudCh0eXBlLCB0aGlzLnBhcnNlT3B0aW9ucyksIHRhcmdldFNlZ21lbnQpO1xuICB9XG5cbiAgY3JlYXRlU2VnbWVudEJlZm9yZSh0eXBlOiBTZWdtZW50VHlwZSwgdGFyZ2V0U2VnbWVudDogU2VnbWVudCk6IFNlZ21lbnQge1xuICAgIGlmICghL15bQS1aXFxkXXszfSQvLnRlc3QodHlwZSkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd0eXBlJyBbJHt0eXBlfV1gKTtcbiAgICBpZiAoIXRhcmdldFNlZ21lbnQgfHwgISh0YXJnZXRTZWdtZW50IGluc3RhbmNlb2YgU2VnbWVudCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAndGFyZ2V0U2VnbWVudCdgKTtcbiAgICBpZiAodGhpcy4jZGxsLmdldE5vZGVGcm9tU2VnbWVudCh0YXJnZXRTZWdtZW50KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvY2F0ZTogJ3N0YXJ0U2VnbWVudCcgWyR7dGFyZ2V0U2VnbWVudC50eXBlfV1gKTtcblxuICAgIHJldHVybiB0aGlzLiNkbGwucHJlcGVuZE5ld1NlZ21lbnQobmV3IFNlZ21lbnQodHlwZSwgdGhpcy5wYXJzZU9wdGlvbnMpLCB0YXJnZXRTZWdtZW50KTtcbiAgfVxuXG4gIGRlbGV0ZVNlZ21lbnQoc2VnbWVudDogU2VnbWVudCkge1xuICAgIHRoaXMuZGVsZXRlU2VnbWVudHMoW3NlZ21lbnRdKTtcbiAgfVxuXG4gIGRlbGV0ZVNlZ21lbnRzKHNlZ21lbnRzOiBTZWdtZW50W10pIHtcbiAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygc2VnbWVudHMpIHtcbiAgICAgIGlmICghc2VnbWVudCB8fCAhKHNlZ21lbnQgaW5zdGFuY2VvZiBTZWdtZW50KSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3NlZ21lbnRzJ2ApO1xuICAgICAgaWYgKHRoaXMuI2RsbC5nZXROb2RlRnJvbVNlZ21lbnQoc2VnbWVudCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvY2F0ZTogJ3NlZ21lbnQnIFske3NlZ21lbnQudHlwZX1dYCk7XG5cbiAgICAgIHRoaXMuI2RsbC5kZWxldGVTZWdtZW50KHNlZ21lbnQpO1xuICAgIH1cbiAgfVxuXG4gIG1vdmVTZWdtZW50QWZ0ZXIoc2VnbWVudDogU2VnbWVudCwgdGFyZ2V0U2VnbWVudDogU2VnbWVudCkge1xuICAgIGlmICghc2VnbWVudCB8fCAhKHNlZ21lbnQgaW5zdGFuY2VvZiBTZWdtZW50KSkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3NlZ21lbnQnYCk7XG4gICAgaWYgKCF0YXJnZXRTZWdtZW50IHx8ICEodGFyZ2V0U2VnbWVudCBpbnN0YW5jZW9mIFNlZ21lbnQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3RhcmdldFNlZ21lbnQnYCk7XG5cbiAgICBjb25zdCBub2RlID0gdGhpcy4jZGxsLmdldE5vZGVGcm9tU2VnbWVudChzZWdtZW50KTtcbiAgICBjb25zdCB0YXJnZXROb2RlID0gdGhpcy4jZGxsLmdldE5vZGVGcm9tU2VnbWVudCh0YXJnZXRTZWdtZW50KTtcblxuICAgIGlmICghbm9kZSkgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9jYXRlOiAnc2VnbWVudCcgWyR7c2VnbWVudC50eXBlfV1gKTtcbiAgICBpZiAoIXRhcmdldE5vZGUpIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvY2F0ZTogJ3RhcmdldFNlZ21lbnQnIFske3RhcmdldFNlZ21lbnQudHlwZX1dYCk7XG5cbiAgICB0aGlzLiNkbGwubW92ZU5vZGVBZnRlcihub2RlLCB0YXJnZXROb2RlKTtcbiAgfVxuXG4gIG1vdmVTZWdtZW50QmVmb3JlKHNlZ21lbnQ6IFNlZ21lbnQsIHRhcmdldFNlZ21lbnQ6IFNlZ21lbnQpIHtcbiAgICBpZiAoIXNlZ21lbnQgfHwgIShzZWdtZW50IGluc3RhbmNlb2YgU2VnbWVudCkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdzZWdtZW50J2ApO1xuICAgIGlmICghdGFyZ2V0U2VnbWVudCB8fCAhKHRhcmdldFNlZ21lbnQgaW5zdGFuY2VvZiBTZWdtZW50KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd0YXJnZXRTZWdtZW50J2ApO1xuXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuI2RsbC5nZXROb2RlRnJvbVNlZ21lbnQoc2VnbWVudCk7XG4gICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRoaXMuI2RsbC5nZXROb2RlRnJvbVNlZ21lbnQodGFyZ2V0U2VnbWVudCk7XG5cbiAgICBpZiAoIW5vZGUpIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvY2F0ZTogJ3NlZ21lbnQnIFske3NlZ21lbnQudHlwZX1dYCk7XG4gICAgaWYgKCF0YXJnZXROb2RlKSB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2NhdGU6ICd0YXJnZXRTZWdtZW50JyBbJHt0YXJnZXRTZWdtZW50LnR5cGV9XWApO1xuXG4gICAgdGhpcy4jZGxsLm1vdmVOb2RlQmVmb3JlKG5vZGUsIHRhcmdldE5vZGUpO1xuICB9XG5cbiAgcmVpbmRleFNlZ21lbnRzKFxuICAgIHJlaW5kZXhDb25maWc6IFBhcnRpYWw8UmVjb3JkPFNlZ21lbnRUeXBlLCBTZWdtZW50VHlwZVtdPj4sXG4gICAgc3RhcnRJbmRleCA9IDEsXG4gICAgZmllbGQgPSAnMS4xJyxcbiAgKSB7XG4gICAgaWYgKFxuICAgICAgIXJlaW5kZXhDb25maWcgfHxcbiAgICAgIHR5cGVvZiByZWluZGV4Q29uZmlnICE9PSAnb2JqZWN0JyB8fFxuICAgICAgT2JqZWN0LnZhbHVlcyhyZWluZGV4Q29uZmlnKS5zb21lKCh2YWwpID0+ICFBcnJheS5pc0FycmF5KHZhbCkpXG4gICAgKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3JlaW5kZXhDb25maWcnYCk7XG4gICAgaWYgKCFzdGFydEluZGV4IHx8IHR5cGVvZiBzdGFydEluZGV4ICE9PSAnbnVtYmVyJylcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdzdGFydEluZGV4JyBbJHtzdGFydEluZGV4fV1gKTtcbiAgICBpZiAoZmllbGQgJiYgIS9eKFxcZCspKFxcLlxcZCspezAsMX0kLy50ZXN0KGZpZWxkKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdmaWVsZCcgWyR7ZmllbGR9XWApO1xuXG4gICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLmdldFNlZ21lbnRzKCk7XG4gICAgY29uc3QgaW5kZXhNYXA6IFBhcnRpYWw8UmVjb3JkPFNlZ21lbnRUeXBlLCBudW1iZXI+PiA9IHt9O1xuICAgIGNvbnN0IGluZGV4UmVzZXRUcmlnZ2VyTWFwOiBQYXJ0aWFsPFJlY29yZDxTZWdtZW50VHlwZSwgU2VnbWVudFR5cGVbXT4+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtzZWcsIHJlc2V0VHJpZ2dlclNlZ3NdIG9mIE9iamVjdC5lbnRyaWVzKHJlaW5kZXhDb25maWcpKSB7XG4gICAgICBpbmRleE1hcFtzZWddID0gc3RhcnRJbmRleDtcblxuICAgICAgaWYgKHJlc2V0VHJpZ2dlclNlZ3MpXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHJlc2V0VHJpZ2dlclNlZ3MpIChpbmRleFJlc2V0VHJpZ2dlck1hcFtrZXldID8/PSBbXSkucHVzaChzZWcpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cykge1xuICAgICAgaWYgKHJlaW5kZXhDb25maWdbc2VnbWVudC50eXBlXSkge1xuICAgICAgICBzZWdtZW50LnNldChgJHtzZWdtZW50LnR5cGV9LiR7ZmllbGR9YCwgU3RyaW5nKGluZGV4TWFwW3NlZ21lbnQudHlwZV0rKykpO1xuXG4gICAgICAgIGlmIChpbmRleFJlc2V0VHJpZ2dlck1hcFtzZWdtZW50LnR5cGVdKVxuICAgICAgICAgIGZvciAoY29uc3Qgc2VnIG9mIGluZGV4UmVzZXRUcmlnZ2VyTWFwW3NlZ21lbnQudHlwZV0hKSBpbmRleE1hcFtzZWddID0gc3RhcnRJbmRleDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlU2VnbWVudChzZWdtZW50OiBzdHJpbmcpIHtcbiAgICBpZiAoL15bQS1aXFxkXXszfVxcfC8udGVzdChzZWdtZW50KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFNlZ21lbnQ6IFske3NlZ21lbnQuc3Vic3RyaW5nKDAsIDQpfV1gKTtcbiAgfVxufVxuIl19
446
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9zZWdtZW50LnRzIiwiLi4vc3JjL3V0aWxzL2RsbC50cyIsIi4uL3NyYy91dGlscy9obDcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQSxTQUFBLEVBQUEsa0JBQUEsRUFBQSxXQUFBO0FBRU8sSUFBTSxVQUFOLE1BQWM7QUFBQSxFQUtuQixXQUFBLENBQ1csTUFDVCxZQUFBLEVBQ0E7QUFGUyxJQUFBLElBQUEsQ0FBQSxJQUFBLEdBQUEsSUFBQTtBQU5OLElBQUEsWUFBQSxDQUFBLElBQUEsRUFBQSxrQkFBQSxDQUFBO0FBQ0wsSUFBQSxJQUFBLENBQUEsSUFBQSxHQUFxQixFQUFDO0FBRXRCLElBQUEsWUFBQSxDQUFBLElBQUEsRUFBQSxTQUFBLENBQUE7QUFMRixJQUFBLElBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQTtBQVdJLElBQUEsSUFBSSxDQUFDLElBQUEsSUFBUSxDQUFDLGVBQUEsQ0FBZ0IsS0FBSyxJQUFJLENBQUE7QUFDckMsTUFBQSxNQUFNLElBQUksS0FBQSxDQUFNLENBQUEsMkJBQUEsRUFBOEIsSUFBSSxDQUFBLENBQUEsQ0FBRyxDQUFBO0FBRXZELElBQUEsSUFBQSxDQUFLLElBQUEsQ0FBSyxJQUFBLEtBQVMsS0FBQSxHQUFRLEdBQUEsR0FBTSxHQUFHLENBQUEsR0FBSSxDQUFDLEVBQUUsQ0FBQSxFQUFHLENBQUMsSUFBSSxDQUFBLEVBQUcsQ0FBQTtBQUN0RCxJQUFBLElBQUEsQ0FBSyxZQUFBLEdBQWU7QUFBQSxNQUNsQixVQUFBLEVBQUEsQ0FBWSxFQUFBLEdBQUEsWUFBQSxJQUFBLElBQUEsR0FBQSxNQUFBLEdBQUEsWUFBQSxDQUFjLFVBQUEsS0FBZCxJQUFBLEdBQUEsRUFBQSxHQUE0QixHQUFBO0FBQUEsTUFDeEMsY0FBQSxFQUFBLENBQWdCLEVBQUEsR0FBQSxZQUFBLElBQUEsSUFBQSxHQUFBLE1BQUEsR0FBQSxZQUFBLENBQWMs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QSxJQUNuRjtBQUVBLElBQUEsS0FBQSxNQUFXLFdBQVcsUUFBQSxFQUFVO0FBQzlCLE1BQUEsSUFBSSxhQUFBLENBQWMsT0FBQSxDQUFRLElBQUksQ0FBQSxFQUFHO0FBQy9CLFFBQUEsT0FBQSxDQUFRLEdBQUEsQ0FBSSxDQUFBLEVBQUcsT0FBQSxDQUFRLElBQUksQ0FBQSxDQUFBLEVBQUksS0FBSyxDQUFBLENBQUEsRUFBSSxNQUFBLENBQU8sUUFBQSxDQUFTLE9BQUEsQ0FBUSxJQUFJLENBQUEsRUFBRyxDQUFDLENBQUE7QUFFeEUsUUFBQSxJQUFJLG9CQUFBLENBQXFCLFFBQVEsSUFBSSxDQUFBO0FBQ25DLFVBQUEsS0FBQSxNQUFXLE9BQU8sb0JBQUEsQ0FBcUIsT0FBQSxDQUFRLElBQUksQ0FBQSxFQUFJLFFBQUEsQ0FBUyxHQUFHLENBQUEsR0FBSSxVQUFBO0FBQUEsTUFDM0U7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBRVEsZ0JBQWdCLE9BQUEsRUFBaUI7QUFDdkMsSUFBQSxJQUFJLElBQUksTUFBQSxDQUFPLENBQUEsY0FBQSxFQUFpQixJQUFBLENBQUssWUFBQSxDQUFhLFVBQVUsQ0FBQSxDQUFFLENBQUEsQ0FBRSxJQUFBLENBQUssT0FBTyxDQUFBLEVBQUcsT0FBTyxJQUFBO0FBQUEsU0FDakYsTUFBTSxJQUFJLEtBQUEsQ0FBTSxDQUFBLGlCQUFBLEVBQW9CLE9BQU8sQ0FBQSxDQUFFLENBQUE7QUFBQSxFQUNwRDtBQUNGO0FBcFBFLElBQUEsR0FBQSxJQUFBLE9BQUEsRUFBQSIsImZpbGUiOiJpbmRleC5janMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByZXR0aWZ5LCBTZWdtZW50VHlwZSwgVFBhcnNlT3B0aW9ucywgVFNlZ21lbnREYXRhIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBTZWdtZW50IHtcbiAgZGF0YTogVFNlZ21lbnREYXRhID0ge307XG4gIHByaXZhdGUgcGFyc2VPcHRpb25zOiBQcmV0dGlmeTxPbWl0PFRQYXJzZU9wdGlvbnMsICdlb2xEZWxpbScgfCAnYnVpbGRFb2xDaGFyJz4+O1xuICAjcGFyc2VNYXA6IFJlY29yZDxudW1iZXIsIHN0cmluZz47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgdHlwZTogU2VnbWVudFR5cGUsXG4gICAgcGFyc2VPcHRpb25zPzogUHJldHRpZnk8T21pdDxUUGFyc2VPcHRpb25zLCAnZW9sRGVsaW0nIHwgJ2J1aWxkRW9sQ2hhcic+PixcbiAgKSB7XG4gICAgaWYgKCF0eXBlIHx8ICEvXltBLVowLTldezN9JC8udGVzdCh0eXBlKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd0eXBlJyBbJHt0eXBlfV1gKTtcblxuICAgIHRoaXMuZGF0YVt0eXBlID09PSAnTVNIJyA/ICcxJyA6ICcwJ10gPSBbeyAxOiBbdHlwZV0gfV07XG4gICAgdGhpcy5wYXJzZU9wdGlvbnMgPSB7XG4gICAgICBmaWVsZERlbGltOiBwYXJzZU9wdGlvbnM/LmZpZWxkRGVsaW0gPz8gJ3wnLFxuICAgICAgcmVwZWF0aW5nRGVsaW06IHBhcnNlT3B0aW9ucz8ucmVwZWF0aW5nRGVsaW0gPz8gJ34nLFxuICAgICAgY29tcG9uZW50RGVsaW06IHBhcnNlT3B0aW9ucz8uY29tcG9uZW50RGVsaW0gPz8gJ14nLFxuICAgICAgc3ViQ29tcERlbGltOiBwYXJzZU9wdGlvbnM/LnN1YkNvbXBEZWxpbSA/PyAnJicsXG4gICAgfTtcbiAgICB0aGlzLiNwYXJzZU1hcCA9IHtcbiAgICAgIDA6IHRoaXMucGFyc2VPcHRpb25zLmZpZWxkRGVsaW0sXG4gICAgICAxOiB0aGlzLnBhcnNlT3B0aW9ucy5yZXBlYXRpbmdEZWxpbSxcbiAgICAgIDI6IHRoaXMucGFyc2VPcHRpb25zLmNvbXBvbmVudERlbGltLFxuICAgICAgMzogdGhpcy5wYXJzZU9wdGlvbnMuc3ViQ29tcERlbGltLFxuICAgIH07XG4gIH1cblxuICBnZXQoZmllbGQ6IHN0cmluZywgcmVwZWF0aW5nSW5kZXg6IG51bWJlciB8IHRydWUgPSAwLCBzdWJDb21wb25lbnRJbmRleDogbnVtYmVyIHwgdHJ1ZSA9IDApIHtcbiAgICBjb25zdCB2YWxpZGF0ZSA9ICh2YWw6IG51bWJlciB8IHRydWUpID0+XG4gICAgICAhKCh0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiB2YWwgPj0gMCkgfHwgdmFsID09PSB0cnVlKTtcblxuICAgIGlmICghZmllbGQgfHwgIS9eW0EtWjAtOV17M30oXFwuXFxkKyl7MCwyfSQvLnRlc3QoZmllbGQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ2ZpZWxkJyBbJHtmaWVsZH1dYCk7XG4gICAgaWYgKHZhbGlkYXRlKHJlcGVhdGluZ0luZGV4KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdyZXBlYXRpbmdJbmRleCcgWyR7cmVwZWF0aW5nSW5kZXh9XWApO1xuICAgIGlmICh2YWxpZGF0ZShzdWJDb21wb25lbnRJbmRleCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAnc3ViQ29tcG9uZW50SW5kZXgnIFske3N1YkNvbXBvbmVudEluZGV4fV1gKTtcblxuICAgIGNvbnN0IFt0eXBlLCBmaWVsZElkeCwgY29tcElkeF0gPSBmaWVsZC5zcGxpdCgnLicpO1xuICAgIGNvbnN0IHBhdGggPSBbZmllbGRJZHgsIHJlcGVhdGluZ0luZGV4LCBjb21wSWR4LCBzdWJDb21wb25lbnRJbmRleF0gYXMgY29uc3Q7XG5cbiAgICBpZiAoIXR5cGUgfHwgdHlwZSAhPT0gdGhpcy50eXBlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBwYXJhbWV0ZXI6ICdmaWVsZCcuIENhbm5vdCBnZXQgWyR7ZmllbGR9XSBmcm9tIFske3RoaXMudHlwZX1dIHNlZ21lbnQuYCxcbiAgICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy4jdHJhdmVyc2UodGhpcy5kYXRhLCBwYXRoKSB8fCBudWxsO1xuICB9XG5cbiAgc2V0KFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICByZXBlYXRpbmdJbmRleDogbnVtYmVyIHwgdHJ1ZSA9IDAsXG4gICAgc3ViQ29tcG9uZW50SW5kZXg6IG51bWJlciB8IHRydWUgPSAwLFxuICApIHtcbiAgICBjb25zdCB2YWxpZGF0ZSA9ICh2YWw6IG51bWJlciB8IHRydWUpID0+XG4gICAgICAhKCh0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiB2YWwgPj0gMCkgfHwgdmFsID09PSB0cnVlKTtcblxuICAgIGlmICghZmllbGQgfHwgIS9eW0EtWlxcZF17M30oXFwuXFxkKyl7MSwyfSQvLnRlc3QoZmllbGQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ2ZpZWxkJyBbJHtmaWVsZH1dYCk7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJylcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd2YWx1ZScgWyR7dmFsdWV9XWApO1xuICAgIGlmICh2YWxpZGF0ZShyZXBlYXRpbmdJbmRleCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAncmVwZWF0aW5nSW5kZXgnIFske3JlcGVhdGluZ0luZGV4fV1gKTtcbiAgICBpZiAodmFsaWRhdGUoc3ViQ29tcG9uZW50SW5kZXgpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3N1YkNvbXBvbmVudEluZGV4JyBbJHtzdWJDb21wb25lbnRJbmRleH1dYCk7XG5cbiAgICBjb25zdCBbdHlwZSwgZmllbGRJZHgsIGNvbXBJZHhdID0gZmllbGQuc3BsaXQoJy4nKTtcblxuICAgIGlmICghdHlwZSB8fCB0eXBlICE9PSB0aGlzLnR5cGUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHBhcmFtZXRlcjogJ2ZpZWxkJyBbJHtmaWVsZH1dLiBDYW5ub3Qgc2V0IFske2ZpZWxkfV0gZnJvbSBbJHt0aGlzLnR5cGV9XSBzZWdtZW50LmAsXG4gICAgICApO1xuICAgIGlmICghZmllbGRJZHggfHwgIU51bWJlcihmaWVsZElkeCkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdmaWVsZCcgWyR7ZmllbGR9XWApO1xuXG4gICAgZm9yIChsZXQgaSA9IHR5cGUgPT09ICdNU0gnID8gMiA6IDE7IGkgPD0gTnVtYmVyKGZpZWxkSWR4KTsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5kYXRhPy5baV0/LlswXT8uWzFdPy5bMF0gPT0gbnVsbCkgdGhpcy5kYXRhW2ldID0gW3sgMTogWycnXSB9XTtcbiAgICB9XG5cbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihyZXBlYXRpbmdJbmRleCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IE51bWJlcihyZXBlYXRpbmdJbmRleCk7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5kYXRhW2ZpZWxkSWR4XT8uW2ldPy5bMV0/LlswXSA9PSBudWxsKSB0aGlzLmRhdGFbZmllbGRJZHhdIVtpXSA9IHsgMTogWycnXSB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29tcElkeCAmJiBOdW1iZXIoY29tcElkeCkpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gTnVtYmVyKGNvbXBJZHgpOyBpKyspIHtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2ZpZWxkSWR4XT8uW3JlcGVhdGluZ0luZGV4IGFzIG51bWJlcl0/LltpXT8uWzBdID09IG51bGwpXG4gICAgICAgICAgICB0aGlzLmRhdGFbZmllbGRJZHhdIVtyZXBlYXRpbmdJbmRleCBhcyBudW1iZXJdIVtpXSA9IFsnJ107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihzdWJDb21wb25lbnRJbmRleCkpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBOdW1iZXIoc3ViQ29tcG9uZW50SW5kZXgpOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbZmllbGRJZHhdPy5bcmVwZWF0aW5nSW5kZXggYXMgbnVtYmVyXT8uW2NvbXBJZHhdPy5baV0gPT0gbnVsbClcbiAgICAgICAgICAgICAgdGhpcy5kYXRhW2ZpZWxkSWR4XSFbcmVwZWF0aW5nSW5kZXggYXMgbnVtYmVyXSFbY29tcElkeF0hW2ldID0gJyc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5kYXRhW2ZpZWxkSWR4XSFbcmVwZWF0aW5nSW5kZXggYXMgbnVtYmVyXSFbY29tcElkeF0hW3N1YkNvbXBvbmVudEluZGV4IGFzIG51bWJlcl0gPVxuICAgICAgICAgICAgdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc3ViQ29tcG9uZW50SW5kZXggPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmRhdGFbZmllbGRJZHhdIVtyZXBlYXRpbmdJbmRleCBhcyBudW1iZXJdIVtjb21wSWR4XSA9IFt2YWx1ZV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YVtmaWVsZElkeF0hW3JlcGVhdGluZ0luZGV4IGFzIG51bWJlcl0gPSB7IDE6IFt2YWx1ZV0gfTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlcGVhdGluZ0luZGV4ID09IHRydWUpIHtcbiAgICAgIHRoaXMuZGF0YVtmaWVsZElkeF0gPSBbeyAxOiBbJyddIH1dO1xuXG4gICAgICBpZiAoY29tcElkeCAmJiBOdW1iZXIoY29tcElkeCkpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gTnVtYmVyKGNvbXBJZHgpOyBpKyspIHtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2ZpZWxkSWR4XT8uWzBdPy5baV0/LlswXSA9PSBudWxsKSB0aGlzLmRhdGFbZmllbGRJZHhdIVswXSFbaV0gPSBbJyddO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoc3ViQ29tcG9uZW50SW5kZXgpKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gTnVtYmVyKHN1YkNvbXBvbmVudEluZGV4KTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhW2ZpZWxkSWR4XT8uWzBdPy5bY29tcElkeF0/LltpXSA9PSBudWxsKVxuICAgICAgICAgICAgICB0aGlzLmRhdGFbZmllbGRJZHhdIVswXSFbY29tcElkeF0hW2ldID0gJyc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5kYXRhW2ZpZWxkSWR4XSFbMF0hW2NvbXBJZHhdIVtzdWJDb21wb25lbnRJbmRleCBhcyBudW1iZXJdID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc3ViQ29tcG9uZW50SW5kZXggPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmRhdGFbZmllbGRJZHhdIVswXSFbY29tcElkeF0gPSBbdmFsdWVdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGFbZmllbGRJZHhdID0gW3sgMTogW3ZhbHVlXSB9XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAjdHJhdmVyc2UoXG4gICAgZGF0YTogYW55LFxuICAgIHBhdGg6IHJlYWRvbmx5IFtzdHJpbmcgfCB1bmRlZmluZWQsIG51bWJlciB8IHRydWUsIHN0cmluZyB8IHVuZGVmaW5lZCwgbnVtYmVyIHwgdHJ1ZV0sXG4gICAgZGVwdGggPSAwLFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGluZGV4ID0gcGF0aFtkZXB0aF07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgaWYgKGluZGV4ID09PSB0cnVlIHx8IGluZGV4ID09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZGVsaW0gPSB0aGlzLiNwYXJzZU1hcFtkZXB0aCsrXTtcbiAgICAgICAgcmV0dXJuIGRhdGEubWFwKChpdGVtKSA9PiB0aGlzLiN0cmF2ZXJzZShpdGVtLCBwYXRoLCBkZXB0aCkpLmpvaW4oZGVsaW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3RyYXZlcnNlKGRhdGFbTnVtYmVyKGluZGV4KV0sIHBhdGgsICsrZGVwdGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoaW5kZXggPT09IHRydWUgfHwgaW5kZXggPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBkZWxpbSA9IHRoaXMuI3BhcnNlTWFwW2RlcHRoKytdO1xuXG4gICAgICAgIGNvbnN0IHZhbCA9IE9iamVjdC5rZXlzKGRhdGEpLm1hcCgoa2V5KSA9PiB0aGlzLiN0cmF2ZXJzZShkYXRhW2tleV0sIHBhdGgsIGRlcHRoKSk7XG5cbiAgICAgICAgcmV0dXJuIHZhbC5qb2luKGRlbGltKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLiN0cmF2ZXJzZShkYXRhW051bWJlcihpbmRleCldLCBwYXRoLCArK2RlcHRoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBTZWdtZW50IH0gZnJvbSAnLi9zZWdtZW50JztcbmltcG9ydCB0eXBlIHsgU2VnbWVudFR5cGUgfSBmcm9tICcuL3R5cGVzJztcblxuY2xhc3MgTm9kZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBkYXRhOiBTZWdtZW50LFxuICAgIHB1YmxpYyBuZXh0OiBOb2RlIHwgbnVsbCA9IG51bGwsXG4gICAgcHVibGljIHByZXY6IE5vZGUgfCBudWxsID0gbnVsbCxcbiAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgRExMIHtcbiAgI2hlYWQ6IE5vZGUgfCBudWxsID0gbnVsbDtcbiAgI3RhaWw6IE5vZGUgfCBudWxsID0gbnVsbDtcbiAgI3NlZ21lbnROb2RlTWFwID0gbmV3IFdlYWtNYXA8U2VnbWVudCwgTm9kZT4oKTtcblxuICBnZXRTZWdtZW50KHR5cGU6IFNlZ21lbnRUeXBlKSB7XG4gICAgbGV0IGN1cnIgPSB0aGlzLiNoZWFkO1xuXG4gICAgd2hpbGUgKGN1cnIpIHtcbiAgICAgIGlmIChjdXJyLmRhdGEudHlwZSA9PT0gdHlwZSkgcmV0dXJuIGN1cnIuZGF0YTtcblxuICAgICAgY3VyciA9IGN1cnIubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3VyciB8fCBudWxsO1xuICB9XG5cbiAgZ2V0U2VnbWVudHModHlwZT86IFNlZ21lbnRUeXBlKSB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBbXTtcbiAgICBsZXQgY3VyciA9IHRoaXMuI2hlYWQ7XG5cbiAgICB3aGlsZSAoY3Vycikge1xuICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09IGN1cnIuZGF0YS50eXBlKSBzZWdtZW50cy5wdXNoKGN1cnIuZGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWdtZW50cy5wdXNoKGN1cnIuZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGN1cnIgPSBjdXJyLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlZ21lbnRzO1xuICB9XG5cbiAgZ2V0U2VnbWVudHNBZnRlcihcbiAgICB0eXBlOiBTZWdtZW50VHlwZSxcbiAgICBzdGFydFNlZ21lbnQ6IFNlZ21lbnQsXG4gICAgc3RvcFNlZ21lbnRUeXBlOiBTZWdtZW50VHlwZVtdID0gW10sXG4gICAgY29uc2VjdXRpdmUgPSBmYWxzZSxcbiAgKSB7XG4gICAgY29uc3Qgc3RhcnROb2RlID0gdGhpcy5nZXROb2RlRnJvbVNlZ21lbnQoc3RhcnRTZWdtZW50KTtcblxuICAgIGlmICghc3RhcnROb2RlKSB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2NhdGU6ICdzdGFydFNlZ21lbnQnIFske3N0YXJ0U2VnbWVudC50eXBlfV1gKTtcblxuICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgIGxldCBjdXJyID0gc3RhcnROb2RlLm5leHQ7XG5cbiAgICB3aGlsZSAoY3Vycikge1xuICAgICAgaWYgKHN0b3BTZWdtZW50VHlwZS5sZW5ndGggJiYgc3RvcFNlZ21lbnRUeXBlLmluY2x1ZGVzKGN1cnIuZGF0YS50eXBlKSkgYnJlYWs7XG5cbiAgICAgIGlmIChjdXJyLmRhdGEudHlwZSA9PT0gdHlwZSkgcmVzLnB1c2goY3Vyci5kYXRhKTtcbiAgICAgIGVsc2UgaWYgKGNvbnNlY3V0aXZlICYmIHJlcy5sZW5ndGgpIGJyZWFrO1xuXG4gICAgICBjdXJyID0gY3Vyci5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBhcHBlbmROZXdTZWdtZW50KG5ld1NlZ21lbnQ6IFNlZ21lbnQsIHRhcmdldFNlZ21lbnQ/OiBTZWdtZW50KSB7XG4gICAgY29uc3QgbmV3Tm9kZSA9IG5ldyBOb2RlKG5ld1NlZ21lbnQpO1xuICAgIHRoaXMuI3NlZ21lbnROb2RlTWFwLnNldChuZXdTZWdtZW50LCBuZXdOb2RlKTtcblxuICAgIHRoaXMubW92ZU5vZGVBZnRlcihuZXdOb2RlLCB0aGlzLmdldE5vZGVGcm9tU2VnbWVudCh0YXJnZXRTZWdtZW50KSB8fCB0aGlzLiN0YWlsKTtcblxuICAgIHJldHVybiBuZXdTZWdtZW50O1xuICB9XG5cbiAgbW92ZU5vZGVBZnRlcihub2RlOiBOb2RlLCB0YXJnZXROb2RlOiBOb2RlIHwgbnVsbCkge1xuICAgIGlmICghbm9kZSkgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9jYXRlIG5vZGUnKTtcblxuICAgIGlmICghdGhpcy4jaGVhZCkge1xuICAgICAgdGhpcy4jaGVhZCA9IHRoaXMuI3RhaWwgPSBub2RlO1xuICAgICAgbm9kZS5wcmV2ID0gbnVsbDtcbiAgICAgIG5vZGUubmV4dCA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXROb2RlKSB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2NhdGUgdGFyZ2V0Tm9kZScpO1xuICAgIGlmIChub2RlID09PSB0YXJnZXROb2RlIHx8IHRhcmdldE5vZGUubmV4dCA9PT0gbm9kZSkgcmV0dXJuO1xuXG4gICAgdGhpcy4jZGV0YWNoTm9kZShub2RlKTtcblxuICAgIG5vZGUucHJldiA9IHRhcmdldE5vZGU7XG4gICAgbm9kZS5uZXh0ID0gdGFyZ2V0Tm9kZS5uZXh0O1xuXG4gICAgaWYgKHRhcmdldE5vZGUubmV4dCkgdGFyZ2V0Tm9kZS5uZXh0LnByZXYgPSBub2RlO1xuICAgIGVsc2UgdGhpcy4jdGFpbCA9IG5vZGU7XG5cbiAgICB0YXJnZXROb2RlLm5leHQgPSBub2RlO1xuICB9XG5cbiAgcHJlcGVuZE5ld1NlZ21lbnQobmV3U2VnbWVudDogU2VnbWVudCwgdGFyZ2V0U2VnbWVudDogU2VnbWVudCkge1xuICAgIGNvbnN0IG5ld05vZGUgPSBuZXcgTm9kZShuZXdTZWdtZW50KTtcbiAgICB0aGlzLiNzZWdtZW50Tm9kZU1hcC5zZXQobmV3U2VnbWVudCwgbmV3Tm9kZSk7XG5cbiAgICBjb25zdCB0YXJnZXROb2RlID0gdGhpcy5nZXROb2RlRnJvbVNlZ21lbnQodGFyZ2V0U2VnbWVudCk7XG5cbiAgICBpZiAoIXRhcmdldE5vZGUpIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvY2F0ZTogJ3RhcmdldFNlZ21lbnQnIFske3RhcmdldFNlZ21lbnQudHlwZX1dYCk7XG5cbiAgICB0aGlzLm1vdmVOb2RlQmVmb3JlKG5ld05vZGUsIHRhcmdldE5vZGUpO1xuXG4gICAgcmV0dXJuIG5ld1NlZ21lbnQ7XG4gIH1cblxuICBtb3ZlTm9kZUJlZm9yZShub2RlOiBOb2RlLCB0YXJnZXROb2RlOiBOb2RlKSB7XG4gICAgaWYgKCFub2RlKSB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2NhdGUgbm9kZScpO1xuXG4gICAgaWYgKCF0aGlzLiNoZWFkKSB7XG4gICAgICB0aGlzLiNoZWFkID0gdGhpcy4jdGFpbCA9IG5vZGU7XG4gICAgICBub2RlLnByZXYgPSBudWxsO1xuICAgICAgbm9kZS5uZXh0ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldE5vZGUpIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvY2F0ZSB0YXJnZXROb2RlJyk7XG4gICAgaWYgKG5vZGUgPT09IHRhcmdldE5vZGUgfHwgdGFyZ2V0Tm9kZS5wcmV2ID09PSBub2RlKSByZXR1cm47XG5cbiAgICB0aGlzLiNkZXRhY2hOb2RlKG5vZGUpO1xuXG4gICAgbm9kZS5uZXh0ID0gdGFyZ2V0Tm9kZTtcbiAgICBub2RlLnByZXYgPSB0YXJnZXROb2RlLnByZXY7XG5cbiAgICBpZiAodGFyZ2V0Tm9kZS5wcmV2KSB0YXJnZXROb2RlLnByZXYubmV4dCA9IG5vZGU7XG4gICAgZWxzZSB0aGlzLiNoZWFkID0gbm9kZTtcblxuICAgIHRhcmdldE5vZGUucHJldiA9IG5vZGU7XG4gIH1cblxuICBkZWxldGVTZWdtZW50KHNlZ21lbnQ6IFNlZ21lbnQpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlRnJvbVNlZ21lbnQoc2VnbWVudCk7XG4gICAgaWYgKCFub2RlKSB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2NhdGU6ICdzZWdtZW50JyBbJHtzZWdtZW50LnR5cGV9XWApO1xuXG4gICAgdGhpcy4jZGV0YWNoTm9kZShub2RlKTtcbiAgICB0aGlzLiNzZWdtZW50Tm9kZU1hcC5kZWxldGUoc2VnbWVudCk7XG4gIH1cblxuICAjZGV0YWNoTm9kZShub2RlOiBOb2RlKSB7XG4gICAgaWYgKG5vZGUucHJldikgbm9kZS5wcmV2Lm5leHQgPSBub2RlLm5leHQ7XG4gICAgaWYgKHRoaXMuI2hlYWQgPT09IG5vZGUpIHRoaXMuI2hlYWQgPSBub2RlLm5leHQ7XG5cbiAgICBpZiAobm9kZS5uZXh0KSBub2RlLm5leHQucHJldiA9IG5vZGUucHJldjtcbiAgICBpZiAodGhpcy4jdGFpbCA9PT0gbm9kZSkgdGhpcy4jdGFpbCA9IG5vZGUucHJldjtcblxuICAgIG5vZGUucHJldiA9IG51bGw7XG4gICAgbm9kZS5uZXh0ID0gbnVsbDtcbiAgfVxuXG4gIGdldE5vZGVGcm9tU2VnbWVudChzZWdtZW50PzogU2VnbWVudCkge1xuICAgIGlmIChzZWdtZW50ICYmICEoc2VnbWVudCBpbnN0YW5jZW9mIFNlZ21lbnQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3NlZ21lbnQnLiBzZWdtZW50IG5vdCBhbiBpbnN0YW5jZSBvZiBTZWdtZW50YCk7XG5cbiAgICByZXR1cm4gKHNlZ21lbnQgJiYgdGhpcy4jc2VnbWVudE5vZGVNYXAuZ2V0KHNlZ21lbnQpKSB8fCBudWxsO1xuICB9XG59XG4iLCJpbXBvcnQgeyBETEwgfSBmcm9tICcuL2RsbCc7XG5pbXBvcnQgeyBTZWdtZW50IH0gZnJvbSAnLi9zZWdtZW50JztcbmltcG9ydCB0eXBlIHsgUHJldHRpZnksIFNlZ21lbnRUeXBlLCBUUGFyc2VPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBITDcge1xuICByYXc6IHN0cmluZztcbiAgcGFyc2VPcHRpb25zOiBUUGFyc2VPcHRpb25zO1xuICAjZGxsOiBETEw7XG5cbiAgY29uc3RydWN0b3IoaGw3TXNnOiBzdHJpbmcsIHBhcnNlT3B0aW9ucz86IFByZXR0aWZ5PFBhcnRpYWw8VFBhcnNlT3B0aW9ucz4+KSB7XG4gICAgdGhpcy5yYXcgPSBobDdNc2c7XG4gICAgdGhpcy5wYXJzZU9wdGlvbnMgPSB7XG4gICAgICBmaWVsZERlbGltOiBwYXJzZU9wdGlvbnM/LmZpZWxkRGVsaW0gPz8gJ3wnLFxuICAgICAgcmVwZWF0aW5nRGVsaW06IHBhcnNlT3B0aW9ucz8ucmVwZWF0aW5nRGVsaW0gPz8gJ34nLFxuICAgICAgY29tcG9uZW50RGVsaW06IHBhcnNlT3B0aW9ucz8uY29tcG9uZW50RGVsaW0gPz8gJ14nLFxuICAgICAgc3ViQ29tcERlbGltOiBwYXJzZU9wdGlvbnM/LnN1YkNvbXBEZWxpbSA/PyAnJicsXG4gICAgICBlb2xEZWxpbTogcGFyc2VPcHRpb25zPy5lb2xEZWxpbSA/PyAnXFxyP1xcbnxcXHInLFxuICAgICAgYnVpbGRFb2xDaGFyOiBwYXJzZU9wdGlvbnM/LmJ1aWxkRW9sQ2hhciA/PyAnXFxyJyxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMucGFyc2VPcHRpb25zLmZpZWxkRGVsaW0ubGVuZ3RoICE9PSAxKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZmllbGQgZGVsaW1pdGVyJyk7XG5cbiAgICB0aGlzLiNkbGwgPSBuZXcgRExMKCk7XG4gICAgdGhpcy50cmFuc2Zvcm0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBpcyB0cmlnZ2VyZWQgaW50ZXJuYWxseSBhbmQgZG9lc250IG5lZWQgdG8gYmUgaW52b2tlZCBtYW51YWxseS5cbiAgICovXG4gIHRyYW5zZm9ybSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMucmF3ICE9PSAnc3RyaW5nJyB8fCAhdGhpcy5yYXcuc3RhcnRzV2l0aCgnTVNIJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByYXcgSEw3IG1lc3NhZ2UuIEV4cGVjdGVkIG1zZyB0byBiZSBhIHN0cmluZyBzdGFydGluZyB3aXRoIE1TSCcpO1xuICAgIH1cblxuICAgIGlmICghWydcXHI/XFxuXFx8XFxyJywgJ1xcclxcbicsICdcXG4nLCAnXFxyJ10uaW5jbHVkZXModGhpcy5wYXJzZU9wdGlvbnMuZW9sRGVsaW0pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgRU9MIGNoYXJhY3Rlci4gRXhwZWN0ZWQgXFxcXHI/XFxcXG5cXHxcXFxcciwgXFxcXHJcXFxcbiwgXFxcXG4sIFxcXFxyJyk7XG4gICAgfVxuXG4gICAgdGhpcy4jZGxsID0gbmV3IERMTCgpO1xuXG4gICAgY29uc3Qgc2VnbWVudHNTdHJBcnIgPSB0aGlzLnJhd1xuICAgICAgLnNwbGl0KFJlZ0V4cCh0aGlzLnBhcnNlT3B0aW9ucy5lb2xEZWxpbSkpXG4gICAgICAuZmlsdGVyKChzZWdtZW50U3RyKSA9PiBCb29sZWFuKHNlZ21lbnRTdHIpICYmIHRoaXMudmFsaWRhdGVTZWdtZW50KHNlZ21lbnRTdHIpKTtcblxuICAgIGNvbnN0IHsgZmllbGREZWxpbSwgcmVwZWF0aW5nRGVsaW0sIGNvbXBvbmVudERlbGltLCBzdWJDb21wRGVsaW0gfSA9IHRoaXMucGFyc2VPcHRpb25zO1xuXG4gICAgZm9yIChjb25zdCBzZWdtZW50U3RyIG9mIHNlZ21lbnRzU3RyQXJyKSB7XG4gICAgICBjb25zdCBmaWVsZHMgPSBzZWdtZW50U3RyLnNwbGl0KGZpZWxkRGVsaW0pO1xuICAgICAgY29uc3QgdHlwZSA9IHNlZ21lbnRTdHIuc3Vic3RyaW5nKDAsIDMpIGFzIFNlZ21lbnRUeXBlO1xuICAgICAgY29uc3Qgc2VnbWVudCA9IG5ldyBTZWdtZW50KHR5cGUsIHRoaXMucGFyc2VPcHRpb25zKTtcbiAgICAgIGxldCBmaWVsZElkeCA9IHR5cGUgPT09ICdNU0gnID8gMSA6IDA7XG4gICAgICBzZWdtZW50LmRhdGEgPSB7fTtcblxuICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgc2VnbWVudC5kYXRhW2ZpZWxkSWR4XSA9IHNlZ21lbnQuZGF0YVtmaWVsZElkeF0gfHwgW107XG4gICAgICAgIGxldCByZXBlYXRGaWVsZElkeCA9IDA7XG5cbiAgICAgICAgZm9yIChjb25zdCByZXBlYXRGaWVsZCBvZiBmaWVsZC5zcGxpdChyZXBlYXRpbmdEZWxpbSkpIHtcbiAgICAgICAgICBsZXQgY29tcElkeCA9IDE7XG4gICAgICAgICAgc2VnbWVudC5kYXRhW2ZpZWxkSWR4XSFbcmVwZWF0RmllbGRJZHhdID0gc2VnbWVudC5kYXRhW2ZpZWxkSWR4XSFbcmVwZWF0RmllbGRJZHhdIHx8IHt9O1xuXG4gICAgICAgICAgZm9yIChjb25zdCBjb21wIG9mIHJlcGVhdEZpZWxkLnNwbGl0KGNvbXBvbmVudERlbGltKSkge1xuICAgICAgICAgICAgc2VnbWVudC5kYXRhW2ZpZWxkSWR4XSFbcmVwZWF0RmllbGRJZHhdIVtjb21wSWR4KytdID0gY29tcC5zcGxpdChzdWJDb21wRGVsaW0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlcGVhdEZpZWxkSWR4Kys7XG4gICAgICAgIH1cblxuICAgICAgICBmaWVsZElkeCsrO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PT0gJ01TSCcgJiYgZmllbGRzWzFdKSB7XG4gICAgICAgIHNlZ21lbnQuZGF0YVsyXSA9IFt7IDE6IFtmaWVsZHNbMV1dIH1dO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiNkbGwuYXBwZW5kTmV3U2VnbWVudChzZWdtZW50KTtcbiAgICB9XG4gIH1cblxuICBidWlsZCgpIHtcbiAgICBjb25zdCB7IGZpZWxkRGVsaW0sIHJlcGVhdGluZ0RlbGltLCBjb21wb25lbnREZWxpbSwgc3ViQ29tcERlbGltLCBidWlsZEVvbENoYXIgfSA9XG4gICAgICB0aGlzLnBhcnNlT3B0aW9ucztcbiAgICBjb25zdCBzZWdtZW50cyA9IHRoaXMuZ2V0U2VnbWVudHMoKTtcbiAgICBjb25zdCBzZWdtZW50c1N0ciA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKSB7XG4gICAgICBjb25zdCBmaWVsZHNTdHJBcnIgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBmaWVsZEtleSBpbiBzZWdtZW50LmRhdGEpIHtcbiAgICAgICAgY29uc3QgcmVwZWF0c1N0ckFyciA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgcmVwZWF0aW5nRmllbGQgb2Ygc2VnbWVudC5kYXRhW2ZpZWxkS2V5XSEpIHtcbiAgICAgICAgICBjb25zdCBjb21wc1N0ckFyciA9IFtdO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBjb21wS2V5IGluIHJlcGVhdGluZ0ZpZWxkKSB7XG4gICAgICAgICAgICBjb21wc1N0ckFyci5wdXNoKHJlcGVhdGluZ0ZpZWxkW2NvbXBLZXldPy5qb2luKHN1YkNvbXBEZWxpbSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlcGVhdHNTdHJBcnIucHVzaChjb21wc1N0ckFyci5qb2luKGNvbXBvbmVudERlbGltKSk7XG4gICAgICAgIH1cblxuICAgICAgICBmaWVsZHNTdHJBcnIucHVzaChyZXBlYXRzU3RyQXJyLmpvaW4ocmVwZWF0aW5nRGVsaW0pKTtcbiAgICAgIH1cblxuICAgICAgc2VnbWVudHNTdHIucHVzaChmaWVsZHNTdHJBcnIuam9pbihmaWVsZERlbGltKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlZ21lbnRzU3RyLmpvaW4oYnVpbGRFb2xDaGFyKTtcbiAgfVxuXG4gIGdldFNlZ21lbnQodHlwZTogU2VnbWVudFR5cGUpOiBTZWdtZW50IHwgbnVsbCB7XG4gICAgaWYgKCEvXltBLVpcXGRdezN9JC8udGVzdCh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3R5cGUnIFske3R5cGV9XWApO1xuXG4gICAgcmV0dXJuIHRoaXMuI2RsbC5nZXRTZWdtZW50KHR5cGUpO1xuICB9XG5cbiAgZ2V0U2VnbWVudHModHlwZT86IFNlZ21lbnRUeXBlKTogU2VnbWVudFtdIHtcbiAgICBpZiAodHlwZSAmJiAhL15bQS1aXFxkXXszfSQvLnRlc3QodHlwZSkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd0eXBlJyBbJHt0eXBlfV1gKTtcblxuICAgIHJldHVybiB0aGlzLiNkbGwuZ2V0U2VnbWVudHModHlwZSk7XG4gIH1cblxuICBnZXRTZWdtZW50c0FmdGVyKFxuICAgIHN0YXJ0U2VnbWVudDogU2VnbWVudCxcbiAgICB0eXBlOiBTZWdtZW50VHlwZSxcbiAgICBzdG9wU2VnbWVudFR5cGU6IFNlZ21lbnRUeXBlW10gPSBbXSxcbiAgICBjb25zZWN1dGl2ZSA9IGZhbHNlLFxuICApOiBTZWdtZW50W10ge1xuICAgIGlmICghL15bQS1aXFxkXXszfSQvLnRlc3QodHlwZSkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd0eXBlJyBbJHt0eXBlfV1gKTtcbiAgICBpZiAoIXN0YXJ0U2VnbWVudCB8fCAhKHN0YXJ0U2VnbWVudCBpbnN0YW5jZW9mIFNlZ21lbnQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3N0YXJ0U2VnbWVudCdgKTtcbiAgICBpZiAoIXN0b3BTZWdtZW50VHlwZSB8fCAhQXJyYXkuaXNBcnJheShzdG9wU2VnbWVudFR5cGUpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3N0b3BTZWdtZW50VHlwZSdgKTtcbiAgICBpZiAodHlwZW9mIGNvbnNlY3V0aXZlICE9PSAnYm9vbGVhbicpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAnY29uc2VjdXRpdmUnIFske2NvbnNlY3V0aXZlfV1gKTtcbiAgICBpZiAoIXRoaXMuI2RsbC5nZXROb2RlRnJvbVNlZ21lbnQoc3RhcnRTZWdtZW50KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvY2F0ZTogJ3N0YXJ0U2VnbWVudCcgWyR7c3RhcnRTZWdtZW50LnR5cGV9XWApO1xuXG4gICAgcmV0dXJuIHRoaXMuI2RsbC5nZXRTZWdtZW50c0FmdGVyKHR5cGUsIHN0YXJ0U2VnbWVudCwgc3RvcFNlZ21lbnRUeXBlLCBjb25zZWN1dGl2ZSk7XG4gIH1cblxuICBjcmVhdGVTZWdtZW50KHR5cGU6IFNlZ21lbnRUeXBlKTogU2VnbWVudCB7XG4gICAgaWYgKCEvXltBLVpcXGRdezN9JC8udGVzdCh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3R5cGUnIFske3R5cGV9XWApO1xuXG4gICAgcmV0dXJuIHRoaXMuI2RsbC5hcHBlbmROZXdTZWdtZW50KG5ldyBTZWdtZW50KHR5cGUsIHRoaXMucGFyc2VPcHRpb25zKSk7XG4gIH1cblxuICBjcmVhdGVTZWdtZW50QWZ0ZXIodHlwZTogU2VnbWVudFR5cGUsIHRhcmdldFNlZ21lbnQ6IFNlZ21lbnQpOiBTZWdtZW50IHtcbiAgICBpZiAoIS9eW0EtWlxcZF17M30kLy50ZXN0KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAndHlwZScgWyR7dHlwZX1dYCk7XG4gICAgaWYgKCF0YXJnZXRTZWdtZW50IHx8ICEodGFyZ2V0U2VnbWVudCBpbnN0YW5jZW9mIFNlZ21lbnQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3RhcmdldFNlZ21lbnQnYCk7XG4gICAgaWYgKCF0aGlzLiNkbGwuZ2V0Tm9kZUZyb21TZWdtZW50KHRhcmdldFNlZ21lbnQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9jYXRlOiAndGFyZ2V0U2VnbWVudCcgWyR7dGFyZ2V0U2VnbWVudC50eXBlfV1gKTtcblxuICAgIHJldHVybiB0aGlzLiNkbGwuYXBwZW5kTmV3U2VnbWVudChuZXcgU2VnbWVudCh0eXBlLCB0aGlzLnBhcnNlT3B0aW9ucyksIHRhcmdldFNlZ21lbnQpO1xuICB9XG5cbiAgY3JlYXRlU2VnbWVudEJlZm9yZSh0eXBlOiBTZWdtZW50VHlwZSwgdGFyZ2V0U2VnbWVudDogU2VnbWVudCk6IFNlZ21lbnQge1xuICAgIGlmICghL15bQS1aXFxkXXszfSQvLnRlc3QodHlwZSkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd0eXBlJyBbJHt0eXBlfV1gKTtcbiAgICBpZiAoIXRhcmdldFNlZ21lbnQgfHwgISh0YXJnZXRTZWdtZW50IGluc3RhbmNlb2YgU2VnbWVudCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAndGFyZ2V0U2VnbWVudCdgKTtcbiAgICBpZiAoIXRoaXMuI2RsbC5nZXROb2RlRnJvbVNlZ21lbnQodGFyZ2V0U2VnbWVudCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2NhdGU6ICd0YXJnZXRTZWdtZW50JyBbJHt0YXJnZXRTZWdtZW50LnR5cGV9XWApO1xuXG4gICAgcmV0dXJuIHRoaXMuI2RsbC5wcmVwZW5kTmV3U2VnbWVudChuZXcgU2VnbWVudCh0eXBlLCB0aGlzLnBhcnNlT3B0aW9ucyksIHRhcmdldFNlZ21lbnQpO1xuICB9XG5cbiAgZGVsZXRlU2VnbWVudChzZWdtZW50OiBTZWdtZW50KSB7XG4gICAgdGhpcy5kZWxldGVTZWdtZW50cyhbc2VnbWVudF0pO1xuICB9XG5cbiAgZGVsZXRlU2VnbWVudHMoc2VnbWVudHM6IFNlZ21lbnRbXSkge1xuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cykge1xuICAgICAgaWYgKCFzZWdtZW50IHx8ICEoc2VnbWVudCBpbnN0YW5jZW9mIFNlZ21lbnQpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAnc2VnbWVudHMnYCk7XG4gICAgICBpZiAoIXRoaXMuI2RsbC5nZXROb2RlRnJvbVNlZ21lbnQoc2VnbWVudCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvY2F0ZTogJ3NlZ21lbnQnIFske3NlZ21lbnQudHlwZX1dYCk7XG5cbiAgICAgIHRoaXMuI2RsbC5kZWxldGVTZWdtZW50KHNlZ21lbnQpO1xuICAgIH1cbiAgfVxuXG4gIG1vdmVTZWdtZW50QWZ0ZXIoc2VnbWVudDogU2VnbWVudCwgdGFyZ2V0U2VnbWVudDogU2VnbWVudCkge1xuICAgIGlmICghc2VnbWVudCB8fCAhKHNlZ21lbnQgaW5zdGFuY2VvZiBTZWdtZW50KSkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3NlZ21lbnQnYCk7XG4gICAgaWYgKCF0YXJnZXRTZWdtZW50IHx8ICEodGFyZ2V0U2VnbWVudCBpbnN0YW5jZW9mIFNlZ21lbnQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3RhcmdldFNlZ21lbnQnYCk7XG5cbiAgICBjb25zdCBub2RlID0gdGhpcy4jZGxsLmdldE5vZGVGcm9tU2VnbWVudChzZWdtZW50KTtcbiAgICBjb25zdCB0YXJnZXROb2RlID0gdGhpcy4jZGxsLmdldE5vZGVGcm9tU2VnbWVudCh0YXJnZXRTZWdtZW50KTtcblxuICAgIGlmICghbm9kZSkgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9jYXRlOiAnc2VnbWVudCcgWyR7c2VnbWVudC50eXBlfV1gKTtcbiAgICBpZiAoIXRhcmdldE5vZGUpIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvY2F0ZTogJ3RhcmdldFNlZ21lbnQnIFske3RhcmdldFNlZ21lbnQudHlwZX1dYCk7XG5cbiAgICB0aGlzLiNkbGwubW92ZU5vZGVBZnRlcihub2RlLCB0YXJnZXROb2RlKTtcbiAgfVxuXG4gIG1vdmVTZWdtZW50QmVmb3JlKHNlZ21lbnQ6IFNlZ21lbnQsIHRhcmdldFNlZ21lbnQ6IFNlZ21lbnQpIHtcbiAgICBpZiAoIXNlZ21lbnQgfHwgIShzZWdtZW50IGluc3RhbmNlb2YgU2VnbWVudCkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdzZWdtZW50J2ApO1xuICAgIGlmICghdGFyZ2V0U2VnbWVudCB8fCAhKHRhcmdldFNlZ21lbnQgaW5zdGFuY2VvZiBTZWdtZW50KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd0YXJnZXRTZWdtZW50J2ApO1xuXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuI2RsbC5nZXROb2RlRnJvbVNlZ21lbnQoc2VnbWVudCk7XG4gICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRoaXMuI2RsbC5nZXROb2RlRnJvbVNlZ21lbnQodGFyZ2V0U2VnbWVudCk7XG5cbiAgICBpZiAoIW5vZGUpIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvY2F0ZTogJ3NlZ21lbnQnIFske3NlZ21lbnQudHlwZX1dYCk7XG4gICAgaWYgKCF0YXJnZXROb2RlKSB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2NhdGU6ICd0YXJnZXRTZWdtZW50JyBbJHt0YXJnZXRTZWdtZW50LnR5cGV9XWApO1xuXG4gICAgdGhpcy4jZGxsLm1vdmVOb2RlQmVmb3JlKG5vZGUsIHRhcmdldE5vZGUpO1xuICB9XG5cbiAgcmVpbmRleFNlZ21lbnRzKFxuICAgIHJlaW5kZXhDb25maWc6IFBhcnRpYWw8UmVjb3JkPFNlZ21lbnRUeXBlLCBTZWdtZW50VHlwZVtdPj4sXG4gICAgc3RhcnRJbmRleCA9IDEsXG4gICAgZmllbGQgPSAnMS4xJyxcbiAgKSB7XG4gICAgaWYgKFxuICAgICAgIXJlaW5kZXhDb25maWcgfHxcbiAgICAgIHR5cGVvZiByZWluZGV4Q29uZmlnICE9PSAnb2JqZWN0JyB8fFxuICAgICAgT2JqZWN0LnZhbHVlcyhyZWluZGV4Q29uZmlnKS5zb21lKCh2YWwpID0+ICFBcnJheS5pc0FycmF5KHZhbCkpXG4gICAgKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3JlaW5kZXhDb25maWcnYCk7XG4gICAgaWYgKCFzdGFydEluZGV4IHx8IHR5cGVvZiBzdGFydEluZGV4ICE9PSAnbnVtYmVyJylcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdzdGFydEluZGV4JyBbJHtzdGFydEluZGV4fV1gKTtcbiAgICBpZiAoZmllbGQgJiYgIS9eKFxcZCspKFxcLlxcZCspezAsMX0kLy50ZXN0KGZpZWxkKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdmaWVsZCcgWyR7ZmllbGR9XWApO1xuXG4gICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLmdldFNlZ21lbnRzKCk7XG4gICAgY29uc3QgaW5kZXhNYXA6IFBhcnRpYWw8UmVjb3JkPFNlZ21lbnRUeXBlLCBudW1iZXI+PiA9IHt9O1xuICAgIGNvbnN0IGluZGV4UmVzZXRUcmlnZ2VyTWFwOiBQYXJ0aWFsPFJlY29yZDxTZWdtZW50VHlwZSwgU2VnbWVudFR5cGVbXT4+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtzZWcsIHJlc2V0VHJpZ2dlclNlZ3NdIG9mIE9iamVjdC5lbnRyaWVzKHJlaW5kZXhDb25maWcpKSB7XG4gICAgICBpbmRleE1hcFtzZWddID0gc3RhcnRJbmRleDtcblxuICAgICAgaWYgKHJlc2V0VHJpZ2dlclNlZ3MpXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHJlc2V0VHJpZ2dlclNlZ3MpIChpbmRleFJlc2V0VHJpZ2dlck1hcFtrZXldID8/PSBbXSkucHVzaChzZWcpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cykge1xuICAgICAgaWYgKHJlaW5kZXhDb25maWdbc2VnbWVudC50eXBlXSkge1xuICAgICAgICBzZWdtZW50LnNldChgJHtzZWdtZW50LnR5cGV9LiR7ZmllbGR9YCwgU3RyaW5nKGluZGV4TWFwW3NlZ21lbnQudHlwZV0rKykpO1xuXG4gICAgICAgIGlmIChpbmRleFJlc2V0VHJpZ2dlck1hcFtzZWdtZW50LnR5cGVdKVxuICAgICAgICAgIGZvciAoY29uc3Qgc2VnIG9mIGluZGV4UmVzZXRUcmlnZ2VyTWFwW3NlZ21lbnQudHlwZV0hKSBpbmRleE1hcFtzZWddID0gc3RhcnRJbmRleDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlU2VnbWVudChzZWdtZW50OiBzdHJpbmcpIHtcbiAgICBpZiAobmV3IFJlZ0V4cChgXltBLVowLTldezN9XFxcXCR7dGhpcy5wYXJzZU9wdGlvbnMuZmllbGREZWxpbX1gKS50ZXN0KHNlZ21lbnQpKSByZXR1cm4gdHJ1ZTtcbiAgICBlbHNlIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzZWdtZW50OiAke3NlZ21lbnR9YCk7XG4gIH1cbn1cbiJdfQ==
package/dist/index.d.cts CHANGED
@@ -18,7 +18,7 @@ declare class Segment {
18
18
  data: TSegmentData;
19
19
  private parseOptions;
20
20
  constructor(type: SegmentType, parseOptions?: Prettify<Omit<TParseOptions, 'eolDelim' | 'buildEolChar'>>);
21
- get(field: string, repeatingIndex?: number | true, subComponentIndex?: number | true): string;
21
+ get(field: string, repeatingIndex?: number | true, subComponentIndex?: number | true): string | null;
22
22
  set(field: string, value: string, repeatingIndex?: number | true, subComponentIndex?: number | true): void;
23
23
  }
24
24
 
@@ -34,7 +34,7 @@ declare class HL7 {
34
34
  build(): string;
35
35
  getSegment(type: SegmentType): Segment | null;
36
36
  getSegments(type?: SegmentType): Segment[];
37
- getSegmentsAfter(type: SegmentType, startSegment: Segment, stopSegmentType?: SegmentType[], consecutive?: boolean): Segment[];
37
+ getSegmentsAfter(startSegment: Segment, type: SegmentType, stopSegmentType?: SegmentType[], consecutive?: boolean): Segment[];
38
38
  createSegment(type: SegmentType): Segment;
39
39
  createSegmentAfter(type: SegmentType, targetSegment: Segment): Segment;
40
40
  createSegmentBefore(type: SegmentType, targetSegment: Segment): Segment;
@@ -46,4 +46,4 @@ declare class HL7 {
46
46
  private validateSegment;
47
47
  }
48
48
 
49
- export { HL7, Segment, type SegmentType };
49
+ export { HL7, Segment };
package/dist/index.d.ts CHANGED
@@ -18,7 +18,7 @@ declare class Segment {
18
18
  data: TSegmentData;
19
19
  private parseOptions;
20
20
  constructor(type: SegmentType, parseOptions?: Prettify<Omit<TParseOptions, 'eolDelim' | 'buildEolChar'>>);
21
- get(field: string, repeatingIndex?: number | true, subComponentIndex?: number | true): string;
21
+ get(field: string, repeatingIndex?: number | true, subComponentIndex?: number | true): string | null;
22
22
  set(field: string, value: string, repeatingIndex?: number | true, subComponentIndex?: number | true): void;
23
23
  }
24
24
 
@@ -34,7 +34,7 @@ declare class HL7 {
34
34
  build(): string;
35
35
  getSegment(type: SegmentType): Segment | null;
36
36
  getSegments(type?: SegmentType): Segment[];
37
- getSegmentsAfter(type: SegmentType, startSegment: Segment, stopSegmentType?: SegmentType[], consecutive?: boolean): Segment[];
37
+ getSegmentsAfter(startSegment: Segment, type: SegmentType, stopSegmentType?: SegmentType[], consecutive?: boolean): Segment[];
38
38
  createSegment(type: SegmentType): Segment;
39
39
  createSegmentAfter(type: SegmentType, targetSegment: Segment): Segment;
40
40
  createSegmentBefore(type: SegmentType, targetSegment: Segment): Segment;
@@ -46,4 +46,4 @@ declare class HL7 {
46
46
  private validateSegment;
47
47
  }
48
48
 
49
- export { HL7, Segment, type SegmentType };
49
+ export { HL7, Segment };
package/dist/index.js CHANGED
@@ -16,8 +16,8 @@ var Segment = class {
16
16
  this.data = {};
17
17
  __privateAdd(this, _parseMap);
18
18
  var _a, _b, _c, _d;
19
- if (!type || !/^[A-Z\d]{3}(\.\d+){0,2}$/.test(type))
20
- throw new Error(`Invalid parameter: 'field' [${type}]`);
19
+ if (!type || !/^[A-Z0-9]{3}$/.test(type))
20
+ throw new Error(`Invalid parameter: 'type' [${type}]`);
21
21
  this.data[type === "MSH" ? "1" : "0"] = [{ 1: [type] }];
22
22
  this.parseOptions = {
23
23
  fieldDelim: (_a = parseOptions == null ? void 0 : parseOptions.fieldDelim) != null ? _a : "|",
@@ -33,8 +33,8 @@ var Segment = class {
33
33
  });
34
34
  }
35
35
  get(field, repeatingIndex = 0, subComponentIndex = 0) {
36
- const validate = (val) => !(typeof val === "number" && val >= 0 || val == true);
37
- if (!field || !/^[A-Z\d]{3}(\.\d+){0,2}$/.test(field))
36
+ const validate = (val) => !(typeof val === "number" && val >= 0 || val === true);
37
+ if (!field || !/^[A-Z0-9]{3}(\.\d+){0,2}$/.test(field))
38
38
  throw new Error(`Invalid parameter: 'field' [${field}]`);
39
39
  if (validate(repeatingIndex))
40
40
  throw new Error(`Invalid parameter: 'repeatingIndex' [${repeatingIndex}]`);
@@ -46,11 +46,11 @@ var Segment = class {
46
46
  throw new Error(
47
47
  `Invalid parameter: 'field'. Cannot get [${field}] from [${this.type}] segment.`
48
48
  );
49
- return __privateMethod(this, _Segment_instances, traverse_fn).call(this, this.data, path);
49
+ return __privateMethod(this, _Segment_instances, traverse_fn).call(this, this.data, path) || null;
50
50
  }
51
51
  set(field, value, repeatingIndex = 0, subComponentIndex = 0) {
52
52
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s;
53
- const validate = (val) => !(typeof val === "number" && val >= 0 || val == true);
53
+ const validate = (val) => !(typeof val === "number" && val >= 0 || val === true);
54
54
  if (!field || !/^[A-Z\d]{3}(\.\d+){1,2}$/.test(field))
55
55
  throw new Error(`Invalid parameter: 'field' [${field}]`);
56
56
  if (value == null || typeof value !== "string")
@@ -66,7 +66,7 @@ var Segment = class {
66
66
  );
67
67
  if (!fieldIdx || !Number(fieldIdx)) throw new Error(`Invalid parameter: 'field' [${field}]`);
68
68
  for (let i = type === "MSH" ? 2 : 1; i <= Number(fieldIdx); i++) {
69
- if (!((_d = (_c = (_b = (_a = this.data) == null ? void 0 : _a[i]) == null ? void 0 : _b[0]) == null ? void 0 : _c[1]) == null ? void 0 : _d[0]) == null) this.data[i] = [{ 1: [""] }];
69
+ if (((_d = (_c = (_b = (_a = this.data) == null ? void 0 : _a[i]) == null ? void 0 : _b[0]) == null ? void 0 : _c[1]) == null ? void 0 : _d[0]) == null) this.data[i] = [{ 1: [""] }];
70
70
  }
71
71
  if (Number.isInteger(repeatingIndex)) {
72
72
  for (let i = 0; i <= Number(repeatingIndex); i++) {
@@ -198,7 +198,7 @@ var DLL = class {
198
198
  node.next = null;
199
199
  return;
200
200
  }
201
- if (!targetNode) throw new Error("Failed to locate node targetNode");
201
+ if (!targetNode) throw new Error("Failed to locate targetNode");
202
202
  if (node === targetNode || targetNode.next === node) return;
203
203
  __privateMethod(this, _DLL_instances, detachNode_fn).call(this, node);
204
204
  node.prev = targetNode;
@@ -211,7 +211,7 @@ var DLL = class {
211
211
  const newNode = new Node(newSegment);
212
212
  __privateGet(this, _segmentNodeMap).set(newSegment, newNode);
213
213
  const targetNode = this.getNodeFromSegment(targetSegment);
214
- if (!targetNode) throw new Error();
214
+ if (!targetNode) throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);
215
215
  this.moveNodeBefore(newNode, targetNode);
216
216
  return newSegment;
217
217
  }
@@ -270,8 +270,9 @@ var HL7 = class {
270
270
  componentDelim: (_c = parseOptions == null ? void 0 : parseOptions.componentDelim) != null ? _c : "^",
271
271
  subCompDelim: (_d = parseOptions == null ? void 0 : parseOptions.subCompDelim) != null ? _d : "&",
272
272
  eolDelim: (_e = parseOptions == null ? void 0 : parseOptions.eolDelim) != null ? _e : "\r?\n|\r",
273
- buildEolChar: (_f = parseOptions == null ? void 0 : parseOptions.buildEolChar) != null ? _f : "\r\n"
273
+ buildEolChar: (_f = parseOptions == null ? void 0 : parseOptions.buildEolChar) != null ? _f : "\r"
274
274
  };
275
+ if (this.parseOptions.fieldDelim.length !== 1) throw new Error("Invalid field delimiter");
275
276
  __privateSet(this, _dll, new DLL());
276
277
  this.transform();
277
278
  }
@@ -279,14 +280,14 @@ var HL7 = class {
279
280
  * @deprecated This method is triggered internally and doesnt need to be invoked manually.
280
281
  */
281
282
  transform() {
282
- var _a;
283
283
  if (typeof this.raw !== "string" || !this.raw.startsWith("MSH")) {
284
284
  throw new Error("Invalid raw HL7 message. Expected msg to be a string starting with MSH");
285
285
  }
286
286
  if (!["\r?\n|\r", "\r\n", "\n", "\r"].includes(this.parseOptions.eolDelim)) {
287
287
  throw new Error("Invalid EOL character. Expected \\r?\\n|\\r, \\r\\n, \\n, \\r");
288
288
  }
289
- const segmentsStrArr = this.raw.split(RegExp(this.parseOptions.eolDelim)).filter((segmentStr) => this.validateSegment(segmentStr));
289
+ __privateSet(this, _dll, new DLL());
290
+ const segmentsStrArr = this.raw.split(RegExp(this.parseOptions.eolDelim)).filter((segmentStr) => Boolean(segmentStr) && this.validateSegment(segmentStr));
290
291
  const { fieldDelim, repeatingDelim, componentDelim, subCompDelim } = this.parseOptions;
291
292
  for (const segmentStr of segmentsStrArr) {
292
293
  const fields = segmentStr.split(fieldDelim);
@@ -307,7 +308,7 @@ var HL7 = class {
307
308
  }
308
309
  fieldIdx++;
309
310
  }
310
- if (type === "MSH" && ((_a = segment.data[2]) == null ? void 0 : _a[0]) && fields[1]) {
311
+ if (type === "MSH" && fields[1]) {
311
312
  segment.data[2] = [{ 1: [fields[1]] }];
312
313
  }
313
314
  __privateGet(this, _dll).appendNewSegment(segment);
@@ -343,7 +344,7 @@ var HL7 = class {
343
344
  if (type && !/^[A-Z\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);
344
345
  return __privateGet(this, _dll).getSegments(type);
345
346
  }
346
- getSegmentsAfter(type, startSegment, stopSegmentType = [], consecutive = false) {
347
+ getSegmentsAfter(startSegment, type, stopSegmentType = [], consecutive = false) {
347
348
  if (!/^[A-Z\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);
348
349
  if (!startSegment || !(startSegment instanceof Segment))
349
350
  throw new Error(`Invalid parameter: 'startSegment'`);
@@ -363,7 +364,7 @@ var HL7 = class {
363
364
  if (!/^[A-Z\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);
364
365
  if (!targetSegment || !(targetSegment instanceof Segment))
365
366
  throw new Error(`Invalid parameter: 'targetSegment'`);
366
- if (__privateGet(this, _dll).getNodeFromSegment(targetSegment))
367
+ if (!__privateGet(this, _dll).getNodeFromSegment(targetSegment))
367
368
  throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);
368
369
  return __privateGet(this, _dll).appendNewSegment(new Segment(type, this.parseOptions), targetSegment);
369
370
  }
@@ -371,8 +372,8 @@ var HL7 = class {
371
372
  if (!/^[A-Z\d]{3}$/.test(type)) throw new Error(`Invalid parameter: 'type' [${type}]`);
372
373
  if (!targetSegment || !(targetSegment instanceof Segment))
373
374
  throw new Error(`Invalid parameter: 'targetSegment'`);
374
- if (__privateGet(this, _dll).getNodeFromSegment(targetSegment))
375
- throw new Error(`Failed to locate: 'startSegment' [${targetSegment.type}]`);
375
+ if (!__privateGet(this, _dll).getNodeFromSegment(targetSegment))
376
+ throw new Error(`Failed to locate: 'targetSegment' [${targetSegment.type}]`);
376
377
  return __privateGet(this, _dll).prependNewSegment(new Segment(type, this.parseOptions), targetSegment);
377
378
  }
378
379
  deleteSegment(segment) {
@@ -382,7 +383,7 @@ var HL7 = class {
382
383
  for (const segment of segments) {
383
384
  if (!segment || !(segment instanceof Segment))
384
385
  throw new Error(`Invalid parameter: 'segments'`);
385
- if (__privateGet(this, _dll).getNodeFromSegment(segment))
386
+ if (!__privateGet(this, _dll).getNodeFromSegment(segment))
386
387
  throw new Error(`Failed to locate: 'segment' [${segment.type}]`);
387
388
  __privateGet(this, _dll).deleteSegment(segment);
388
389
  }
@@ -432,14 +433,12 @@ var HL7 = class {
432
433
  }
433
434
  }
434
435
  validateSegment(segment) {
435
- if (/^[A-Z\d]{3}\|/.test(segment)) {
436
- return true;
437
- }
438
- throw new Error(`Invalid Segment: [${segment.substring(0, 4)}]`);
436
+ if (new RegExp(`^[A-Z0-9]{3}\\${this.parseOptions.fieldDelim}`).test(segment)) return true;
437
+ else throw new Error(`Invalid segment: ${segment}`);
439
438
  }
440
439
  };
441
440
  _dll = new WeakMap();
442
441
 
443
442
  export { HL7 };
444
443
  //# sourceMappingURL=index.js.map
445
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9zZWdtZW50LnRzIiwiLi4vc3JjL3V0aWxzL2RsbC50cyIsIi4uL3NyYy91dGlscy9obDcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLElBQUEsU0FBQSxFQUFBLGtCQUFBLEVBQUEsV0FBQTtBQUVPLElBQU0sVUFBTixNQUFjO0FBQUEsRUFLbkIsV0FBQSxDQUNXLE1BQ1QsWUFBQSxFQUNBO0FBRlMsSUFBQSxJQUFBLENBQUEsSUFBQSxHQUFBLElBQUE7QUFOTixJQUFBLFlBQUEsQ0FBQSxJQUFBLEVBQUEsa0JBQUEsQ0FBQTtBQUNMLElBQUEsSUFBQSxDQUFBLElBQUEsR0FBcUIsRUFBQztBQUV0QixJQUFBLFlBQUEsQ0FBQSxJQUFBLEVBQUEsU0FBQSxDQUFBO0FBTEYsSUFBQSxJQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUE7QUFXSSxJQUFBLElBQUksQ0FBQyxJQUFBLElBQVEsQ0FBQywwQkFBQSxDQUEyQixLQUFLLElBQUksQ0FBQTtBQUNoRCxNQUFBLE1BQU0sSUFBSSxLQUFBLENBQU0sQ0FBQSw0QkFBQSxFQUErQixJQUFJLENBQUEsQ0FBQSxDQUFHLENBQUE7QUFDeEQsSUFBQSxJQUFBLENBQUssSUFBQSxDQUFLLElBQUEsS0FBUyxLQUFBLEdBQVEsR0FBQSxHQUFNLEdBQUcsQ0FBQSxHQUFJLENBQUMsRUFBRSxDQUFBLEVBQUcsQ0FBQyxJQUFJLENBQUEsRUFBRyxDQUFBO0FBQ3RELElBQUEsSUFBQSxDQUFLLFlBQUEsR0FBZTtBQUFBLE1BQ2xCLFVBQUEsRUFBQSxDQUFZLEVBQUEsR0FBQSxZQUFBLElBQUEsSUFBQSxHQUFBLE1BQUEsR0FBQSxZQUFBLENBQWMsVUFBQSxLQUFkLElBQUEsR0FBQSxFQUFBLEdBQTRCLEdBQUE7QUFBQSxNQUN4QyxjQUFBLEVBQUEsQ0FBZ0IsRUFBQSxHQUFBLFlBQUEsSUFBQSxJQUFBLEdBQUEsTUFBQSxHQUFBLFlBQUEsQ0FBYyxj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LENBQUEsRUFBRyxPQUFBLENBQVEsSUFBSSxDQUFBLENBQUEsRUFBSSxLQUFLLENBQUEsQ0FBQSxFQUFJLE1BQUEsQ0FBTyxRQUFBLENBQVMsT0FBQSxDQUFRLElBQUksQ0FBQSxFQUFHLENBQUMsQ0FBQTtBQUV4RSxRQUFBLElBQUksb0JBQUEsQ0FBcUIsUUFBUSxJQUFJLENBQUE7QUFDbkMsVUFBQSxLQUFBLE1BQVcsT0FBTyxvQkFBQSxDQUFxQixPQUFBLENBQVEsSUFBSSxDQUFBLEVBQUksUUFBQSxDQUFTLEdBQUcsQ0FBQSxHQUFJLFVBQUE7QUFBQSxNQUMzRTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFFUSxnQkFBZ0IsT0FBQSxFQUFpQjtBQUN2QyxJQUFBLElBQUksZUFBQSxDQUFnQixJQUFBLENBQUssT0FBTyxDQUFBLEVBQUc7QUFDakMsTUFBQSxPQUFPLElBQUE7QUFBQSxJQUNUO0FBRUEsSUFBQSxNQUFNLElBQUksTUFBTSxDQUFBLGtCQUFBLEVBQXFCLE9BQUEsQ0FBUSxVQUFVLENBQUEsRUFBRyxDQUFDLENBQUMsQ0FBQSxDQUFBLENBQUcsQ0FBQTtBQUFBLEVBQ2pFO0FBQ0Y7QUFsUEUsSUFBQSxHQUFBLElBQUEsT0FBQSxFQUFBIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcmV0dGlmeSwgU2VnbWVudFR5cGUsIFRQYXJzZU9wdGlvbnMsIFRTZWdtZW50RGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgU2VnbWVudCB7XG4gIGRhdGE6IFRTZWdtZW50RGF0YSA9IHt9O1xuICBwcml2YXRlIHBhcnNlT3B0aW9uczogUHJldHRpZnk8T21pdDxUUGFyc2VPcHRpb25zLCAnZW9sRGVsaW0nIHwgJ2J1aWxkRW9sQ2hhcic+PjtcbiAgI3BhcnNlTWFwOiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHR5cGU6IFNlZ21lbnRUeXBlLFxuICAgIHBhcnNlT3B0aW9ucz86IFByZXR0aWZ5PE9taXQ8VFBhcnNlT3B0aW9ucywgJ2VvbERlbGltJyB8ICdidWlsZEVvbENoYXInPj4sXG4gICkge1xuICAgIGlmICghdHlwZSB8fCAhL15bQS1aXFxkXXszfShcXC5cXGQrKXswLDJ9JC8udGVzdCh0eXBlKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdmaWVsZCcgWyR7dHlwZX1dYCk7XG4gICAgdGhpcy5kYXRhW3R5cGUgPT09ICdNU0gnID8gJzEnIDogJzAnXSA9IFt7IDE6IFt0eXBlXSB9XTtcbiAgICB0aGlzLnBhcnNlT3B0aW9ucyA9IHtcbiAgICAgIGZpZWxkRGVsaW06IHBhcnNlT3B0aW9ucz8uZmllbGREZWxpbSA/PyAnfCcsXG4gICAgICByZXBlYXRpbmdEZWxpbTogcGFyc2VPcHRpb25zPy5yZXBlYXRpbmdEZWxpbSA/PyAnficsXG4gICAgICBjb21wb25lbnREZWxpbTogcGFyc2VPcHRpb25zPy5jb21wb25lbnREZWxpbSA/PyAnXicsXG4gICAgICBzdWJDb21wRGVsaW06IHBhcnNlT3B0aW9ucz8uc3ViQ29tcERlbGltID8/ICcmJyxcbiAgICB9O1xuICAgIHRoaXMuI3BhcnNlTWFwID0ge1xuICAgICAgMDogdGhpcy5wYXJzZU9wdGlvbnMuZmllbGREZWxpbSxcbiAgICAgIDE6IHRoaXMucGFyc2VPcHRpb25zLnJlcGVhdGluZ0RlbGltLFxuICAgICAgMjogdGhpcy5wYXJzZU9wdGlvbnMuY29tcG9uZW50RGVsaW0sXG4gICAgICAzOiB0aGlzLnBhcnNlT3B0aW9ucy5zdWJDb21wRGVsaW0sXG4gICAgfTtcbiAgfVxuXG4gIGdldChmaWVsZDogc3RyaW5nLCByZXBlYXRpbmdJbmRleDogbnVtYmVyIHwgdHJ1ZSA9IDAsIHN1YkNvbXBvbmVudEluZGV4OiBudW1iZXIgfCB0cnVlID0gMCkge1xuICAgIGNvbnN0IHZhbGlkYXRlID0gKHZhbDogbnVtYmVyIHwgdHJ1ZSkgPT5cbiAgICAgICEoKHR5cGVvZiB2YWwgPT09ICdudW1iZXInICYmIHZhbCA+PSAwKSB8fCB2YWwgPT0gdHJ1ZSk7XG5cbiAgICBpZiAoIWZpZWxkIHx8ICEvXltBLVpcXGRdezN9KFxcLlxcZCspezAsMn0kLy50ZXN0KGZpZWxkKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdmaWVsZCcgWyR7ZmllbGR9XWApO1xuICAgIGlmICh2YWxpZGF0ZShyZXBlYXRpbmdJbmRleCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAncmVwZWF0aW5nSW5kZXgnIFske3JlcGVhdGluZ0luZGV4fV1gKTtcbiAgICBpZiAodmFsaWRhdGUoc3ViQ29tcG9uZW50SW5kZXgpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3N1YkNvbXBvbmVudEluZGV4JyBbJHtzdWJDb21wb25lbnRJbmRleH1dYCk7XG5cbiAgICBjb25zdCBbdHlwZSwgZmllbGRJZHgsIGNvbXBJZHhdID0gZmllbGQuc3BsaXQoJy4nKTtcbiAgICBjb25zdCBwYXRoID0gW2ZpZWxkSWR4LCByZXBlYXRpbmdJbmRleCwgY29tcElkeCwgc3ViQ29tcG9uZW50SW5kZXhdIGFzIGNvbnN0O1xuXG4gICAgaWYgKCF0eXBlIHx8IHR5cGUgIT09IHRoaXMudHlwZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgcGFyYW1ldGVyOiAnZmllbGQnLiBDYW5ub3QgZ2V0IFske2ZpZWxkfV0gZnJvbSBbJHt0aGlzLnR5cGV9XSBzZWdtZW50LmAsXG4gICAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuI3RyYXZlcnNlKHRoaXMuZGF0YSwgcGF0aCk7XG4gIH1cblxuICBzZXQoXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIHJlcGVhdGluZ0luZGV4OiBudW1iZXIgfCB0cnVlID0gMCxcbiAgICBzdWJDb21wb25lbnRJbmRleDogbnVtYmVyIHwgdHJ1ZSA9IDAsXG4gICkge1xuICAgIGNvbnN0IHZhbGlkYXRlID0gKHZhbDogbnVtYmVyIHwgdHJ1ZSkgPT5cbiAgICAgICEoKHR5cGVvZiB2YWwgPT09ICdudW1iZXInICYmIHZhbCA+PSAwKSB8fCB2YWwgPT0gdHJ1ZSk7XG5cbiAgICBpZiAoIWZpZWxkIHx8ICEvXltBLVpcXGRdezN9KFxcLlxcZCspezEsMn0kLy50ZXN0KGZpZWxkKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdmaWVsZCcgWyR7ZmllbGR9XWApO1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAndmFsdWUnIFske3ZhbHVlfV1gKTtcbiAgICBpZiAodmFsaWRhdGUocmVwZWF0aW5nSW5kZXgpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3JlcGVhdGluZ0luZGV4JyBbJHtyZXBlYXRpbmdJbmRleH1dYCk7XG4gICAgaWYgKHZhbGlkYXRlKHN1YkNvbXBvbmVudEluZGV4KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdzdWJDb21wb25lbnRJbmRleCcgWyR7c3ViQ29tcG9uZW50SW5kZXh9XWApO1xuXG4gICAgY29uc3QgW3R5cGUsIGZpZWxkSWR4LCBjb21wSWR4XSA9IGZpZWxkLnNwbGl0KCcuJyk7XG5cbiAgICBpZiAoIXR5cGUgfHwgdHlwZSAhPT0gdGhpcy50eXBlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBwYXJhbWV0ZXI6ICdmaWVsZCcgWyR7ZmllbGR9XS4gQ2Fubm90IHNldCBbJHtmaWVsZH1dIGZyb20gWyR7dGhpcy50eXBlfV0gc2VnbWVudC5gLFxuICAgICAgKTtcbiAgICBpZiAoIWZpZWxkSWR4IHx8ICFOdW1iZXIoZmllbGRJZHgpKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAnZmllbGQnIFske2ZpZWxkfV1gKTtcblxuICAgIGZvciAobGV0IGkgPSB0eXBlID09PSAnTVNIJyA/IDIgOiAxOyBpIDw9IE51bWJlcihmaWVsZElkeCk7IGkrKykge1xuICAgICAgaWYgKCF0aGlzLmRhdGE/LltpXT8uWzBdPy5bMV0/LlswXSA9PSBudWxsKSB0aGlzLmRhdGFbaV0gPSBbeyAxOiBbJyddIH1dO1xuICAgIH1cblxuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHJlcGVhdGluZ0luZGV4KSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gTnVtYmVyKHJlcGVhdGluZ0luZGV4KTsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFbZmllbGRJZHhdPy5baV0/LlsxXT8uWzBdID09IG51bGwpIHRoaXMuZGF0YVtmaWVsZElkeF0hW2ldID0geyAxOiBbJyddIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wSWR4ICYmIE51bWJlcihjb21wSWR4KSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBOdW1iZXIoY29tcElkeCk7IGkrKykge1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFbZmllbGRJZHhdPy5bcmVwZWF0aW5nSW5kZXggYXMgbnVtYmVyXT8uW2ldPy5bMF0gPT0gbnVsbClcbiAgICAgICAgICAgIHRoaXMuZGF0YVtmaWVsZElkeF0hW3JlcGVhdGluZ0luZGV4IGFzIG51bWJlcl0hW2ldID0gWycnXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHN1YkNvbXBvbmVudEluZGV4KSkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IE51bWJlcihzdWJDb21wb25lbnRJbmRleCk7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVtmaWVsZElkeF0/LltyZXBlYXRpbmdJbmRleCBhcyBudW1iZXJdPy5bY29tcElkeF0/LltpXSA9PSBudWxsKVxuICAgICAgICAgICAgICB0aGlzLmRhdGFbZmllbGRJZHhdIVtyZXBlYXRpbmdJbmRleCBhcyBudW1iZXJdIVtjb21wSWR4XSFbaV0gPSAnJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmRhdGFbZmllbGRJZHhdIVtyZXBlYXRpbmdJbmRleCBhcyBudW1iZXJdIVtjb21wSWR4XSFbc3ViQ29tcG9uZW50SW5kZXggYXMgbnVtYmVyXSA9XG4gICAgICAgICAgICB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChzdWJDb21wb25lbnRJbmRleCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuZGF0YVtmaWVsZElkeF0hW3JlcGVhdGluZ0luZGV4IGFzIG51bWJlcl0hW2NvbXBJZHhdID0gW3ZhbHVlXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhW2ZpZWxkSWR4XSFbcmVwZWF0aW5nSW5kZXggYXMgbnVtYmVyXSA9IHsgMTogW3ZhbHVlXSB9O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVwZWF0aW5nSW5kZXggPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5kYXRhW2ZpZWxkSWR4XSA9IFt7IDE6IFsnJ10gfV07XG5cbiAgICAgIGlmIChjb21wSWR4ICYmIE51bWJlcihjb21wSWR4KSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBOdW1iZXIoY29tcElkeCk7IGkrKykge1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFbZmllbGRJZHhdPy5bMF0/LltpXT8uWzBdID09IG51bGwpIHRoaXMuZGF0YVtmaWVsZElkeF0hWzBdIVtpXSA9IFsnJ107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihzdWJDb21wb25lbnRJbmRleCkpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBOdW1iZXIoc3ViQ29tcG9uZW50SW5kZXgpOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbZmllbGRJZHhdPy5bMF0/Lltjb21wSWR4XT8uW2ldID09IG51bGwpXG4gICAgICAgICAgICAgIHRoaXMuZGF0YVtmaWVsZElkeF0hWzBdIVtjb21wSWR4XSFbaV0gPSAnJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmRhdGFbZmllbGRJZHhdIVswXSFbY29tcElkeF0hW3N1YkNvbXBvbmVudEluZGV4IGFzIG51bWJlcl0gPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChzdWJDb21wb25lbnRJbmRleCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuZGF0YVtmaWVsZElkeF0hWzBdIVtjb21wSWR4XSA9IFt2YWx1ZV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YVtmaWVsZElkeF0gPSBbeyAxOiBbdmFsdWVdIH1dO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICN0cmF2ZXJzZShcbiAgICBkYXRhOiBhbnksXG4gICAgcGF0aDogcmVhZG9ubHkgW3N0cmluZyB8IHVuZGVmaW5lZCwgbnVtYmVyIHwgdHJ1ZSwgc3RyaW5nIHwgdW5kZWZpbmVkLCBudW1iZXIgfCB0cnVlXSxcbiAgICBkZXB0aCA9IDAsXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgaW5kZXggPSBwYXRoW2RlcHRoXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBpZiAoaW5kZXggPT09IHRydWUgfHwgaW5kZXggPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBkZWxpbSA9IHRoaXMuI3BhcnNlTWFwW2RlcHRoKytdO1xuICAgICAgICByZXR1cm4gZGF0YS5tYXAoKGl0ZW0pID0+IHRoaXMuI3RyYXZlcnNlKGl0ZW0sIHBhdGgsIGRlcHRoKSkuam9pbihkZWxpbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy4jdHJhdmVyc2UoZGF0YVtOdW1iZXIoaW5kZXgpXSwgcGF0aCwgKytkZXB0aCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChpbmRleCA9PT0gdHJ1ZSB8fCBpbmRleCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGRlbGltID0gdGhpcy4jcGFyc2VNYXBbZGVwdGgrK107XG5cbiAgICAgICAgY29uc3QgdmFsID0gT2JqZWN0LmtleXMoZGF0YSkubWFwKChrZXkpID0+IHRoaXMuI3RyYXZlcnNlKGRhdGFba2V5XSwgcGF0aCwgZGVwdGgpKTtcblxuICAgICAgICByZXR1cm4gdmFsLmpvaW4oZGVsaW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3RyYXZlcnNlKGRhdGFbTnVtYmVyKGluZGV4KV0sIHBhdGgsICsrZGVwdGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IFNlZ21lbnQgfSBmcm9tICcuL3NlZ21lbnQnO1xuaW1wb3J0IHR5cGUgeyBTZWdtZW50VHlwZSB9IGZyb20gJy4vdHlwZXMnO1xuXG5jbGFzcyBOb2RlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGRhdGE6IFNlZ21lbnQsXG4gICAgcHVibGljIG5leHQ6IE5vZGUgfCBudWxsID0gbnVsbCxcbiAgICBwdWJsaWMgcHJldjogTm9kZSB8IG51bGwgPSBudWxsLFxuICApIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBETEwge1xuICAjaGVhZDogTm9kZSB8IG51bGwgPSBudWxsO1xuICAjdGFpbDogTm9kZSB8IG51bGwgPSBudWxsO1xuICAjc2VnbWVudE5vZGVNYXAgPSBuZXcgV2Vha01hcDxTZWdtZW50LCBOb2RlPigpO1xuXG4gIGdldFNlZ21lbnQodHlwZTogU2VnbWVudFR5cGUpIHtcbiAgICBsZXQgY3VyciA9IHRoaXMuI2hlYWQ7XG5cbiAgICB3aGlsZSAoY3Vycikge1xuICAgICAgaWYgKGN1cnIuZGF0YS50eXBlID09PSB0eXBlKSByZXR1cm4gY3Vyci5kYXRhO1xuXG4gICAgICBjdXJyID0gY3Vyci5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyIHx8IG51bGw7XG4gIH1cblxuICBnZXRTZWdtZW50cyh0eXBlPzogU2VnbWVudFR5cGUpIHtcbiAgICBjb25zdCBzZWdtZW50cyA9IFtdO1xuICAgIGxldCBjdXJyID0gdGhpcy4jaGVhZDtcblxuICAgIHdoaWxlIChjdXJyKSB7XG4gICAgICBpZiAodHlwZSkge1xuICAgICAgICBpZiAodHlwZSA9PT0gY3Vyci5kYXRhLnR5cGUpIHNlZ21lbnRzLnB1c2goY3Vyci5kYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goY3Vyci5kYXRhKTtcbiAgICAgIH1cblxuICAgICAgY3VyciA9IGN1cnIubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VnbWVudHM7XG4gIH1cblxuICBnZXRTZWdtZW50c0FmdGVyKFxuICAgIHR5cGU6IFNlZ21lbnRUeXBlLFxuICAgIHN0YXJ0U2VnbWVudDogU2VnbWVudCxcbiAgICBzdG9wU2VnbWVudFR5cGU6IFNlZ21lbnRUeXBlW10gPSBbXSxcbiAgICBjb25zZWN1dGl2ZSA9IGZhbHNlLFxuICApIHtcbiAgICBjb25zdCBzdGFydE5vZGUgPSB0aGlzLmdldE5vZGVGcm9tU2VnbWVudChzdGFydFNlZ21lbnQpO1xuXG4gICAgaWYgKCFzdGFydE5vZGUpIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvY2F0ZTogJ3N0YXJ0U2VnbWVudCcgWyR7c3RhcnRTZWdtZW50LnR5cGV9XWApO1xuXG4gICAgY29uc3QgcmVzID0gW107XG4gICAgbGV0IGN1cnIgPSBzdGFydE5vZGUubmV4dDtcblxuICAgIHdoaWxlIChjdXJyKSB7XG4gICAgICBpZiAoc3RvcFNlZ21lbnRUeXBlLmxlbmd0aCAmJiBzdG9wU2VnbWVudFR5cGUuaW5jbHVkZXMoY3Vyci5kYXRhLnR5cGUpKSBicmVhaztcblxuICAgICAgaWYgKGN1cnIuZGF0YS50eXBlID09PSB0eXBlKSByZXMucHVzaChjdXJyLmRhdGEpO1xuICAgICAgZWxzZSBpZiAoY29uc2VjdXRpdmUgJiYgcmVzLmxlbmd0aCkgYnJlYWs7XG5cbiAgICAgIGN1cnIgPSBjdXJyLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGFwcGVuZE5ld1NlZ21lbnQobmV3U2VnbWVudDogU2VnbWVudCwgdGFyZ2V0U2VnbWVudD86IFNlZ21lbnQpIHtcbiAgICBjb25zdCBuZXdOb2RlID0gbmV3IE5vZGUobmV3U2VnbWVudCk7XG4gICAgdGhpcy4jc2VnbWVudE5vZGVNYXAuc2V0KG5ld1NlZ21lbnQsIG5ld05vZGUpO1xuXG4gICAgdGhpcy5tb3ZlTm9kZUFmdGVyKG5ld05vZGUsIHRoaXMuZ2V0Tm9kZUZyb21TZWdtZW50KHRhcmdldFNlZ21lbnQpIHx8IHRoaXMuI3RhaWwpO1xuXG4gICAgcmV0dXJuIG5ld1NlZ21lbnQ7XG4gIH1cblxuICBtb3ZlTm9kZUFmdGVyKG5vZGU6IE5vZGUsIHRhcmdldE5vZGU6IE5vZGUgfCBudWxsKSB7XG4gICAgaWYgKCFub2RlKSB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2NhdGUgbm9kZScpO1xuXG4gICAgaWYgKCF0aGlzLiNoZWFkKSB7XG4gICAgICB0aGlzLiNoZWFkID0gdGhpcy4jdGFpbCA9IG5vZGU7XG4gICAgICBub2RlLnByZXYgPSBudWxsO1xuICAgICAgbm9kZS5uZXh0ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldE5vZGUpIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvY2F0ZSBub2RlIHRhcmdldE5vZGUnKTtcbiAgICBpZiAobm9kZSA9PT0gdGFyZ2V0Tm9kZSB8fCB0YXJnZXROb2RlLm5leHQgPT09IG5vZGUpIHJldHVybjtcblxuICAgIHRoaXMuI2RldGFjaE5vZGUobm9kZSk7XG5cbiAgICBub2RlLnByZXYgPSB0YXJnZXROb2RlO1xuICAgIG5vZGUubmV4dCA9IHRhcmdldE5vZGUubmV4dDtcblxuICAgIGlmICh0YXJnZXROb2RlLm5leHQpIHRhcmdldE5vZGUubmV4dC5wcmV2ID0gbm9kZTtcbiAgICBlbHNlIHRoaXMuI3RhaWwgPSBub2RlO1xuXG4gICAgdGFyZ2V0Tm9kZS5uZXh0ID0gbm9kZTtcbiAgfVxuXG4gIHByZXBlbmROZXdTZWdtZW50KG5ld1NlZ21lbnQ6IFNlZ21lbnQsIHRhcmdldFNlZ21lbnQ6IFNlZ21lbnQpIHtcbiAgICBjb25zdCBuZXdOb2RlID0gbmV3IE5vZGUobmV3U2VnbWVudCk7XG4gICAgdGhpcy4jc2VnbWVudE5vZGVNYXAuc2V0KG5ld1NlZ21lbnQsIG5ld05vZGUpO1xuXG4gICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRoaXMuZ2V0Tm9kZUZyb21TZWdtZW50KHRhcmdldFNlZ21lbnQpO1xuXG4gICAgaWYgKCF0YXJnZXROb2RlKSB0aHJvdyBuZXcgRXJyb3IoKTsgLy8gVG9kb1xuXG4gICAgdGhpcy5tb3ZlTm9kZUJlZm9yZShuZXdOb2RlLCB0YXJnZXROb2RlKTtcblxuICAgIHJldHVybiBuZXdTZWdtZW50O1xuICB9XG5cbiAgbW92ZU5vZGVCZWZvcmUobm9kZTogTm9kZSwgdGFyZ2V0Tm9kZTogTm9kZSkge1xuICAgIGlmICghbm9kZSkgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9jYXRlIG5vZGUnKTtcblxuICAgIGlmICghdGhpcy4jaGVhZCkge1xuICAgICAgdGhpcy4jaGVhZCA9IHRoaXMuI3RhaWwgPSBub2RlO1xuICAgICAgbm9kZS5wcmV2ID0gbnVsbDtcbiAgICAgIG5vZGUubmV4dCA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXROb2RlKSB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2NhdGUgdGFyZ2V0Tm9kZScpO1xuICAgIGlmIChub2RlID09PSB0YXJnZXROb2RlIHx8IHRhcmdldE5vZGUucHJldiA9PT0gbm9kZSkgcmV0dXJuO1xuXG4gICAgdGhpcy4jZGV0YWNoTm9kZShub2RlKTtcblxuICAgIG5vZGUubmV4dCA9IHRhcmdldE5vZGU7XG4gICAgbm9kZS5wcmV2ID0gdGFyZ2V0Tm9kZS5wcmV2O1xuXG4gICAgaWYgKHRhcmdldE5vZGUucHJldikgdGFyZ2V0Tm9kZS5wcmV2Lm5leHQgPSBub2RlO1xuICAgIGVsc2UgdGhpcy4jaGVhZCA9IG5vZGU7XG5cbiAgICB0YXJnZXROb2RlLnByZXYgPSBub2RlO1xuICB9XG5cbiAgZGVsZXRlU2VnbWVudChzZWdtZW50OiBTZWdtZW50KSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUZyb21TZWdtZW50KHNlZ21lbnQpO1xuICAgIGlmICghbm9kZSkgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9jYXRlOiAnc2VnbWVudCcgWyR7c2VnbWVudC50eXBlfV1gKTtcblxuICAgIHRoaXMuI2RldGFjaE5vZGUobm9kZSk7XG4gICAgdGhpcy4jc2VnbWVudE5vZGVNYXAuZGVsZXRlKHNlZ21lbnQpO1xuICB9XG5cbiAgI2RldGFjaE5vZGUobm9kZTogTm9kZSkge1xuICAgIGlmIChub2RlLnByZXYpIG5vZGUucHJldi5uZXh0ID0gbm9kZS5uZXh0O1xuICAgIGlmICh0aGlzLiNoZWFkID09PSBub2RlKSB0aGlzLiNoZWFkID0gbm9kZS5uZXh0O1xuXG4gICAgaWYgKG5vZGUubmV4dCkgbm9kZS5uZXh0LnByZXYgPSBub2RlLnByZXY7XG4gICAgaWYgKHRoaXMuI3RhaWwgPT09IG5vZGUpIHRoaXMuI3RhaWwgPSBub2RlLnByZXY7XG5cbiAgICBub2RlLnByZXYgPSBudWxsO1xuICAgIG5vZGUubmV4dCA9IG51bGw7XG4gIH1cblxuICBnZXROb2RlRnJvbVNlZ21lbnQoc2VnbWVudD86IFNlZ21lbnQpIHtcbiAgICBpZiAoc2VnbWVudCAmJiAhKHNlZ21lbnQgaW5zdGFuY2VvZiBTZWdtZW50KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdzZWdtZW50Jy4gc2VnbWVudCBub3QgYW4gaW5zdGFuY2Ugb2YgU2VnbWVudGApO1xuXG4gICAgcmV0dXJuIChzZWdtZW50ICYmIHRoaXMuI3NlZ21lbnROb2RlTWFwLmdldChzZWdtZW50KSkgfHwgbnVsbDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgRExMIH0gZnJvbSAnLi9kbGwnO1xuaW1wb3J0IHsgU2VnbWVudCB9IGZyb20gJy4vc2VnbWVudCc7XG5pbXBvcnQgdHlwZSB7IFByZXR0aWZ5LCBTZWdtZW50VHlwZSwgVFBhcnNlT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgSEw3IHtcbiAgcmF3OiBzdHJpbmc7XG4gIHBhcnNlT3B0aW9uczogVFBhcnNlT3B0aW9ucztcbiAgI2RsbDogRExMO1xuXG4gIGNvbnN0cnVjdG9yKGhsN01zZzogc3RyaW5nLCBwYXJzZU9wdGlvbnM/OiBQcmV0dGlmeTxQYXJ0aWFsPFRQYXJzZU9wdGlvbnM+Pikge1xuICAgIHRoaXMucmF3ID0gaGw3TXNnO1xuICAgIHRoaXMucGFyc2VPcHRpb25zID0ge1xuICAgICAgZmllbGREZWxpbTogcGFyc2VPcHRpb25zPy5maWVsZERlbGltID8/ICd8JyxcbiAgICAgIHJlcGVhdGluZ0RlbGltOiBwYXJzZU9wdGlvbnM/LnJlcGVhdGluZ0RlbGltID8/ICd+JyxcbiAgICAgIGNvbXBvbmVudERlbGltOiBwYXJzZU9wdGlvbnM/LmNvbXBvbmVudERlbGltID8/ICdeJyxcbiAgICAgIHN1YkNvbXBEZWxpbTogcGFyc2VPcHRpb25zPy5zdWJDb21wRGVsaW0gPz8gJyYnLFxuICAgICAgZW9sRGVsaW06IHBhcnNlT3B0aW9ucz8uZW9sRGVsaW0gPz8gJ1xccj9cXG58XFxyJyxcbiAgICAgIGJ1aWxkRW9sQ2hhcjogcGFyc2VPcHRpb25zPy5idWlsZEVvbENoYXIgPz8gJ1xcclxcbicsXG4gICAgfTtcbiAgICB0aGlzLiNkbGwgPSBuZXcgRExMKCk7XG4gICAgdGhpcy50cmFuc2Zvcm0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBpcyB0cmlnZ2VyZWQgaW50ZXJuYWxseSBhbmQgZG9lc250IG5lZWQgdG8gYmUgaW52b2tlZCBtYW51YWxseS5cbiAgICovXG4gIHRyYW5zZm9ybSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMucmF3ICE9PSAnc3RyaW5nJyB8fCAhdGhpcy5yYXcuc3RhcnRzV2l0aCgnTVNIJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByYXcgSEw3IG1lc3NhZ2UuIEV4cGVjdGVkIG1zZyB0byBiZSBhIHN0cmluZyBzdGFydGluZyB3aXRoIE1TSCcpO1xuICAgIH1cblxuICAgIGlmICghWydcXHI/XFxuXFx8XFxyJywgJ1xcclxcbicsICdcXG4nLCAnXFxyJ10uaW5jbHVkZXModGhpcy5wYXJzZU9wdGlvbnMuZW9sRGVsaW0pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgRU9MIGNoYXJhY3Rlci4gRXhwZWN0ZWQgXFxcXHI/XFxcXG5cXHxcXFxcciwgXFxcXHJcXFxcbiwgXFxcXG4sIFxcXFxyJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VnbWVudHNTdHJBcnIgPSB0aGlzLnJhd1xuICAgICAgLnNwbGl0KFJlZ0V4cCh0aGlzLnBhcnNlT3B0aW9ucy5lb2xEZWxpbSkpXG4gICAgICAuZmlsdGVyKChzZWdtZW50U3RyKSA9PiB0aGlzLnZhbGlkYXRlU2VnbWVudChzZWdtZW50U3RyKSk7XG5cbiAgICBjb25zdCB7IGZpZWxkRGVsaW0sIHJlcGVhdGluZ0RlbGltLCBjb21wb25lbnREZWxpbSwgc3ViQ29tcERlbGltIH0gPSB0aGlzLnBhcnNlT3B0aW9ucztcblxuICAgIGZvciAoY29uc3Qgc2VnbWVudFN0ciBvZiBzZWdtZW50c1N0ckFycikge1xuICAgICAgY29uc3QgZmllbGRzID0gc2VnbWVudFN0ci5zcGxpdChmaWVsZERlbGltKTtcbiAgICAgIGNvbnN0IHR5cGUgPSBzZWdtZW50U3RyLnN1YnN0cmluZygwLCAzKSBhcyBTZWdtZW50VHlwZTtcbiAgICAgIGNvbnN0IHNlZ21lbnQgPSBuZXcgU2VnbWVudCh0eXBlLCB0aGlzLnBhcnNlT3B0aW9ucyk7XG4gICAgICBsZXQgZmllbGRJZHggPSB0eXBlID09PSAnTVNIJyA/IDEgOiAwO1xuICAgICAgc2VnbWVudC5kYXRhID0ge307XG5cbiAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICAgIHNlZ21lbnQuZGF0YVtmaWVsZElkeF0gPSBzZWdtZW50LmRhdGFbZmllbGRJZHhdIHx8IFtdO1xuICAgICAgICBsZXQgcmVwZWF0RmllbGRJZHggPSAwO1xuXG4gICAgICAgIGZvciAoY29uc3QgcmVwZWF0RmllbGQgb2YgZmllbGQuc3BsaXQocmVwZWF0aW5nRGVsaW0pKSB7XG4gICAgICAgICAgbGV0IGNvbXBJZHggPSAxO1xuICAgICAgICAgIHNlZ21lbnQuZGF0YVtmaWVsZElkeF0hW3JlcGVhdEZpZWxkSWR4XSA9IHNlZ21lbnQuZGF0YVtmaWVsZElkeF0hW3JlcGVhdEZpZWxkSWR4XSB8fCB7fTtcblxuICAgICAgICAgIGZvciAoY29uc3QgY29tcCBvZiByZXBlYXRGaWVsZC5zcGxpdChjb21wb25lbnREZWxpbSkpIHtcbiAgICAgICAgICAgIHNlZ21lbnQuZGF0YVtmaWVsZElkeF0hW3JlcGVhdEZpZWxkSWR4XSFbY29tcElkeCsrXSA9IGNvbXAuc3BsaXQoc3ViQ29tcERlbGltKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXBlYXRGaWVsZElkeCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgZmllbGRJZHgrKztcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgPT09ICdNU0gnICYmIHNlZ21lbnQuZGF0YVsyXT8uWzBdICYmIGZpZWxkc1sxXSkge1xuICAgICAgICBzZWdtZW50LmRhdGFbMl0gPSBbeyAxOiBbZmllbGRzWzFdXSB9XTtcbiAgICAgIH1cblxuICAgICAgdGhpcy4jZGxsLmFwcGVuZE5ld1NlZ21lbnQoc2VnbWVudCk7XG4gICAgfVxuICB9XG5cbiAgYnVpbGQoKSB7XG4gICAgY29uc3QgeyBmaWVsZERlbGltLCByZXBlYXRpbmdEZWxpbSwgY29tcG9uZW50RGVsaW0sIHN1YkNvbXBEZWxpbSwgYnVpbGRFb2xDaGFyIH0gPVxuICAgICAgdGhpcy5wYXJzZU9wdGlvbnM7XG4gICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLmdldFNlZ21lbnRzKCk7XG4gICAgY29uc3Qgc2VnbWVudHNTdHIgPSBbXTtcblxuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cykge1xuICAgICAgY29uc3QgZmllbGRzU3RyQXJyID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgZmllbGRLZXkgaW4gc2VnbWVudC5kYXRhKSB7XG4gICAgICAgIGNvbnN0IHJlcGVhdHNTdHJBcnIgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHJlcGVhdGluZ0ZpZWxkIG9mIHNlZ21lbnQuZGF0YVtmaWVsZEtleV0hKSB7XG4gICAgICAgICAgY29uc3QgY29tcHNTdHJBcnIgPSBbXTtcblxuICAgICAgICAgIGZvciAoY29uc3QgY29tcEtleSBpbiByZXBlYXRpbmdGaWVsZCkge1xuICAgICAgICAgICAgY29tcHNTdHJBcnIucHVzaChyZXBlYXRpbmdGaWVsZFtjb21wS2V5XT8uam9pbihzdWJDb21wRGVsaW0pKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXBlYXRzU3RyQXJyLnB1c2goY29tcHNTdHJBcnIuam9pbihjb21wb25lbnREZWxpbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZmllbGRzU3RyQXJyLnB1c2gocmVwZWF0c1N0ckFyci5qb2luKHJlcGVhdGluZ0RlbGltKSk7XG4gICAgICB9XG5cbiAgICAgIHNlZ21lbnRzU3RyLnB1c2goZmllbGRzU3RyQXJyLmpvaW4oZmllbGREZWxpbSkpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWdtZW50c1N0ci5qb2luKGJ1aWxkRW9sQ2hhcik7XG4gIH1cblxuICBnZXRTZWdtZW50KHR5cGU6IFNlZ21lbnRUeXBlKTogU2VnbWVudCB8IG51bGwge1xuICAgIGlmICghL15bQS1aXFxkXXszfSQvLnRlc3QodHlwZSkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd0eXBlJyBbJHt0eXBlfV1gKTtcblxuICAgIHJldHVybiB0aGlzLiNkbGwuZ2V0U2VnbWVudCh0eXBlKTtcbiAgfVxuXG4gIGdldFNlZ21lbnRzKHR5cGU/OiBTZWdtZW50VHlwZSk6IFNlZ21lbnRbXSB7XG4gICAgaWYgKHR5cGUgJiYgIS9eW0EtWlxcZF17M30kLy50ZXN0KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAndHlwZScgWyR7dHlwZX1dYCk7XG5cbiAgICByZXR1cm4gdGhpcy4jZGxsLmdldFNlZ21lbnRzKHR5cGUpO1xuICB9XG5cbiAgZ2V0U2VnbWVudHNBZnRlcihcbiAgICB0eXBlOiBTZWdtZW50VHlwZSxcbiAgICBzdGFydFNlZ21lbnQ6IFNlZ21lbnQsXG4gICAgc3RvcFNlZ21lbnRUeXBlOiBTZWdtZW50VHlwZVtdID0gW10sXG4gICAgY29uc2VjdXRpdmUgPSBmYWxzZSxcbiAgKTogU2VnbWVudFtdIHtcbiAgICBpZiAoIS9eW0EtWlxcZF17M30kLy50ZXN0KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAndHlwZScgWyR7dHlwZX1dYCk7XG4gICAgaWYgKCFzdGFydFNlZ21lbnQgfHwgIShzdGFydFNlZ21lbnQgaW5zdGFuY2VvZiBTZWdtZW50KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdzdGFydFNlZ21lbnQnYCk7XG4gICAgaWYgKCFzdG9wU2VnbWVudFR5cGUgfHwgIUFycmF5LmlzQXJyYXkoc3RvcFNlZ21lbnRUeXBlKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdzdG9wU2VnbWVudFR5cGUnYCk7XG4gICAgaWYgKHR5cGVvZiBjb25zZWN1dGl2ZSAhPT0gJ2Jvb2xlYW4nKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ2NvbnNlY3V0aXZlJyBbJHtjb25zZWN1dGl2ZX1dYCk7XG4gICAgaWYgKCF0aGlzLiNkbGwuZ2V0Tm9kZUZyb21TZWdtZW50KHN0YXJ0U2VnbWVudCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2NhdGU6ICdzdGFydFNlZ21lbnQnIFske3N0YXJ0U2VnbWVudC50eXBlfV1gKTtcblxuICAgIHJldHVybiB0aGlzLiNkbGwuZ2V0U2VnbWVudHNBZnRlcih0eXBlLCBzdGFydFNlZ21lbnQsIHN0b3BTZWdtZW50VHlwZSwgY29uc2VjdXRpdmUpO1xuICB9XG5cbiAgY3JlYXRlU2VnbWVudCh0eXBlOiBTZWdtZW50VHlwZSk6IFNlZ21lbnQge1xuICAgIGlmICghL15bQS1aXFxkXXszfSQvLnRlc3QodHlwZSkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd0eXBlJyBbJHt0eXBlfV1gKTtcblxuICAgIHJldHVybiB0aGlzLiNkbGwuYXBwZW5kTmV3U2VnbWVudChuZXcgU2VnbWVudCh0eXBlLCB0aGlzLnBhcnNlT3B0aW9ucykpO1xuICB9XG5cbiAgY3JlYXRlU2VnbWVudEFmdGVyKHR5cGU6IFNlZ21lbnRUeXBlLCB0YXJnZXRTZWdtZW50OiBTZWdtZW50KTogU2VnbWVudCB7XG4gICAgaWYgKCEvXltBLVpcXGRdezN9JC8udGVzdCh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3R5cGUnIFske3R5cGV9XWApO1xuICAgIGlmICghdGFyZ2V0U2VnbWVudCB8fCAhKHRhcmdldFNlZ21lbnQgaW5zdGFuY2VvZiBTZWdtZW50KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd0YXJnZXRTZWdtZW50J2ApO1xuICAgIGlmICh0aGlzLiNkbGwuZ2V0Tm9kZUZyb21TZWdtZW50KHRhcmdldFNlZ21lbnQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9jYXRlOiAndGFyZ2V0U2VnbWVudCcgWyR7dGFyZ2V0U2VnbWVudC50eXBlfV1gKTtcblxuICAgIHJldHVybiB0aGlzLiNkbGwuYXBwZW5kTmV3U2VnbWVudChuZXcgU2VnbWVudCh0eXBlLCB0aGlzLnBhcnNlT3B0aW9ucyksIHRhcmdldFNlZ21lbnQpO1xuICB9XG5cbiAgY3JlYXRlU2VnbWVudEJlZm9yZSh0eXBlOiBTZWdtZW50VHlwZSwgdGFyZ2V0U2VnbWVudDogU2VnbWVudCk6IFNlZ21lbnQge1xuICAgIGlmICghL15bQS1aXFxkXXszfSQvLnRlc3QodHlwZSkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd0eXBlJyBbJHt0eXBlfV1gKTtcbiAgICBpZiAoIXRhcmdldFNlZ21lbnQgfHwgISh0YXJnZXRTZWdtZW50IGluc3RhbmNlb2YgU2VnbWVudCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAndGFyZ2V0U2VnbWVudCdgKTtcbiAgICBpZiAodGhpcy4jZGxsLmdldE5vZGVGcm9tU2VnbWVudCh0YXJnZXRTZWdtZW50KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvY2F0ZTogJ3N0YXJ0U2VnbWVudCcgWyR7dGFyZ2V0U2VnbWVudC50eXBlfV1gKTtcblxuICAgIHJldHVybiB0aGlzLiNkbGwucHJlcGVuZE5ld1NlZ21lbnQobmV3IFNlZ21lbnQodHlwZSwgdGhpcy5wYXJzZU9wdGlvbnMpLCB0YXJnZXRTZWdtZW50KTtcbiAgfVxuXG4gIGRlbGV0ZVNlZ21lbnQoc2VnbWVudDogU2VnbWVudCkge1xuICAgIHRoaXMuZGVsZXRlU2VnbWVudHMoW3NlZ21lbnRdKTtcbiAgfVxuXG4gIGRlbGV0ZVNlZ21lbnRzKHNlZ21lbnRzOiBTZWdtZW50W10pIHtcbiAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygc2VnbWVudHMpIHtcbiAgICAgIGlmICghc2VnbWVudCB8fCAhKHNlZ21lbnQgaW5zdGFuY2VvZiBTZWdtZW50KSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3NlZ21lbnRzJ2ApO1xuICAgICAgaWYgKHRoaXMuI2RsbC5nZXROb2RlRnJvbVNlZ21lbnQoc2VnbWVudCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvY2F0ZTogJ3NlZ21lbnQnIFske3NlZ21lbnQudHlwZX1dYCk7XG5cbiAgICAgIHRoaXMuI2RsbC5kZWxldGVTZWdtZW50KHNlZ21lbnQpO1xuICAgIH1cbiAgfVxuXG4gIG1vdmVTZWdtZW50QWZ0ZXIoc2VnbWVudDogU2VnbWVudCwgdGFyZ2V0U2VnbWVudDogU2VnbWVudCkge1xuICAgIGlmICghc2VnbWVudCB8fCAhKHNlZ21lbnQgaW5zdGFuY2VvZiBTZWdtZW50KSkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3NlZ21lbnQnYCk7XG4gICAgaWYgKCF0YXJnZXRTZWdtZW50IHx8ICEodGFyZ2V0U2VnbWVudCBpbnN0YW5jZW9mIFNlZ21lbnQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3RhcmdldFNlZ21lbnQnYCk7XG5cbiAgICBjb25zdCBub2RlID0gdGhpcy4jZGxsLmdldE5vZGVGcm9tU2VnbWVudChzZWdtZW50KTtcbiAgICBjb25zdCB0YXJnZXROb2RlID0gdGhpcy4jZGxsLmdldE5vZGVGcm9tU2VnbWVudCh0YXJnZXRTZWdtZW50KTtcblxuICAgIGlmICghbm9kZSkgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9jYXRlOiAnc2VnbWVudCcgWyR7c2VnbWVudC50eXBlfV1gKTtcbiAgICBpZiAoIXRhcmdldE5vZGUpIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvY2F0ZTogJ3RhcmdldFNlZ21lbnQnIFske3RhcmdldFNlZ21lbnQudHlwZX1dYCk7XG5cbiAgICB0aGlzLiNkbGwubW92ZU5vZGVBZnRlcihub2RlLCB0YXJnZXROb2RlKTtcbiAgfVxuXG4gIG1vdmVTZWdtZW50QmVmb3JlKHNlZ21lbnQ6IFNlZ21lbnQsIHRhcmdldFNlZ21lbnQ6IFNlZ21lbnQpIHtcbiAgICBpZiAoIXNlZ21lbnQgfHwgIShzZWdtZW50IGluc3RhbmNlb2YgU2VnbWVudCkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdzZWdtZW50J2ApO1xuICAgIGlmICghdGFyZ2V0U2VnbWVudCB8fCAhKHRhcmdldFNlZ21lbnQgaW5zdGFuY2VvZiBTZWdtZW50KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd0YXJnZXRTZWdtZW50J2ApO1xuXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuI2RsbC5nZXROb2RlRnJvbVNlZ21lbnQoc2VnbWVudCk7XG4gICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRoaXMuI2RsbC5nZXROb2RlRnJvbVNlZ21lbnQodGFyZ2V0U2VnbWVudCk7XG5cbiAgICBpZiAoIW5vZGUpIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvY2F0ZTogJ3NlZ21lbnQnIFske3NlZ21lbnQudHlwZX1dYCk7XG4gICAgaWYgKCF0YXJnZXROb2RlKSB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2NhdGU6ICd0YXJnZXRTZWdtZW50JyBbJHt0YXJnZXRTZWdtZW50LnR5cGV9XWApO1xuXG4gICAgdGhpcy4jZGxsLm1vdmVOb2RlQmVmb3JlKG5vZGUsIHRhcmdldE5vZGUpO1xuICB9XG5cbiAgcmVpbmRleFNlZ21lbnRzKFxuICAgIHJlaW5kZXhDb25maWc6IFBhcnRpYWw8UmVjb3JkPFNlZ21lbnRUeXBlLCBTZWdtZW50VHlwZVtdPj4sXG4gICAgc3RhcnRJbmRleCA9IDEsXG4gICAgZmllbGQgPSAnMS4xJyxcbiAgKSB7XG4gICAgaWYgKFxuICAgICAgIXJlaW5kZXhDb25maWcgfHxcbiAgICAgIHR5cGVvZiByZWluZGV4Q29uZmlnICE9PSAnb2JqZWN0JyB8fFxuICAgICAgT2JqZWN0LnZhbHVlcyhyZWluZGV4Q29uZmlnKS5zb21lKCh2YWwpID0+ICFBcnJheS5pc0FycmF5KHZhbCkpXG4gICAgKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3JlaW5kZXhDb25maWcnYCk7XG4gICAgaWYgKCFzdGFydEluZGV4IHx8IHR5cGVvZiBzdGFydEluZGV4ICE9PSAnbnVtYmVyJylcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdzdGFydEluZGV4JyBbJHtzdGFydEluZGV4fV1gKTtcbiAgICBpZiAoZmllbGQgJiYgIS9eKFxcZCspKFxcLlxcZCspezAsMX0kLy50ZXN0KGZpZWxkKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdmaWVsZCcgWyR7ZmllbGR9XWApO1xuXG4gICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLmdldFNlZ21lbnRzKCk7XG4gICAgY29uc3QgaW5kZXhNYXA6IFBhcnRpYWw8UmVjb3JkPFNlZ21lbnRUeXBlLCBudW1iZXI+PiA9IHt9O1xuICAgIGNvbnN0IGluZGV4UmVzZXRUcmlnZ2VyTWFwOiBQYXJ0aWFsPFJlY29yZDxTZWdtZW50VHlwZSwgU2VnbWVudFR5cGVbXT4+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtzZWcsIHJlc2V0VHJpZ2dlclNlZ3NdIG9mIE9iamVjdC5lbnRyaWVzKHJlaW5kZXhDb25maWcpKSB7XG4gICAgICBpbmRleE1hcFtzZWddID0gc3RhcnRJbmRleDtcblxuICAgICAgaWYgKHJlc2V0VHJpZ2dlclNlZ3MpXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHJlc2V0VHJpZ2dlclNlZ3MpIChpbmRleFJlc2V0VHJpZ2dlck1hcFtrZXldID8/PSBbXSkucHVzaChzZWcpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cykge1xuICAgICAgaWYgKHJlaW5kZXhDb25maWdbc2VnbWVudC50eXBlXSkge1xuICAgICAgICBzZWdtZW50LnNldChgJHtzZWdtZW50LnR5cGV9LiR7ZmllbGR9YCwgU3RyaW5nKGluZGV4TWFwW3NlZ21lbnQudHlwZV0rKykpO1xuXG4gICAgICAgIGlmIChpbmRleFJlc2V0VHJpZ2dlck1hcFtzZWdtZW50LnR5cGVdKVxuICAgICAgICAgIGZvciAoY29uc3Qgc2VnIG9mIGluZGV4UmVzZXRUcmlnZ2VyTWFwW3NlZ21lbnQudHlwZV0hKSBpbmRleE1hcFtzZWddID0gc3RhcnRJbmRleDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlU2VnbWVudChzZWdtZW50OiBzdHJpbmcpIHtcbiAgICBpZiAoL15bQS1aXFxkXXszfVxcfC8udGVzdChzZWdtZW50KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFNlZ21lbnQ6IFske3NlZ21lbnQuc3Vic3RyaW5nKDAsIDQpfV1gKTtcbiAgfVxufVxuIl19
444
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9zZWdtZW50LnRzIiwiLi4vc3JjL3V0aWxzL2RsbC50cyIsIi4uL3NyYy91dGlscy9obDcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLElBQUEsU0FBQSxFQUFBLGtCQUFBLEVBQUEsV0FBQTtBQUVPLElBQU0sVUFBTixNQUFjO0FBQUEsRUFLbkIsV0FBQSxDQUNXLE1BQ1QsWUFBQSxFQUNBO0FBRlMsSUFBQSxJQUFBLENBQUEsSUFBQSxHQUFBLElBQUE7QUFOTixJQUFBLFlBQUEsQ0FBQSxJQUFBLEVBQUEsa0JBQUEsQ0FBQTtBQUNMLElBQUEsSUFBQSxDQUFBLElBQUEsR0FBcUIsRUFBQztBQUV0QixJQUFBLFlBQUEsQ0FBQSxJQUFBLEVBQUEsU0FBQSxDQUFBO0FBTEYsSUFBQSxJQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUE7QUFXSSxJQUFBLElBQUksQ0FBQyxJQUFBLElBQVEsQ0FBQyxlQUFBLENBQWdCLEtBQUssSUFBSSxDQUFBO0FBQ3JDLE1BQUEsTUFBTSxJQUFJLEtBQUEsQ0FBTSxDQUFBLDJCQUFBLEVBQThCLElBQUksQ0FBQSxDQUFBLENBQUcsQ0FBQTtBQUV2RCxJQUFBLElBQUEsQ0FBSyxJQUFBLENBQUssSUFBQSxLQUFTLEtBQUEsR0FBUSxHQUFBLEdBQU0sR0FBRyxDQUFBLEdBQUksQ0FBQyxFQUFFLENBQUEsRUFBRyxDQUFDLElBQUksQ0FBQSxFQUFHLENBQUE7QUFDdEQsSUFBQSxJQUFBLENBQUssWUFBQSxHQUFlO0FBQUEsTUFDbEIsVUFBQSxFQUFBLENBQVksRUFBQSxHQUFBLFlBQUEsSUFBQSxJQUFBLEdBQUEsTUFBQSxHQUFBLFlBQUEsQ0FBYyxVQUFBLEtBQWQsSUFBQSxHQUFBLEVBQUEsR0FBNEIsR0FBQTtBQUFBLE1BQ3hDLGNBQUEsRUFBQSxDQUFnQixFQUFBLEdBQUEsWUFBQSxJQUFBLElBQUEsR0FBQSxNQUFBLEdBQUEsWUFBQSxDQUFjLGNB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SUFDbkY7QUFFQSxJQUFBLEtBQUEsTUFBVyxXQUFXLFFBQUEsRUFBVTtBQUM5QixNQUFBLElBQUksYUFBQSxDQUFjLE9BQUEsQ0FBUSxJQUFJLENBQUEsRUFBRztBQUMvQixRQUFBLE9BQUEsQ0FBUSxHQUFBLENBQUksQ0FBQSxFQUFHLE9BQUEsQ0FBUSxJQUFJLENBQUEsQ0FBQSxFQUFJLEtBQUssQ0FBQSxDQUFBLEVBQUksTUFBQSxDQUFPLFFBQUEsQ0FBUyxPQUFBLENBQVEsSUFBSSxDQUFBLEVBQUcsQ0FBQyxDQUFBO0FBRXhFLFFBQUEsSUFBSSxvQkFBQSxDQUFxQixRQUFRLElBQUksQ0FBQTtBQUNuQyxVQUFBLEtBQUEsTUFBVyxPQUFPLG9CQUFBLENBQXFCLE9BQUEsQ0FBUSxJQUFJLENBQUEsRUFBSSxRQUFBLENBQVMsR0FBRyxDQUFBLEdBQUksVUFBQTtBQUFBLE1BQzNFO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUVRLGdCQUFnQixPQUFBLEVBQWlCO0FBQ3ZDLElBQUEsSUFBSSxJQUFJLE1BQUEsQ0FBTyxDQUFBLGNBQUEsRUFBaUIsSUFBQSxDQUFLLFlBQUEsQ0FBYSxVQUFVLENBQUEsQ0FBRSxDQUFBLENBQUUsSUFBQSxDQUFLLE9BQU8sQ0FBQSxFQUFHLE9BQU8sSUFBQTtBQUFBLFNBQ2pGLE1BQU0sSUFBSSxLQUFBLENBQU0sQ0FBQSxpQkFBQSxFQUFvQixPQUFPLENBQUEsQ0FBRSxDQUFBO0FBQUEsRUFDcEQ7QUFDRjtBQXBQRSxJQUFBLEdBQUEsSUFBQSxPQUFBLEVBQUEiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByZXR0aWZ5LCBTZWdtZW50VHlwZSwgVFBhcnNlT3B0aW9ucywgVFNlZ21lbnREYXRhIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBTZWdtZW50IHtcbiAgZGF0YTogVFNlZ21lbnREYXRhID0ge307XG4gIHByaXZhdGUgcGFyc2VPcHRpb25zOiBQcmV0dGlmeTxPbWl0PFRQYXJzZU9wdGlvbnMsICdlb2xEZWxpbScgfCAnYnVpbGRFb2xDaGFyJz4+O1xuICAjcGFyc2VNYXA6IFJlY29yZDxudW1iZXIsIHN0cmluZz47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgdHlwZTogU2VnbWVudFR5cGUsXG4gICAgcGFyc2VPcHRpb25zPzogUHJldHRpZnk8T21pdDxUUGFyc2VPcHRpb25zLCAnZW9sRGVsaW0nIHwgJ2J1aWxkRW9sQ2hhcic+PixcbiAgKSB7XG4gICAgaWYgKCF0eXBlIHx8ICEvXltBLVowLTldezN9JC8udGVzdCh0eXBlKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd0eXBlJyBbJHt0eXBlfV1gKTtcblxuICAgIHRoaXMuZGF0YVt0eXBlID09PSAnTVNIJyA/ICcxJyA6ICcwJ10gPSBbeyAxOiBbdHlwZV0gfV07XG4gICAgdGhpcy5wYXJzZU9wdGlvbnMgPSB7XG4gICAgICBmaWVsZERlbGltOiBwYXJzZU9wdGlvbnM/LmZpZWxkRGVsaW0gPz8gJ3wnLFxuICAgICAgcmVwZWF0aW5nRGVsaW06IHBhcnNlT3B0aW9ucz8ucmVwZWF0aW5nRGVsaW0gPz8gJ34nLFxuICAgICAgY29tcG9uZW50RGVsaW06IHBhcnNlT3B0aW9ucz8uY29tcG9uZW50RGVsaW0gPz8gJ14nLFxuICAgICAgc3ViQ29tcERlbGltOiBwYXJzZU9wdGlvbnM/LnN1YkNvbXBEZWxpbSA/PyAnJicsXG4gICAgfTtcbiAgICB0aGlzLiNwYXJzZU1hcCA9IHtcbiAgICAgIDA6IHRoaXMucGFyc2VPcHRpb25zLmZpZWxkRGVsaW0sXG4gICAgICAxOiB0aGlzLnBhcnNlT3B0aW9ucy5yZXBlYXRpbmdEZWxpbSxcbiAgICAgIDI6IHRoaXMucGFyc2VPcHRpb25zLmNvbXBvbmVudERlbGltLFxuICAgICAgMzogdGhpcy5wYXJzZU9wdGlvbnMuc3ViQ29tcERlbGltLFxuICAgIH07XG4gIH1cblxuICBnZXQoZmllbGQ6IHN0cmluZywgcmVwZWF0aW5nSW5kZXg6IG51bWJlciB8IHRydWUgPSAwLCBzdWJDb21wb25lbnRJbmRleDogbnVtYmVyIHwgdHJ1ZSA9IDApIHtcbiAgICBjb25zdCB2YWxpZGF0ZSA9ICh2YWw6IG51bWJlciB8IHRydWUpID0+XG4gICAgICAhKCh0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiB2YWwgPj0gMCkgfHwgdmFsID09PSB0cnVlKTtcblxuICAgIGlmICghZmllbGQgfHwgIS9eW0EtWjAtOV17M30oXFwuXFxkKyl7MCwyfSQvLnRlc3QoZmllbGQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ2ZpZWxkJyBbJHtmaWVsZH1dYCk7XG4gICAgaWYgKHZhbGlkYXRlKHJlcGVhdGluZ0luZGV4KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdyZXBlYXRpbmdJbmRleCcgWyR7cmVwZWF0aW5nSW5kZXh9XWApO1xuICAgIGlmICh2YWxpZGF0ZShzdWJDb21wb25lbnRJbmRleCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAnc3ViQ29tcG9uZW50SW5kZXgnIFske3N1YkNvbXBvbmVudEluZGV4fV1gKTtcblxuICAgIGNvbnN0IFt0eXBlLCBmaWVsZElkeCwgY29tcElkeF0gPSBmaWVsZC5zcGxpdCgnLicpO1xuICAgIGNvbnN0IHBhdGggPSBbZmllbGRJZHgsIHJlcGVhdGluZ0luZGV4LCBjb21wSWR4LCBzdWJDb21wb25lbnRJbmRleF0gYXMgY29uc3Q7XG5cbiAgICBpZiAoIXR5cGUgfHwgdHlwZSAhPT0gdGhpcy50eXBlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBwYXJhbWV0ZXI6ICdmaWVsZCcuIENhbm5vdCBnZXQgWyR7ZmllbGR9XSBmcm9tIFske3RoaXMudHlwZX1dIHNlZ21lbnQuYCxcbiAgICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy4jdHJhdmVyc2UodGhpcy5kYXRhLCBwYXRoKSB8fCBudWxsO1xuICB9XG5cbiAgc2V0KFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICByZXBlYXRpbmdJbmRleDogbnVtYmVyIHwgdHJ1ZSA9IDAsXG4gICAgc3ViQ29tcG9uZW50SW5kZXg6IG51bWJlciB8IHRydWUgPSAwLFxuICApIHtcbiAgICBjb25zdCB2YWxpZGF0ZSA9ICh2YWw6IG51bWJlciB8IHRydWUpID0+XG4gICAgICAhKCh0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiB2YWwgPj0gMCkgfHwgdmFsID09PSB0cnVlKTtcblxuICAgIGlmICghZmllbGQgfHwgIS9eW0EtWlxcZF17M30oXFwuXFxkKyl7MSwyfSQvLnRlc3QoZmllbGQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ2ZpZWxkJyBbJHtmaWVsZH1dYCk7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJylcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd2YWx1ZScgWyR7dmFsdWV9XWApO1xuICAgIGlmICh2YWxpZGF0ZShyZXBlYXRpbmdJbmRleCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAncmVwZWF0aW5nSW5kZXgnIFske3JlcGVhdGluZ0luZGV4fV1gKTtcbiAgICBpZiAodmFsaWRhdGUoc3ViQ29tcG9uZW50SW5kZXgpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3N1YkNvbXBvbmVudEluZGV4JyBbJHtzdWJDb21wb25lbnRJbmRleH1dYCk7XG5cbiAgICBjb25zdCBbdHlwZSwgZmllbGRJZHgsIGNvbXBJZHhdID0gZmllbGQuc3BsaXQoJy4nKTtcblxuICAgIGlmICghdHlwZSB8fCB0eXBlICE9PSB0aGlzLnR5cGUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHBhcmFtZXRlcjogJ2ZpZWxkJyBbJHtmaWVsZH1dLiBDYW5ub3Qgc2V0IFske2ZpZWxkfV0gZnJvbSBbJHt0aGlzLnR5cGV9XSBzZWdtZW50LmAsXG4gICAgICApO1xuICAgIGlmICghZmllbGRJZHggfHwgIU51bWJlcihmaWVsZElkeCkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdmaWVsZCcgWyR7ZmllbGR9XWApO1xuXG4gICAgZm9yIChsZXQgaSA9IHR5cGUgPT09ICdNU0gnID8gMiA6IDE7IGkgPD0gTnVtYmVyKGZpZWxkSWR4KTsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5kYXRhPy5baV0/LlswXT8uWzFdPy5bMF0gPT0gbnVsbCkgdGhpcy5kYXRhW2ldID0gW3sgMTogWycnXSB9XTtcbiAgICB9XG5cbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihyZXBlYXRpbmdJbmRleCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IE51bWJlcihyZXBlYXRpbmdJbmRleCk7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5kYXRhW2ZpZWxkSWR4XT8uW2ldPy5bMV0/LlswXSA9PSBudWxsKSB0aGlzLmRhdGFbZmllbGRJZHhdIVtpXSA9IHsgMTogWycnXSB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29tcElkeCAmJiBOdW1iZXIoY29tcElkeCkpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gTnVtYmVyKGNvbXBJZHgpOyBpKyspIHtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2ZpZWxkSWR4XT8uW3JlcGVhdGluZ0luZGV4IGFzIG51bWJlcl0/LltpXT8uWzBdID09IG51bGwpXG4gICAgICAgICAgICB0aGlzLmRhdGFbZmllbGRJZHhdIVtyZXBlYXRpbmdJbmRleCBhcyBudW1iZXJdIVtpXSA9IFsnJ107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihzdWJDb21wb25lbnRJbmRleCkpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBOdW1iZXIoc3ViQ29tcG9uZW50SW5kZXgpOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbZmllbGRJZHhdPy5bcmVwZWF0aW5nSW5kZXggYXMgbnVtYmVyXT8uW2NvbXBJZHhdPy5baV0gPT0gbnVsbClcbiAgICAgICAgICAgICAgdGhpcy5kYXRhW2ZpZWxkSWR4XSFbcmVwZWF0aW5nSW5kZXggYXMgbnVtYmVyXSFbY29tcElkeF0hW2ldID0gJyc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5kYXRhW2ZpZWxkSWR4XSFbcmVwZWF0aW5nSW5kZXggYXMgbnVtYmVyXSFbY29tcElkeF0hW3N1YkNvbXBvbmVudEluZGV4IGFzIG51bWJlcl0gPVxuICAgICAgICAgICAgdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc3ViQ29tcG9uZW50SW5kZXggPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmRhdGFbZmllbGRJZHhdIVtyZXBlYXRpbmdJbmRleCBhcyBudW1iZXJdIVtjb21wSWR4XSA9IFt2YWx1ZV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YVtmaWVsZElkeF0hW3JlcGVhdGluZ0luZGV4IGFzIG51bWJlcl0gPSB7IDE6IFt2YWx1ZV0gfTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlcGVhdGluZ0luZGV4ID09IHRydWUpIHtcbiAgICAgIHRoaXMuZGF0YVtmaWVsZElkeF0gPSBbeyAxOiBbJyddIH1dO1xuXG4gICAgICBpZiAoY29tcElkeCAmJiBOdW1iZXIoY29tcElkeCkpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gTnVtYmVyKGNvbXBJZHgpOyBpKyspIHtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhW2ZpZWxkSWR4XT8uWzBdPy5baV0/LlswXSA9PSBudWxsKSB0aGlzLmRhdGFbZmllbGRJZHhdIVswXSFbaV0gPSBbJyddO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoc3ViQ29tcG9uZW50SW5kZXgpKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gTnVtYmVyKHN1YkNvbXBvbmVudEluZGV4KTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhW2ZpZWxkSWR4XT8uWzBdPy5bY29tcElkeF0/LltpXSA9PSBudWxsKVxuICAgICAgICAgICAgICB0aGlzLmRhdGFbZmllbGRJZHhdIVswXSFbY29tcElkeF0hW2ldID0gJyc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5kYXRhW2ZpZWxkSWR4XSFbMF0hW2NvbXBJZHhdIVtzdWJDb21wb25lbnRJbmRleCBhcyBudW1iZXJdID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc3ViQ29tcG9uZW50SW5kZXggPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmRhdGFbZmllbGRJZHhdIVswXSFbY29tcElkeF0gPSBbdmFsdWVdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGFbZmllbGRJZHhdID0gW3sgMTogW3ZhbHVlXSB9XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAjdHJhdmVyc2UoXG4gICAgZGF0YTogYW55LFxuICAgIHBhdGg6IHJlYWRvbmx5IFtzdHJpbmcgfCB1bmRlZmluZWQsIG51bWJlciB8IHRydWUsIHN0cmluZyB8IHVuZGVmaW5lZCwgbnVtYmVyIHwgdHJ1ZV0sXG4gICAgZGVwdGggPSAwLFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGluZGV4ID0gcGF0aFtkZXB0aF07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgaWYgKGluZGV4ID09PSB0cnVlIHx8IGluZGV4ID09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZGVsaW0gPSB0aGlzLiNwYXJzZU1hcFtkZXB0aCsrXTtcbiAgICAgICAgcmV0dXJuIGRhdGEubWFwKChpdGVtKSA9PiB0aGlzLiN0cmF2ZXJzZShpdGVtLCBwYXRoLCBkZXB0aCkpLmpvaW4oZGVsaW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3RyYXZlcnNlKGRhdGFbTnVtYmVyKGluZGV4KV0sIHBhdGgsICsrZGVwdGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoaW5kZXggPT09IHRydWUgfHwgaW5kZXggPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBkZWxpbSA9IHRoaXMuI3BhcnNlTWFwW2RlcHRoKytdO1xuXG4gICAgICAgIGNvbnN0IHZhbCA9IE9iamVjdC5rZXlzKGRhdGEpLm1hcCgoa2V5KSA9PiB0aGlzLiN0cmF2ZXJzZShkYXRhW2tleV0sIHBhdGgsIGRlcHRoKSk7XG5cbiAgICAgICAgcmV0dXJuIHZhbC5qb2luKGRlbGltKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLiN0cmF2ZXJzZShkYXRhW051bWJlcihpbmRleCldLCBwYXRoLCArK2RlcHRoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBTZWdtZW50IH0gZnJvbSAnLi9zZWdtZW50JztcbmltcG9ydCB0eXBlIHsgU2VnbWVudFR5cGUgfSBmcm9tICcuL3R5cGVzJztcblxuY2xhc3MgTm9kZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBkYXRhOiBTZWdtZW50LFxuICAgIHB1YmxpYyBuZXh0OiBOb2RlIHwgbnVsbCA9IG51bGwsXG4gICAgcHVibGljIHByZXY6IE5vZGUgfCBudWxsID0gbnVsbCxcbiAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgRExMIHtcbiAgI2hlYWQ6IE5vZGUgfCBudWxsID0gbnVsbDtcbiAgI3RhaWw6IE5vZGUgfCBudWxsID0gbnVsbDtcbiAgI3NlZ21lbnROb2RlTWFwID0gbmV3IFdlYWtNYXA8U2VnbWVudCwgTm9kZT4oKTtcblxuICBnZXRTZWdtZW50KHR5cGU6IFNlZ21lbnRUeXBlKSB7XG4gICAgbGV0IGN1cnIgPSB0aGlzLiNoZWFkO1xuXG4gICAgd2hpbGUgKGN1cnIpIHtcbiAgICAgIGlmIChjdXJyLmRhdGEudHlwZSA9PT0gdHlwZSkgcmV0dXJuIGN1cnIuZGF0YTtcblxuICAgICAgY3VyciA9IGN1cnIubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3VyciB8fCBudWxsO1xuICB9XG5cbiAgZ2V0U2VnbWVudHModHlwZT86IFNlZ21lbnRUeXBlKSB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBbXTtcbiAgICBsZXQgY3VyciA9IHRoaXMuI2hlYWQ7XG5cbiAgICB3aGlsZSAoY3Vycikge1xuICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09IGN1cnIuZGF0YS50eXBlKSBzZWdtZW50cy5wdXNoKGN1cnIuZGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWdtZW50cy5wdXNoKGN1cnIuZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGN1cnIgPSBjdXJyLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlZ21lbnRzO1xuICB9XG5cbiAgZ2V0U2VnbWVudHNBZnRlcihcbiAgICB0eXBlOiBTZWdtZW50VHlwZSxcbiAgICBzdGFydFNlZ21lbnQ6IFNlZ21lbnQsXG4gICAgc3RvcFNlZ21lbnRUeXBlOiBTZWdtZW50VHlwZVtdID0gW10sXG4gICAgY29uc2VjdXRpdmUgPSBmYWxzZSxcbiAgKSB7XG4gICAgY29uc3Qgc3RhcnROb2RlID0gdGhpcy5nZXROb2RlRnJvbVNlZ21lbnQoc3RhcnRTZWdtZW50KTtcblxuICAgIGlmICghc3RhcnROb2RlKSB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2NhdGU6ICdzdGFydFNlZ21lbnQnIFske3N0YXJ0U2VnbWVudC50eXBlfV1gKTtcblxuICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgIGxldCBjdXJyID0gc3RhcnROb2RlLm5leHQ7XG5cbiAgICB3aGlsZSAoY3Vycikge1xuICAgICAgaWYgKHN0b3BTZWdtZW50VHlwZS5sZW5ndGggJiYgc3RvcFNlZ21lbnRUeXBlLmluY2x1ZGVzKGN1cnIuZGF0YS50eXBlKSkgYnJlYWs7XG5cbiAgICAgIGlmIChjdXJyLmRhdGEudHlwZSA9PT0gdHlwZSkgcmVzLnB1c2goY3Vyci5kYXRhKTtcbiAgICAgIGVsc2UgaWYgKGNvbnNlY3V0aXZlICYmIHJlcy5sZW5ndGgpIGJyZWFrO1xuXG4gICAgICBjdXJyID0gY3Vyci5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBhcHBlbmROZXdTZWdtZW50KG5ld1NlZ21lbnQ6IFNlZ21lbnQsIHRhcmdldFNlZ21lbnQ/OiBTZWdtZW50KSB7XG4gICAgY29uc3QgbmV3Tm9kZSA9IG5ldyBOb2RlKG5ld1NlZ21lbnQpO1xuICAgIHRoaXMuI3NlZ21lbnROb2RlTWFwLnNldChuZXdTZWdtZW50LCBuZXdOb2RlKTtcblxuICAgIHRoaXMubW92ZU5vZGVBZnRlcihuZXdOb2RlLCB0aGlzLmdldE5vZGVGcm9tU2VnbWVudCh0YXJnZXRTZWdtZW50KSB8fCB0aGlzLiN0YWlsKTtcblxuICAgIHJldHVybiBuZXdTZWdtZW50O1xuICB9XG5cbiAgbW92ZU5vZGVBZnRlcihub2RlOiBOb2RlLCB0YXJnZXROb2RlOiBOb2RlIHwgbnVsbCkge1xuICAgIGlmICghbm9kZSkgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gbG9jYXRlIG5vZGUnKTtcblxuICAgIGlmICghdGhpcy4jaGVhZCkge1xuICAgICAgdGhpcy4jaGVhZCA9IHRoaXMuI3RhaWwgPSBub2RlO1xuICAgICAgbm9kZS5wcmV2ID0gbnVsbDtcbiAgICAgIG5vZGUubmV4dCA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXROb2RlKSB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2NhdGUgdGFyZ2V0Tm9kZScpO1xuICAgIGlmIChub2RlID09PSB0YXJnZXROb2RlIHx8IHRhcmdldE5vZGUubmV4dCA9PT0gbm9kZSkgcmV0dXJuO1xuXG4gICAgdGhpcy4jZGV0YWNoTm9kZShub2RlKTtcblxuICAgIG5vZGUucHJldiA9IHRhcmdldE5vZGU7XG4gICAgbm9kZS5uZXh0ID0gdGFyZ2V0Tm9kZS5uZXh0O1xuXG4gICAgaWYgKHRhcmdldE5vZGUubmV4dCkgdGFyZ2V0Tm9kZS5uZXh0LnByZXYgPSBub2RlO1xuICAgIGVsc2UgdGhpcy4jdGFpbCA9IG5vZGU7XG5cbiAgICB0YXJnZXROb2RlLm5leHQgPSBub2RlO1xuICB9XG5cbiAgcHJlcGVuZE5ld1NlZ21lbnQobmV3U2VnbWVudDogU2VnbWVudCwgdGFyZ2V0U2VnbWVudDogU2VnbWVudCkge1xuICAgIGNvbnN0IG5ld05vZGUgPSBuZXcgTm9kZShuZXdTZWdtZW50KTtcbiAgICB0aGlzLiNzZWdtZW50Tm9kZU1hcC5zZXQobmV3U2VnbWVudCwgbmV3Tm9kZSk7XG5cbiAgICBjb25zdCB0YXJnZXROb2RlID0gdGhpcy5nZXROb2RlRnJvbVNlZ21lbnQodGFyZ2V0U2VnbWVudCk7XG5cbiAgICBpZiAoIXRhcmdldE5vZGUpIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvY2F0ZTogJ3RhcmdldFNlZ21lbnQnIFske3RhcmdldFNlZ21lbnQudHlwZX1dYCk7XG5cbiAgICB0aGlzLm1vdmVOb2RlQmVmb3JlKG5ld05vZGUsIHRhcmdldE5vZGUpO1xuXG4gICAgcmV0dXJuIG5ld1NlZ21lbnQ7XG4gIH1cblxuICBtb3ZlTm9kZUJlZm9yZShub2RlOiBOb2RlLCB0YXJnZXROb2RlOiBOb2RlKSB7XG4gICAgaWYgKCFub2RlKSB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2NhdGUgbm9kZScpO1xuXG4gICAgaWYgKCF0aGlzLiNoZWFkKSB7XG4gICAgICB0aGlzLiNoZWFkID0gdGhpcy4jdGFpbCA9IG5vZGU7XG4gICAgICBub2RlLnByZXYgPSBudWxsO1xuICAgICAgbm9kZS5uZXh0ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldE5vZGUpIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvY2F0ZSB0YXJnZXROb2RlJyk7XG4gICAgaWYgKG5vZGUgPT09IHRhcmdldE5vZGUgfHwgdGFyZ2V0Tm9kZS5wcmV2ID09PSBub2RlKSByZXR1cm47XG5cbiAgICB0aGlzLiNkZXRhY2hOb2RlKG5vZGUpO1xuXG4gICAgbm9kZS5uZXh0ID0gdGFyZ2V0Tm9kZTtcbiAgICBub2RlLnByZXYgPSB0YXJnZXROb2RlLnByZXY7XG5cbiAgICBpZiAodGFyZ2V0Tm9kZS5wcmV2KSB0YXJnZXROb2RlLnByZXYubmV4dCA9IG5vZGU7XG4gICAgZWxzZSB0aGlzLiNoZWFkID0gbm9kZTtcblxuICAgIHRhcmdldE5vZGUucHJldiA9IG5vZGU7XG4gIH1cblxuICBkZWxldGVTZWdtZW50KHNlZ21lbnQ6IFNlZ21lbnQpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlRnJvbVNlZ21lbnQoc2VnbWVudCk7XG4gICAgaWYgKCFub2RlKSB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2NhdGU6ICdzZWdtZW50JyBbJHtzZWdtZW50LnR5cGV9XWApO1xuXG4gICAgdGhpcy4jZGV0YWNoTm9kZShub2RlKTtcbiAgICB0aGlzLiNzZWdtZW50Tm9kZU1hcC5kZWxldGUoc2VnbWVudCk7XG4gIH1cblxuICAjZGV0YWNoTm9kZShub2RlOiBOb2RlKSB7XG4gICAgaWYgKG5vZGUucHJldikgbm9kZS5wcmV2Lm5leHQgPSBub2RlLm5leHQ7XG4gICAgaWYgKHRoaXMuI2hlYWQgPT09IG5vZGUpIHRoaXMuI2hlYWQgPSBub2RlLm5leHQ7XG5cbiAgICBpZiAobm9kZS5uZXh0KSBub2RlLm5leHQucHJldiA9IG5vZGUucHJldjtcbiAgICBpZiAodGhpcy4jdGFpbCA9PT0gbm9kZSkgdGhpcy4jdGFpbCA9IG5vZGUucHJldjtcblxuICAgIG5vZGUucHJldiA9IG51bGw7XG4gICAgbm9kZS5uZXh0ID0gbnVsbDtcbiAgfVxuXG4gIGdldE5vZGVGcm9tU2VnbWVudChzZWdtZW50PzogU2VnbWVudCkge1xuICAgIGlmIChzZWdtZW50ICYmICEoc2VnbWVudCBpbnN0YW5jZW9mIFNlZ21lbnQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3NlZ21lbnQnLiBzZWdtZW50IG5vdCBhbiBpbnN0YW5jZSBvZiBTZWdtZW50YCk7XG5cbiAgICByZXR1cm4gKHNlZ21lbnQgJiYgdGhpcy4jc2VnbWVudE5vZGVNYXAuZ2V0KHNlZ21lbnQpKSB8fCBudWxsO1xuICB9XG59XG4iLCJpbXBvcnQgeyBETEwgfSBmcm9tICcuL2RsbCc7XG5pbXBvcnQgeyBTZWdtZW50IH0gZnJvbSAnLi9zZWdtZW50JztcbmltcG9ydCB0eXBlIHsgUHJldHRpZnksIFNlZ21lbnRUeXBlLCBUUGFyc2VPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBITDcge1xuICByYXc6IHN0cmluZztcbiAgcGFyc2VPcHRpb25zOiBUUGFyc2VPcHRpb25zO1xuICAjZGxsOiBETEw7XG5cbiAgY29uc3RydWN0b3IoaGw3TXNnOiBzdHJpbmcsIHBhcnNlT3B0aW9ucz86IFByZXR0aWZ5PFBhcnRpYWw8VFBhcnNlT3B0aW9ucz4+KSB7XG4gICAgdGhpcy5yYXcgPSBobDdNc2c7XG4gICAgdGhpcy5wYXJzZU9wdGlvbnMgPSB7XG4gICAgICBmaWVsZERlbGltOiBwYXJzZU9wdGlvbnM/LmZpZWxkRGVsaW0gPz8gJ3wnLFxuICAgICAgcmVwZWF0aW5nRGVsaW06IHBhcnNlT3B0aW9ucz8ucmVwZWF0aW5nRGVsaW0gPz8gJ34nLFxuICAgICAgY29tcG9uZW50RGVsaW06IHBhcnNlT3B0aW9ucz8uY29tcG9uZW50RGVsaW0gPz8gJ14nLFxuICAgICAgc3ViQ29tcERlbGltOiBwYXJzZU9wdGlvbnM/LnN1YkNvbXBEZWxpbSA/PyAnJicsXG4gICAgICBlb2xEZWxpbTogcGFyc2VPcHRpb25zPy5lb2xEZWxpbSA/PyAnXFxyP1xcbnxcXHInLFxuICAgICAgYnVpbGRFb2xDaGFyOiBwYXJzZU9wdGlvbnM/LmJ1aWxkRW9sQ2hhciA/PyAnXFxyJyxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMucGFyc2VPcHRpb25zLmZpZWxkRGVsaW0ubGVuZ3RoICE9PSAxKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZmllbGQgZGVsaW1pdGVyJyk7XG5cbiAgICB0aGlzLiNkbGwgPSBuZXcgRExMKCk7XG4gICAgdGhpcy50cmFuc2Zvcm0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBpcyB0cmlnZ2VyZWQgaW50ZXJuYWxseSBhbmQgZG9lc250IG5lZWQgdG8gYmUgaW52b2tlZCBtYW51YWxseS5cbiAgICovXG4gIHRyYW5zZm9ybSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMucmF3ICE9PSAnc3RyaW5nJyB8fCAhdGhpcy5yYXcuc3RhcnRzV2l0aCgnTVNIJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByYXcgSEw3IG1lc3NhZ2UuIEV4cGVjdGVkIG1zZyB0byBiZSBhIHN0cmluZyBzdGFydGluZyB3aXRoIE1TSCcpO1xuICAgIH1cblxuICAgIGlmICghWydcXHI/XFxuXFx8XFxyJywgJ1xcclxcbicsICdcXG4nLCAnXFxyJ10uaW5jbHVkZXModGhpcy5wYXJzZU9wdGlvbnMuZW9sRGVsaW0pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgRU9MIGNoYXJhY3Rlci4gRXhwZWN0ZWQgXFxcXHI/XFxcXG5cXHxcXFxcciwgXFxcXHJcXFxcbiwgXFxcXG4sIFxcXFxyJyk7XG4gICAgfVxuXG4gICAgdGhpcy4jZGxsID0gbmV3IERMTCgpO1xuXG4gICAgY29uc3Qgc2VnbWVudHNTdHJBcnIgPSB0aGlzLnJhd1xuICAgICAgLnNwbGl0KFJlZ0V4cCh0aGlzLnBhcnNlT3B0aW9ucy5lb2xEZWxpbSkpXG4gICAgICAuZmlsdGVyKChzZWdtZW50U3RyKSA9PiBCb29sZWFuKHNlZ21lbnRTdHIpICYmIHRoaXMudmFsaWRhdGVTZWdtZW50KHNlZ21lbnRTdHIpKTtcblxuICAgIGNvbnN0IHsgZmllbGREZWxpbSwgcmVwZWF0aW5nRGVsaW0sIGNvbXBvbmVudERlbGltLCBzdWJDb21wRGVsaW0gfSA9IHRoaXMucGFyc2VPcHRpb25zO1xuXG4gICAgZm9yIChjb25zdCBzZWdtZW50U3RyIG9mIHNlZ21lbnRzU3RyQXJyKSB7XG4gICAgICBjb25zdCBmaWVsZHMgPSBzZWdtZW50U3RyLnNwbGl0KGZpZWxkRGVsaW0pO1xuICAgICAgY29uc3QgdHlwZSA9IHNlZ21lbnRTdHIuc3Vic3RyaW5nKDAsIDMpIGFzIFNlZ21lbnRUeXBlO1xuICAgICAgY29uc3Qgc2VnbWVudCA9IG5ldyBTZWdtZW50KHR5cGUsIHRoaXMucGFyc2VPcHRpb25zKTtcbiAgICAgIGxldCBmaWVsZElkeCA9IHR5cGUgPT09ICdNU0gnID8gMSA6IDA7XG4gICAgICBzZWdtZW50LmRhdGEgPSB7fTtcblxuICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgc2VnbWVudC5kYXRhW2ZpZWxkSWR4XSA9IHNlZ21lbnQuZGF0YVtmaWVsZElkeF0gfHwgW107XG4gICAgICAgIGxldCByZXBlYXRGaWVsZElkeCA9IDA7XG5cbiAgICAgICAgZm9yIChjb25zdCByZXBlYXRGaWVsZCBvZiBmaWVsZC5zcGxpdChyZXBlYXRpbmdEZWxpbSkpIHtcbiAgICAgICAgICBsZXQgY29tcElkeCA9IDE7XG4gICAgICAgICAgc2VnbWVudC5kYXRhW2ZpZWxkSWR4XSFbcmVwZWF0RmllbGRJZHhdID0gc2VnbWVudC5kYXRhW2ZpZWxkSWR4XSFbcmVwZWF0RmllbGRJZHhdIHx8IHt9O1xuXG4gICAgICAgICAgZm9yIChjb25zdCBjb21wIG9mIHJlcGVhdEZpZWxkLnNwbGl0KGNvbXBvbmVudERlbGltKSkge1xuICAgICAgICAgICAgc2VnbWVudC5kYXRhW2ZpZWxkSWR4XSFbcmVwZWF0RmllbGRJZHhdIVtjb21wSWR4KytdID0gY29tcC5zcGxpdChzdWJDb21wRGVsaW0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlcGVhdEZpZWxkSWR4Kys7XG4gICAgICAgIH1cblxuICAgICAgICBmaWVsZElkeCsrO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PT0gJ01TSCcgJiYgZmllbGRzWzFdKSB7XG4gICAgICAgIHNlZ21lbnQuZGF0YVsyXSA9IFt7IDE6IFtmaWVsZHNbMV1dIH1dO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiNkbGwuYXBwZW5kTmV3U2VnbWVudChzZWdtZW50KTtcbiAgICB9XG4gIH1cblxuICBidWlsZCgpIHtcbiAgICBjb25zdCB7IGZpZWxkRGVsaW0sIHJlcGVhdGluZ0RlbGltLCBjb21wb25lbnREZWxpbSwgc3ViQ29tcERlbGltLCBidWlsZEVvbENoYXIgfSA9XG4gICAgICB0aGlzLnBhcnNlT3B0aW9ucztcbiAgICBjb25zdCBzZWdtZW50cyA9IHRoaXMuZ2V0U2VnbWVudHMoKTtcbiAgICBjb25zdCBzZWdtZW50c1N0ciA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKSB7XG4gICAgICBjb25zdCBmaWVsZHNTdHJBcnIgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBmaWVsZEtleSBpbiBzZWdtZW50LmRhdGEpIHtcbiAgICAgICAgY29uc3QgcmVwZWF0c1N0ckFyciA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgcmVwZWF0aW5nRmllbGQgb2Ygc2VnbWVudC5kYXRhW2ZpZWxkS2V5XSEpIHtcbiAgICAgICAgICBjb25zdCBjb21wc1N0ckFyciA9IFtdO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBjb21wS2V5IGluIHJlcGVhdGluZ0ZpZWxkKSB7XG4gICAgICAgICAgICBjb21wc1N0ckFyci5wdXNoKHJlcGVhdGluZ0ZpZWxkW2NvbXBLZXldPy5qb2luKHN1YkNvbXBEZWxpbSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlcGVhdHNTdHJBcnIucHVzaChjb21wc1N0ckFyci5qb2luKGNvbXBvbmVudERlbGltKSk7XG4gICAgICAgIH1cblxuICAgICAgICBmaWVsZHNTdHJBcnIucHVzaChyZXBlYXRzU3RyQXJyLmpvaW4ocmVwZWF0aW5nRGVsaW0pKTtcbiAgICAgIH1cblxuICAgICAgc2VnbWVudHNTdHIucHVzaChmaWVsZHNTdHJBcnIuam9pbihmaWVsZERlbGltKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlZ21lbnRzU3RyLmpvaW4oYnVpbGRFb2xDaGFyKTtcbiAgfVxuXG4gIGdldFNlZ21lbnQodHlwZTogU2VnbWVudFR5cGUpOiBTZWdtZW50IHwgbnVsbCB7XG4gICAgaWYgKCEvXltBLVpcXGRdezN9JC8udGVzdCh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3R5cGUnIFske3R5cGV9XWApO1xuXG4gICAgcmV0dXJuIHRoaXMuI2RsbC5nZXRTZWdtZW50KHR5cGUpO1xuICB9XG5cbiAgZ2V0U2VnbWVudHModHlwZT86IFNlZ21lbnRUeXBlKTogU2VnbWVudFtdIHtcbiAgICBpZiAodHlwZSAmJiAhL15bQS1aXFxkXXszfSQvLnRlc3QodHlwZSkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd0eXBlJyBbJHt0eXBlfV1gKTtcblxuICAgIHJldHVybiB0aGlzLiNkbGwuZ2V0U2VnbWVudHModHlwZSk7XG4gIH1cblxuICBnZXRTZWdtZW50c0FmdGVyKFxuICAgIHN0YXJ0U2VnbWVudDogU2VnbWVudCxcbiAgICB0eXBlOiBTZWdtZW50VHlwZSxcbiAgICBzdG9wU2VnbWVudFR5cGU6IFNlZ21lbnRUeXBlW10gPSBbXSxcbiAgICBjb25zZWN1dGl2ZSA9IGZhbHNlLFxuICApOiBTZWdtZW50W10ge1xuICAgIGlmICghL15bQS1aXFxkXXszfSQvLnRlc3QodHlwZSkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd0eXBlJyBbJHt0eXBlfV1gKTtcbiAgICBpZiAoIXN0YXJ0U2VnbWVudCB8fCAhKHN0YXJ0U2VnbWVudCBpbnN0YW5jZW9mIFNlZ21lbnQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3N0YXJ0U2VnbWVudCdgKTtcbiAgICBpZiAoIXN0b3BTZWdtZW50VHlwZSB8fCAhQXJyYXkuaXNBcnJheShzdG9wU2VnbWVudFR5cGUpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3N0b3BTZWdtZW50VHlwZSdgKTtcbiAgICBpZiAodHlwZW9mIGNvbnNlY3V0aXZlICE9PSAnYm9vbGVhbicpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAnY29uc2VjdXRpdmUnIFske2NvbnNlY3V0aXZlfV1gKTtcbiAgICBpZiAoIXRoaXMuI2RsbC5nZXROb2RlRnJvbVNlZ21lbnQoc3RhcnRTZWdtZW50KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvY2F0ZTogJ3N0YXJ0U2VnbWVudCcgWyR7c3RhcnRTZWdtZW50LnR5cGV9XWApO1xuXG4gICAgcmV0dXJuIHRoaXMuI2RsbC5nZXRTZWdtZW50c0FmdGVyKHR5cGUsIHN0YXJ0U2VnbWVudCwgc3RvcFNlZ21lbnRUeXBlLCBjb25zZWN1dGl2ZSk7XG4gIH1cblxuICBjcmVhdGVTZWdtZW50KHR5cGU6IFNlZ21lbnRUeXBlKTogU2VnbWVudCB7XG4gICAgaWYgKCEvXltBLVpcXGRdezN9JC8udGVzdCh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3R5cGUnIFske3R5cGV9XWApO1xuXG4gICAgcmV0dXJuIHRoaXMuI2RsbC5hcHBlbmROZXdTZWdtZW50KG5ldyBTZWdtZW50KHR5cGUsIHRoaXMucGFyc2VPcHRpb25zKSk7XG4gIH1cblxuICBjcmVhdGVTZWdtZW50QWZ0ZXIodHlwZTogU2VnbWVudFR5cGUsIHRhcmdldFNlZ21lbnQ6IFNlZ21lbnQpOiBTZWdtZW50IHtcbiAgICBpZiAoIS9eW0EtWlxcZF17M30kLy50ZXN0KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAndHlwZScgWyR7dHlwZX1dYCk7XG4gICAgaWYgKCF0YXJnZXRTZWdtZW50IHx8ICEodGFyZ2V0U2VnbWVudCBpbnN0YW5jZW9mIFNlZ21lbnQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3RhcmdldFNlZ21lbnQnYCk7XG4gICAgaWYgKCF0aGlzLiNkbGwuZ2V0Tm9kZUZyb21TZWdtZW50KHRhcmdldFNlZ21lbnQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9jYXRlOiAndGFyZ2V0U2VnbWVudCcgWyR7dGFyZ2V0U2VnbWVudC50eXBlfV1gKTtcblxuICAgIHJldHVybiB0aGlzLiNkbGwuYXBwZW5kTmV3U2VnbWVudChuZXcgU2VnbWVudCh0eXBlLCB0aGlzLnBhcnNlT3B0aW9ucyksIHRhcmdldFNlZ21lbnQpO1xuICB9XG5cbiAgY3JlYXRlU2VnbWVudEJlZm9yZSh0eXBlOiBTZWdtZW50VHlwZSwgdGFyZ2V0U2VnbWVudDogU2VnbWVudCk6IFNlZ21lbnQge1xuICAgIGlmICghL15bQS1aXFxkXXszfSQvLnRlc3QodHlwZSkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd0eXBlJyBbJHt0eXBlfV1gKTtcbiAgICBpZiAoIXRhcmdldFNlZ21lbnQgfHwgISh0YXJnZXRTZWdtZW50IGluc3RhbmNlb2YgU2VnbWVudCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAndGFyZ2V0U2VnbWVudCdgKTtcbiAgICBpZiAoIXRoaXMuI2RsbC5nZXROb2RlRnJvbVNlZ21lbnQodGFyZ2V0U2VnbWVudCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2NhdGU6ICd0YXJnZXRTZWdtZW50JyBbJHt0YXJnZXRTZWdtZW50LnR5cGV9XWApO1xuXG4gICAgcmV0dXJuIHRoaXMuI2RsbC5wcmVwZW5kTmV3U2VnbWVudChuZXcgU2VnbWVudCh0eXBlLCB0aGlzLnBhcnNlT3B0aW9ucyksIHRhcmdldFNlZ21lbnQpO1xuICB9XG5cbiAgZGVsZXRlU2VnbWVudChzZWdtZW50OiBTZWdtZW50KSB7XG4gICAgdGhpcy5kZWxldGVTZWdtZW50cyhbc2VnbWVudF0pO1xuICB9XG5cbiAgZGVsZXRlU2VnbWVudHMoc2VnbWVudHM6IFNlZ21lbnRbXSkge1xuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cykge1xuICAgICAgaWYgKCFzZWdtZW50IHx8ICEoc2VnbWVudCBpbnN0YW5jZW9mIFNlZ21lbnQpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1ldGVyOiAnc2VnbWVudHMnYCk7XG4gICAgICBpZiAoIXRoaXMuI2RsbC5nZXROb2RlRnJvbVNlZ21lbnQoc2VnbWVudCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvY2F0ZTogJ3NlZ21lbnQnIFske3NlZ21lbnQudHlwZX1dYCk7XG5cbiAgICAgIHRoaXMuI2RsbC5kZWxldGVTZWdtZW50KHNlZ21lbnQpO1xuICAgIH1cbiAgfVxuXG4gIG1vdmVTZWdtZW50QWZ0ZXIoc2VnbWVudDogU2VnbWVudCwgdGFyZ2V0U2VnbWVudDogU2VnbWVudCkge1xuICAgIGlmICghc2VnbWVudCB8fCAhKHNlZ21lbnQgaW5zdGFuY2VvZiBTZWdtZW50KSkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3NlZ21lbnQnYCk7XG4gICAgaWYgKCF0YXJnZXRTZWdtZW50IHx8ICEodGFyZ2V0U2VnbWVudCBpbnN0YW5jZW9mIFNlZ21lbnQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3RhcmdldFNlZ21lbnQnYCk7XG5cbiAgICBjb25zdCBub2RlID0gdGhpcy4jZGxsLmdldE5vZGVGcm9tU2VnbWVudChzZWdtZW50KTtcbiAgICBjb25zdCB0YXJnZXROb2RlID0gdGhpcy4jZGxsLmdldE5vZGVGcm9tU2VnbWVudCh0YXJnZXRTZWdtZW50KTtcblxuICAgIGlmICghbm9kZSkgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9jYXRlOiAnc2VnbWVudCcgWyR7c2VnbWVudC50eXBlfV1gKTtcbiAgICBpZiAoIXRhcmdldE5vZGUpIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvY2F0ZTogJ3RhcmdldFNlZ21lbnQnIFske3RhcmdldFNlZ21lbnQudHlwZX1dYCk7XG5cbiAgICB0aGlzLiNkbGwubW92ZU5vZGVBZnRlcihub2RlLCB0YXJnZXROb2RlKTtcbiAgfVxuXG4gIG1vdmVTZWdtZW50QmVmb3JlKHNlZ21lbnQ6IFNlZ21lbnQsIHRhcmdldFNlZ21lbnQ6IFNlZ21lbnQpIHtcbiAgICBpZiAoIXNlZ21lbnQgfHwgIShzZWdtZW50IGluc3RhbmNlb2YgU2VnbWVudCkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdzZWdtZW50J2ApO1xuICAgIGlmICghdGFyZ2V0U2VnbWVudCB8fCAhKHRhcmdldFNlZ21lbnQgaW5zdGFuY2VvZiBTZWdtZW50KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICd0YXJnZXRTZWdtZW50J2ApO1xuXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuI2RsbC5nZXROb2RlRnJvbVNlZ21lbnQoc2VnbWVudCk7XG4gICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRoaXMuI2RsbC5nZXROb2RlRnJvbVNlZ21lbnQodGFyZ2V0U2VnbWVudCk7XG5cbiAgICBpZiAoIW5vZGUpIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvY2F0ZTogJ3NlZ21lbnQnIFske3NlZ21lbnQudHlwZX1dYCk7XG4gICAgaWYgKCF0YXJnZXROb2RlKSB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2NhdGU6ICd0YXJnZXRTZWdtZW50JyBbJHt0YXJnZXRTZWdtZW50LnR5cGV9XWApO1xuXG4gICAgdGhpcy4jZGxsLm1vdmVOb2RlQmVmb3JlKG5vZGUsIHRhcmdldE5vZGUpO1xuICB9XG5cbiAgcmVpbmRleFNlZ21lbnRzKFxuICAgIHJlaW5kZXhDb25maWc6IFBhcnRpYWw8UmVjb3JkPFNlZ21lbnRUeXBlLCBTZWdtZW50VHlwZVtdPj4sXG4gICAgc3RhcnRJbmRleCA9IDEsXG4gICAgZmllbGQgPSAnMS4xJyxcbiAgKSB7XG4gICAgaWYgKFxuICAgICAgIXJlaW5kZXhDb25maWcgfHxcbiAgICAgIHR5cGVvZiByZWluZGV4Q29uZmlnICE9PSAnb2JqZWN0JyB8fFxuICAgICAgT2JqZWN0LnZhbHVlcyhyZWluZGV4Q29uZmlnKS5zb21lKCh2YWwpID0+ICFBcnJheS5pc0FycmF5KHZhbCkpXG4gICAgKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtZXRlcjogJ3JlaW5kZXhDb25maWcnYCk7XG4gICAgaWYgKCFzdGFydEluZGV4IHx8IHR5cGVvZiBzdGFydEluZGV4ICE9PSAnbnVtYmVyJylcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdzdGFydEluZGV4JyBbJHtzdGFydEluZGV4fV1gKTtcbiAgICBpZiAoZmllbGQgJiYgIS9eKFxcZCspKFxcLlxcZCspezAsMX0kLy50ZXN0KGZpZWxkKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbWV0ZXI6ICdmaWVsZCcgWyR7ZmllbGR9XWApO1xuXG4gICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLmdldFNlZ21lbnRzKCk7XG4gICAgY29uc3QgaW5kZXhNYXA6IFBhcnRpYWw8UmVjb3JkPFNlZ21lbnRUeXBlLCBudW1iZXI+PiA9IHt9O1xuICAgIGNvbnN0IGluZGV4UmVzZXRUcmlnZ2VyTWFwOiBQYXJ0aWFsPFJlY29yZDxTZWdtZW50VHlwZSwgU2VnbWVudFR5cGVbXT4+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtzZWcsIHJlc2V0VHJpZ2dlclNlZ3NdIG9mIE9iamVjdC5lbnRyaWVzKHJlaW5kZXhDb25maWcpKSB7XG4gICAgICBpbmRleE1hcFtzZWddID0gc3RhcnRJbmRleDtcblxuICAgICAgaWYgKHJlc2V0VHJpZ2dlclNlZ3MpXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHJlc2V0VHJpZ2dlclNlZ3MpIChpbmRleFJlc2V0VHJpZ2dlck1hcFtrZXldID8/PSBbXSkucHVzaChzZWcpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cykge1xuICAgICAgaWYgKHJlaW5kZXhDb25maWdbc2VnbWVudC50eXBlXSkge1xuICAgICAgICBzZWdtZW50LnNldChgJHtzZWdtZW50LnR5cGV9LiR7ZmllbGR9YCwgU3RyaW5nKGluZGV4TWFwW3NlZ21lbnQudHlwZV0rKykpO1xuXG4gICAgICAgIGlmIChpbmRleFJlc2V0VHJpZ2dlck1hcFtzZWdtZW50LnR5cGVdKVxuICAgICAgICAgIGZvciAoY29uc3Qgc2VnIG9mIGluZGV4UmVzZXRUcmlnZ2VyTWFwW3NlZ21lbnQudHlwZV0hKSBpbmRleE1hcFtzZWddID0gc3RhcnRJbmRleDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlU2VnbWVudChzZWdtZW50OiBzdHJpbmcpIHtcbiAgICBpZiAobmV3IFJlZ0V4cChgXltBLVowLTldezN9XFxcXCR7dGhpcy5wYXJzZU9wdGlvbnMuZmllbGREZWxpbX1gKS50ZXN0KHNlZ21lbnQpKSByZXR1cm4gdHJ1ZTtcbiAgICBlbHNlIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzZWdtZW50OiAke3NlZ21lbnR9YCk7XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "hl7-tstd",
3
- "version": "1.0.0-dev.0",
4
- "description": "A simple package to create, parse & transform HL7 message.",
3
+ "version": "1.0.0-dev.2",
4
+ "description": "A simple lightweight package to create, parse & transform HL7 message.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
7
7
  "module": "./dist/index.js",
@@ -26,10 +26,11 @@
26
26
  "dist"
27
27
  ],
28
28
  "engines": {
29
- "node": ">=8.0.0"
29
+ "node": ">=10.0.0"
30
30
  },
31
31
  "scripts": {
32
- "build": "tsup"
32
+ "build": "tsup",
33
+ "test": "tsup && node --test"
33
34
  },
34
35
  "keywords": [
35
36
  "hl7",
@@ -50,6 +51,7 @@
50
51
  "bugs": {
51
52
  "url": "https://github.com/1nandagopal/hl7-tstd/issues"
52
53
  },
54
+ "sideEffects": false,
53
55
  "devDependencies": {
54
56
  "tsup": "^8.5.1",
55
57
  "typescript": "^5.9.2"